2011-10-05 40 views
6

Tôi kết nối điện thoại Android của mình với nhật thực. Và tôi thấy những thông điệp này từ Logcat. Bạn có thể cho tôi biết sự khác biệt giữa 'GC_EXPLICIT' và 'GC_EXTERNAL_ALLOC' là gì? và "45% miễn phí" có nghĩa là gì?Bộ sưu tập rác trong dalvik vm

10-05 12:08:34.450: DEBUG/dalvikvm(813): GC_EXTERNAL_ALLOC freed 63K, 45% free 3156K/5703K, external 4113K/4348K, paused 73ms 
10-05 12:08:34.480: DEBUG/dalvikvm(101): GC_EXTERNAL_ALLOC freed 55K, 40% free 5883K/9799K, external 4911K/4913K, paused 124ms 
10-05 12:08:37.120: DEBUG/dalvikvm(101): GC_EXPLICIT freed 84K, 41% free 5870K/9799K, external 5745K/6078K, paused 104ms 
10-05 12:08:40.099: DEBUG/dalvikvm(493): GC_EXPLICIT freed 14K, 48% free 3782K/7175K, external 1625K/2137K, paused 75ms 
10-05 12:08:45.110: DEBUG/dalvikvm(188): GC_EXPLICIT freed 57K, 54% free 3203K/6855K, external 4988K/6206K, paused 78ms 
10-05 12:09:05.119: DEBUG/dalvikvm(822): GC_EXPLICIT freed 349K, 46% free 3696K/6727K, external 1625K/2137K, paused 65ms 

Trả lời

9

tôi sẽ đánh giá cao đề nghị đưa ra các bài thuyết trình video quản lý bộ nhớ từ Google I/O 2011 một chiếc đồng hồ:

http://www.youtube.com/watch?v=_CruQY55HOk

Vào khoảng 14 phút trong, anh đi vào chiều sâu vào chính xác những gì các có nghĩa là trong đầu ra logcat.

GC Rõ ràng về cơ bản có nghĩa là một ứng dụng đã được gọi rõ ràng là System.gc();

GC Đồng thời được kích hoạt khi heap của bạn bắt đầu lấp đầy và GC Concurrent bắt đầu xóa bộ nhớ trước khi nó đầy.

1

GC_EXPLICIT nghĩa ứng dụng của bạn đã dứt khoát gọi System.gc() hoặc Hoạt động Manger của hệ thống Android gọi System.gc()

GC_EXTERNAL_ALLOC là một cái gì đó phức tạp hơn. Có một số bộ nhớ liên quan đến thời gian sống của đối tượng Java được gọi là bộ nhớ EXTERNAL. Chẳng hạn như sử dụng bộ nhớ bằng tài nguyên GPU hoặc pixmap của ứng dụng của bạn. Đây là loại bộ nhớ phân bổ sử dụng "malloc" của stdlib để cấp phát bộ nhớ heap nhưng không phân bổ từ GC Heap của Dalvik, nhưng nó cũng là một bộ nhớ "HEAP". Và tổng kích thước sử dụng HEAP phải nhỏ hơn giới hạn (quyết định bởi GC).

Phân bổ theo dõi Dalvik của bộ nhớ đó.

CONDITION: usableof(GC_HEAP) + usableof(NATIVE_HEAP[external]) <= allocaionLimit 

Dalvik sẽ gây ra một GC cho GC_EXTERNAL_ALLOC như một sideeffect khi tình trạng trên là không đúng sự thật.