Tôi đang gặp khó khăn khi cố gắng tìm một lỗ hổng Bộ nhớ có thể xảy ra. Tôi có một Hoạt động đang thực hiện một số công việc nặng nhọc trong Nền.Làm thế nào để Android Studio khởi tạo Garbage Collector và nó hoạt động như thế nào?
Sau một số tác vụ, ứng dụng sẽ tiêu thụ quá nhiều bộ nhớ. Có vẻ như nó không được làm sạch đúng cách.
Đây là hoạt động trong trạng thái mặc định:
Nếu tôi chạy nhiệm vụ mà các Hoạt động đang làm, bộ nhớ nhiều hơn và nhiều hơn nữa được phân bổ.
Hoạt động sau khi một số công việc:
Lúc đầu, tôi nghĩ đây phải là một vấn đề bộ nhớ, gây GC có thể không đúng cách giải phóng bộ nhớ. Theo như tôi biết, GC có thể giải phóng bộ nhớ, nếu không có tham chiếu nào còn lại đối tượng. Đúng không?
Bây giờ đến phần mà confuses me:
Nếu tôi chạy GC từ Android Studio, bộ nhớ được làm sạch đúng cách và Hoạt động của tôi không bao giờ bị đóng cửa. Tôi chỉ cần sử dụng Android Studio GC khi có nhiều bộ nhớ được cấp phát.
Đây là một ý tôi là:
Nói chung câu hỏi là:
Tại sao Android Studio GC có thể dọn dẹp bộ nhớ đúng và tại sao không nó hoạt động đúng với GC android tự động?
Tôi biết đây là một câu hỏi khá chung chung. Tôi chỉ muốn biết, nếu có nhiều loại bộ sưu tập rác hoặc những thứ như thế.
Đồng thời gọi số System.gc();
sẽ không dọn sạch bộ nhớ đúng cách.
Thông tin bổ sung:
Moto G 2nd gen
Android 5.0.2.
"Đôi khi, Hoạt động hoặc ứng dụng đóng. Tôi nghĩ điều đó có thể do các vấn đề về bộ nhớ gây ra". Nếu ứng dụng chết b/c nó hết bộ nhớ, bạn sẽ nhận được một ngoại lệ Out-of-Memory mà bạn có thể thấy rõ ràng trong Logcat. Linh cảm của tôi là ứng dụng của bạn đang bị lỗi vì một lý do khác. Hãy thử tìm kiếm thông qua logcat để xem lý do tai nạn là gì. – Shmuel
GC đồng thời chỉ thực hiện một phần bộ sưu tập để không gây ra tạm dừng đáng chú ý. Rõ ràng GC như được kích hoạt bởi Studio thực hiện quét toàn bộ GC. Một số đọc: https://source.android.com/devices/tech/dalvik/gc-debug.html – laalto
@Shmuel Không có ngoại lệ. Thậm chí không có cảnh báo. – FlanschiFox