2013-01-23 12 views
5

Tôi gặp sự cố khiến tôi hoang dã. Tôi sử dụng Google Map API V2 tại Mã của tôi và khi tôi đang di chuyển bản đồ tôi có thể thấy kết quả như sau Logcat (trên Nexus 7):Heap tiếp tục tăng trong Google Map API V2

01-23 21:17:10.724: D/dalvikvm(5484): GC_FOR_ALLOC freed 4531K, 21% free 12911K/16312K, paused 29ms, total 29ms 
01-23 21:17:10.724: I/dalvikvm-heap(5484): Grow heap (frag case) to 13.043MB for 285724-byte allocation 
01-23 21:17:10.744: D/dalvikvm(5484): GC_FOR_ALLOC freed 200K, 22% free 12990K/16592K, paused 25ms, total 25ms 
01-23 21:17:12.074: D/dalvikvm(5484): GC_FOR_ALLOC freed 1326K, 23% free 12893K/16592K, paused 30ms, total 31ms 
01-23 21:18:04.854: D/dalvikvm(5484): Debugger has detached; object registry had 1 entries 
01-23 21:18:07.374: D/dalvikvm(5484): GC_FOR_ALLOC freed 658K, 23% free 12904K/16592K, paused 27ms, total 27ms 
01-23 21:18:07.384: I/dalvikvm-heap(5484): Grow heap (frag case) to 13.763MB for 1048592-byte allocation 
01-23 21:18:07.404: D/dalvikvm(5484): GC_FOR_ALLOC freed 2K, 21% free 13925K/17620K, paused 27ms, total 27ms 
01-23 21:18:07.714: D/dalvikvm(5484): GC_FOR_ALLOC freed 2127K, 26% free 13054K/17620K, paused 29ms, total 29ms 
01-23 21:18:44.694: D/dalvikvm(5484): GC_CONCURRENT freed 1894K, 27% free 12970K/17620K, paused 4ms+5ms, total 56ms 
01-23 21:18:46.684: D/dalvikvm(5484): GC_CONCURRENT freed 1738K, 27% free 12996K/17620K, paused 4ms+2ms, total 53ms 
01-23 21:18:49.254: D/dalvikvm(5484): GC_CONCURRENT freed 1756K, 27% free 13014K/17620K, paused 2ms+8ms, total 77ms 
01-23 21:18:56.864: I/dalvikvm(5484): Jit: resizing JitTable from 8192 to 16384 
01-23 21:18:56.934: D/dalvikvm(5484): GC_CONCURRENT freed 1840K, 21% free 13010K/16312K, paused 2ms+4ms, total 49ms 
01-23 21:18:59.434: D/dalvikvm(5484): GC_CONCURRENT freed 1779K, 21% free 12995K/16312K, paused 4ms+5ms, total 50ms 
01-23 21:19:03.414: D/dalvikvm(5484): GC_CONCURRENT freed 1781K, 21% free 13007K/16312K, paused 2ms+3ms, total 48ms 

Heap không ngừng phát triển và ngày càng tăng và tôi không có ý tưởng những gì tôi có thể làm được. Tôi đã tìm kiếm thông qua web và thông qua stackoverflow, nhưng không có câu trả lời hữu ích cho tôi. Tôi hy vọng một người nào đó trong các bạn có thể tìm thấy lỗi. Tôi rất mới với Android, vì vậy hãy đánh giá cao.

EDIT1: Heap Dump:

Here you can see what causes the heap allocation.

EDIT2: Phân tích MAT

Nghi ngờ 1:

One instance of "maps.by.a" loaded by "dalvik.system.PathClassLoader @ 0x4480cfa8" occupies 1.002.352 (22,33%) bytes. The memory is accumulated in one instance of "maps.by.d" loaded by "dalvik.system.PathClassLoader @ 0x4480cfa8". 

Keywords 
maps.by.a 
dalvik.system.PathClassLoader @ 0x4480cfa8 
maps.by.d 

Nghi ngờ 2:

3.507 instances of "java.lang.Class", loaded by "<system class loader>" occupy 795.104 (17,72%) bytes. 

Biggest instances: 
•class com.ibm.icu4jni.util.Resources$DefaultTimeZones @ 0x401fccc8 - 151.744 (3,38%) bytes. 
•class android.text.Html$HtmlParser @ 0x4016d288 - 126.592 (2,82%) bytes. 
•class org.apache.harmony.security.fortress.Services @ 0x40091188 - 51.456 (1,15%) bytes. 


Keywords 
java.lang.Class 

Suspect 3:

8.168 instances of "java.lang.String", loaded by "<system class loader>" occupy 529.048 (11,79%) bytes. 

Keywords 
java.lang.String 
+0

Khi bạn kiểm tra kết xuất đống DDMS trong MAT, bạn đã tìm thấy gì khi đang chiếm bộ nhớ? – CommonsWare

+0

đã chỉnh sửa câu hỏi của tôi. –

+0

Um, trong khi đó là một bảng thú vị, điều này chỉ hữu ích cho bạn. Bạn có thể đọc [bài đăng trên blog dành cho nhà phát triển Android này về việc sử dụng MAT] (http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html) hoặc xem [Google I này | O 2011 trình bày về việc sử dụng MAT và các công cụ liên quan] (http://www.youtube.com/watch?v=_CruQY55HOk), để tìm hiểu thêm về cách tìm rò rỉ bộ nhớ với MAT. – CommonsWare

Trả lời

3

Đầu tiên, đống của bạn không "tiếp tục phát triển". Nó lơ lửng giữa 12893K và 13054K, tăng và giảm, với một đỉnh cao hơn ở mức 13925K. Cá nhân, tôi không thấy bất cứ điều gì trong nhật ký đó sẽ làm tôi lo lắng.

Về kết quả MAT của bạn, nếu đó là ba thủ phạm hàng đầu, thì không có gì đáng ngạc nhiên. Hai người sau nói "Tôi đang viết một ứng dụng cho Android", vì chúng luôn có trên bất kỳ ứng dụng Android nào. Cái đầu tiên chỉ ra rằng Maps V2 có một đối tượng khá mỏng manh. Một lần nữa, tôi thấy không có gì trong đầu ra đó sẽ đề xuất một vấn đề.

+0

Không có gì phải lo lắng? Tôi có nên bỏ qua những tăng trưởng heap này? –

+0

@MichaelEder: Heap của bạn sẽ tự nhiên phát triển khi ứng dụng của bạn được sử dụng, tối đa giới hạn trên mỗi bước của thiết bị. Nếu bạn hết heap, * sau đó * bạn có một vấn đề. Bây giờ bạn có thể lo lắng nếu bạn muốn, nhưng vì bạn là "người mới đến Android", bạn có thể có cá lớn hơn để chiên và nhiều kinh nghiệm hơn để đạt được trước khi bạn sẽ hiểu những gì và không phải là một rò rỉ bộ nhớ. Theo dõi rò rỉ bộ nhớ là việc kinh doanh phức tạp (tôi có cả một chương về MAT trong cuốn sách của mình) và không phải thứ gì đó mà mọi người thường lo lắng cho đến khi chúng gần gũi hơn với giới hạn đống. – CommonsWare

+0

Ok cảm ơn bạn! Tôi sẽ bỏ qua "rò rỉ" cho đến khi tôi có được nhiều kinh nghiệm hơn trong Android. –