Android Studio 控制台输出?

Android Studio console output?

当我 运行 我在 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 文件)

从 ART 开始,Android 有 2 个分配 space:非大对象 space(堆)和大对象 Space(LOS)。非大对象 space 主要用于普通大小的对象。大对象 space 主要用于大对象(想想位图)。

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 MB space。

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 个对象,从大对象 space.

回收 20 KB

如果不阅读 class 或读取 CSV 文件的方法,就很难对垃圾收集器为何以日志显示的方式做出反应做出有根据的猜测。但是只要看看日志中的趋势,垃圾收集器似乎正在从非大对象 space 中释放大量对象,而在大对象 space 中几乎没有分配任何对象。

参考资料: http://developer.android.com/tools/debugging/debugging-memory.html#LogMessages