当我在Android Studio上运行我的应用程序时,我读了一些GarbageCollection输出:
05-11 16:18:20.973 12173-12183/com.example.myapp I/art: Background partial concurrent mark sweep GC freed 240546(10MB) AllocSpace objects, 1(20KB) LOS objects, 40% free, 46MB/77MB, paused 1.599ms total 121.211ms 05-11 16:18:54.304 12173-12183/com.example.myapp I/art: Background sticky concurrent mark sweep GC freed 419692(18MB) AllocSpace objects, 0(0B) LOS objects, 24% free, 58MB/77MB, paused 3.022ms total 201.084ms 05-11 16:19:15.368 12173-12183/com.example.myapp I/art: Background sticky concurrent mark sweep GC freed 252567(11MB) AllocSpace objects, 0(0B) LOS objects, 14% free, 65MB/77MB, paused 1.955ms total 160.700ms 05-11 16:19:28.274 12173-12183/com.example.myapp I/art: Background partial concurrent mark sweep GC freed 554566(28MB) AllocSpace objects, 0(0B) LOS objects, 39% free, 48MB/80MB, paused 1.916ms total 200.094ms
这是什么意思? (我正在阅读其中包含超过70k行的大型csv文件)
答案 0 :(得分:2)
从ART开始,Android有2个分配空间:非大对象空间(Heap)和大对象空间(LOS)。非大对象空间主要用于普通大小的对象。大对象空间主要用于大对象(想想位图)。
05-11 16:18:20.973 12173-12183
com.example.myapp I/art: Background partial concurrent mark sweep GC freed 240546(10MB)
垃圾收集器已释放240,546个对象,从非大对象空间回收10兆字节。
AllocSpace objects, 1(20KB) LOS objects, 40% free, 46MB/77MB, paused 1.599ms total 121.211ms 05-11 16:18:54.304 12173-12183
垃圾收集器释放了1个对象,从大对象空间中回收20千字节。
如果不阅读读取CSV文件的类或方法,就很难对垃圾收集器为何以日志显示的方式作出反应进行有根据的猜测。但是只看日志中的趋势,看起来垃圾收集器从非大对象空间释放大量对象,而在大对象空间中几乎没有任何东西。
参考文献: http://developer.android.com/tools/debugging/debugging-memory.html#LogMessages