Android Studio 控制台输出?

Ral*_*kum 4 performance android garbage-collection database-performance

当我在 Android Studio 上运行应用程序时,我读取了一些 GarbageCollection 输出:

05-11 16:18:20.973 12173-12183/com.example.myapp I/art: 后台部分并发标记清除 GC 释放 240546(10MB) AllocSpace 对象, 1(20KB) LOS 对象, 40% 空闲, 46MB/77MB,暂停 1.599ms 总计 121.211ms
05-11 16:18:54.304 12173-12183/com.example.myapp I/art:后台粘性并发标记清除GC释放419692(18MB)AllocSpace对象,0(0B)LOS对象,24%免费,58MB / 77MB,暂停 3.022ms 总计 201.084ms
05-11 16:19:15.368 12173-12183/com.example.myapp I/art:后台粘性并发标记清除GC释放252567(11MB)AllocSpace对象,0(0B)LOS对象,14%免费,65MB / 77MB,暂停 1.955ms 总计 160.700ms
05-11 16:19:28.274 12173-12183/com.example.myapp I/art: 后台部分并发标记清除 GC 释放 554566(28MB) AllocSpace 对象,0(0B) LOS 对象,39% 空闲,48MB/80MB,暂停 1.916ms 总计 200.094ms

这是什么意思?(我正在阅读包含超过 70k 行的大型 csv 文件)

Rya*_*yan 5

从ART开始,Android有2种分配空间:非大对象空间(堆)和大对象空间(LOS)。非大对象空间主要用于普通大小的对象。大对象空间主要用于大对象(例如位图)。

05-11 16:18:20.973 12173-12183

com.example.myapp I/art: Background partial concurrent mark sweep GC freed 240546(10MB) 
Run Code Online (Sandbox Code Playgroud)

垃圾收集器已释放 240,546 个对象,从非大对象空间回收了 10 MB。

AllocSpace objects, 1(20KB) LOS objects, 40% free, 46MB/77MB, paused 1.599ms total 121.211ms 05-11 16:18:54.304 12173-12183 
Run Code Online (Sandbox Code Playgroud)

垃圾收集器已释放 1 个对象,从大对象空间回收 20 KB。

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

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