知道了内存泄漏的种种原因后,我们想知道程序是否发生了内存泄露,并定位到内存泄露的具体位置应该怎么做呢?
1.查看GC日志判断是否发生内存泄露
程序每进行一次GC操作,Logcat中就会输出一次GC日志。日志格式如下:
<GC_name>: <GC_Reason> <Amount_freed>, <Heap_stats>, <Pause_time>
- GC_name :运行环境,android4.4之前程序运行在dalvik虚拟机上,GC_name就为
D/dalvik
;android4.4之后加入了art运行环境,GC_name就我I/art
. - GC_Reason : 出发GC操作的原因。
- Amount_freed :系统通过这次GC释放的内存
- Heap_stats : 当前内存的空闲比例以及使用情况(活动对象所占内存 / 当前程序总内存)
- Pause_time : GC操作导致应用程序暂停的时间。
鉴于运行环境的不同,android4.4之前使用dalvik运行环境时一次GC日志如下:
android4.4后art运行环境发生一次GC时日志如下: