2013-01-23 20 views
5

私は野生を私に押しつけている問題があります。私は私のコードでGoogleマップAPI V2を使用して、私はマップを移動していたとき、私は(ネクサス7上)以下のLogcat出力を見ることができます: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 

ヒープが成長し、成長し続け、私は何を私は考えていますそれについて行うことができます。私はウェブを介して検索し、stackoverflowを介して、しかし私のために役立つ答えはありませんでした。 あなたの誰かがエラーを見つけられることを願っています。私はAndroidにはとても新しいので、感謝してください。

EDIT1:ヒープダンプ:

Here you can see what causes the heap allocation.

EDIT2:MAT分析

疑い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 

疑い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 

容疑者3:

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

Keywords 
java.lang.String 
+0

MATでDDMSヒープダンプを調べたところ、メモリを占有していたのは何でしたか? – CommonsWare

+0

私の質問を編集しました。 –

+0

ええ、それは面白い表ですが、それはほんのわずかです。 [このAndroid Developers BlogのMATの使用についての記事(http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html)を読むか、[このGoogle I | MATでのメモリリークの検出方法の詳細については、MATと関連ツールの使用に関するO 2011プレゼンテーション(http://www.youtube.com/watch?v=_CruQY55HOk)を参照してください。 – CommonsWare

答えて

3

まず、ヒープは「成長し続ける」ことはありません。それは12923Kと13054Kの間をホバリングしています。個人的に、私はそのログに私を心配する何も見ません。

MAT出力に関して、それらが3つのトップの犯人である場合、驚くことはありません。後者の2つは、「Android用アプリを書いています」と言っています。なぜなら、それらは常にAndroidアプリにあります。最初の1つは、地図V2にはむしろ厄介なオブジェクトが1つあることを示しています。繰り返しますが、問題を示唆する出力は何も表示されません。

+0

何も心配する必要はありませんか?これらのヒープの成長を無視する必要がありますか? –

+0

@MichaelEder:あなたのヒープは、あなたのアプリケーションが使用されるにつれて、デバイスのプロセスごとのヒープ限界まで自然に成長します。あなたがヒープを使い果たしてしまった場合は、問題が発生します。あなたが望むなら今は心配することは大歓迎ですが、あなたは「Androidには新しい」ので、メモリリークの有無を理解する前に、はるかに大きな魚を釣ることができます。メモリリークを追跡するのは手間がかかります(私は自分の本の中でMATについて完全な章を持っています)。ヒープリミットに近づくまで一般的に心配するものではありません。 – CommonsWare

+0

ありがとうございました!私はAndroidでより多くの経験を得るまで "リーク"を無視します。 –

関連する問題