Trong một nghĩa nào đó, GC_FOR_ALLOC
là nghiêm trọng hơn GC_CONCURRENT
, vì GC_FOR_ALLOC
có nghĩa là không có đủ bộ nhớ trống để hoàn thành một yêu cầu cấp phát, do đó, một thu gom rác thải là cần thiết, trong khi GC_CONCURRENT
chỉ có nghĩa là GC cảm thấy như chạy, thường vì số lượng bộ nhớ miễn phí đã trở thành thấp hơn một ngưỡng nhất định sau khi phân bổ.
Một GC_FOR_ALLOC
là do bản thân không phải là một dấu hiệu của một vấn đề trong ứng dụng của bạn tuy nhiên:
- các ứng dụng Android bắt đầu với một đống nhỏ mọc (lên đến một điểm) khi các ứng dụng đòi hỏi nhiều bộ nhớ hơn và nhiều hơn nữa, và a
GC_FOR_ALLOC
được thực hiện trước khi tăng kích thước của heap. Trong trường hợp này, GC_FOR_ALLOC
hoàn toàn bình thường.
- Nếu bạn cấp phát bộ nhớ nhanh hơn GC đồng thời có thời gian giải phóng bộ nhớ,
GC_FOR_ALLOC
là không thể tránh khỏi. Và không có gì sai với việc cấp phát bộ nhớ nhanh hơn GC đồng thời có thể giải phóng bộ nhớ.
Một loại nghiêm trọng hơn của GC trên Android là GC_BEFORE_OOM
, mà được thực hiện khi một yêu cầu phân bổ không ngay cả sau khi GC_FOR_ALLOC
và khi đống ứng dụng đã phát triển lớn như nó được phép có. Khi điều này xảy ra, như một phương sách cuối cùng, Dalvik cũng sẽ cố gắng giải phóng SoftReferences, trước khi thực hiện một nỗ lực cuối cùng trong việc cấp phát bộ nhớ và nếu điều đó không ném ra một ngoại lệ OutOfMemory.
Nếu bạn tò mò nhìn vào mã cho logic này, nó là trong tryMalloc()
trong dalvik.git/vm/alloc/Heap.cpp
Dù sao, nếu bạn không nhớ, tôi nghi ngờ rằng nhìn vào sản lượng logcat là cách hiệu quả nhất để gỡ lỗi các vấn đề thu gom rác của bạn. Tôi không biết vấn đề cụ thể bạn đang gặp phải, nhưng bạn đã xem xét các công cụ như Trình theo dõi phân bổ trong DDMS và phân tích các vùng đống với sự trợ giúp của công cụ hprof-conv
? (Xem http://android-developers.blogspot.se/2011/03/memory-analysis-for-android.html ví dụ để bắt đầu.)
Nguồn
2012-07-03 13:36:23
bạn đã đọc http://stackoverflow.com/questions/895444/java-garbage-collection-log-messages chưa? các liên kết được đề cập trong câu trả lời được chấp nhận có thể giúp bạn – kommradHomer
@kommradHomer Cảm ơn bạn đã trả lời nhưng tôi không nghĩ rằng áp dụng ở đây vì nó là máy ảo dalvik sẽ thực hiện quét GC. Tôi vẫn thấy liên kết là một thông tin, nếu dày đặc, đọc. –