有人能理解这个吗?它刚刚执行了两个垃圾收集,并且有16MB空闲。那么为什么它没有分配8MB呢?
09-06 19:08:36.335: V/MediaPlayerService(5439): [102] isPlaying: 0
09-06 19:08:36.421: D/dalvikvm(17483): GC_FOR_MALLOC freed 13K, 39% free 16709K/27079K, external 2357K/2773K, paused 139ms
09-06 19:08:36.421: I/dalvikvm-heap(17483): Forcing collection of SoftReferences for 8520570-byte allocation
09-06 19:08:36.522: D/dalvikvm(17483): GC_FOR_MALLOC freed <1K, 39% free 16708K/27079K, external 2357K/2773K, paused 95ms
09-06 19:08:36.522: E/dalvikvm-heap(17483): Out of memory on a 8520570-byte allocation.
09-06 19:08:36.522: I/dalvikvm(17483): "Thread-19" prio=5 tid=12 RUNNABLE
09-06 19:08:36.522: I/dalvikvm(17483): | group="main" sCount=0 dsCount=0 obj=0x411da000 self=0x3863e8
09-06 19:08:36.522: I/dalvikvm(17483): | sysTid=17496 nice=0 sched=0/0 cgrp=default handle=3695904
09-06 19:08:36.522: I/dalvikvm(17483): | schedstat=( 8278991686 2222930914 7642 )
09-06 19:08:36.522: I/dalvikvm(17483): at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:~91)
09-06 19:08:36.522: I/dalvikvm(17483): at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:216)
09-06 19:08:36.522: I/dalvikvm(17483): at org.jsoup.helper.DataUtil.readToByteBuffer(DataUtil.java:114)
09-06 19:08:36.522: I/dalvikvm(17483): at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:437)
09-06 19:08:36.522: I/dalvikvm(17483): at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:391)
09-06 19:08:36.522: I/dalvikvm(17483): at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:157)
09-06 19:08:36.522: I/dalvikvm(17483): at org.jsoup.helper.HttpConnection.get(HttpConnection.java:146)
答案 0 :(得分:3)
我认为第二个日志行可能让您感到困惑。措辞有点误导,但我很确定它说只有大约10兆自由:16709K / 27079K约为61.7%,所以16709K可能是使用的内存量,而不是免费的。
但是10 megs仍然大于要求的8 megs。问题可能是您的应用程序已运行足够长的时间以显着的内存碎片。也就是说,很可能总共有10兆自由,但它全部(或至少足够)分散在其他主动使用的内存中,这样就没有连续的内容可以提供给你的应用程序。