Grow heap (frag case) 堆内存过大的深入解析

所属分类: 软件编程 / Android 阅读数: 139
收藏 0 赞 0 分享

对于Android开发者来说虽然使用了可以自动管理内存的Java语言,但是对于内存管理不当,可能你的应用不断出现类似INFO/dalvikvm-heap(10798): Grow heap (frag case) to 6.437MB for 1114126-byte allocation,而出现的
Grow heap 后面的值不断增加,接下来轻微则Android系统开始结束后台任务来增加不断增加的堆内存问题,最后可能直接出现OOM,同时有时候GC还可能出现GC freed 0 objects / 0 bytes in 75ms这样的问题,对于Java的内存管理我们近期已经说到了,就上面这些问题Android123给大家做一个简单的分析。

1. 这里Grow heap (frag case) to 6.437MB for 1114126-byte allocation表示你一直在分配一个较大的对象,占用的堆内存达到了6.4MB。

2. 为什么会出现这样的问题,经过询问表示是因为分配了一个byte[]数组,需要以Blob方式写入SQLite数据库,而造成的这么大的单个对象出现,这里Android开发网提醒大家,这是很危险的操作,对于不同固件和低RAM配置的设备随时都有OOM的危险,如果你真的需要往SQLite存储二进制,这里可以采用分段的方式,将某个对象拆分为1MB或更小,分更多的段来存放,中间加一层拆分数据缓存层来解决比较好。

3. 同时每次构造单个较大对象前,可以通知gc准备收集,比如在执行需要耗操作前执行System.gc(); 防止OutOfMemoryError的发生,对于Java的内存溢出问题,今后我们会通过各种案例来讲解。

 

更多精彩内容其他人还在看

Android实现信号强度监听的方法

这篇文章主要介绍了Android实现信号强度监听的方法,是Android手机中很常见的一个实用功能,需要的朋友可以参考下
收藏 0 赞 0 分享

Android实现Activity界面切换添加动画特效的方法

这篇文章主要介绍了Android实现Activity界面切换添加动画特效的方法,非常实用的技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中Dialog去黑边的方法

这篇文章主要介绍了Android中Dialog去黑边的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Qt for Android开发实例教程

这篇文章主要介绍了Qt for Android开发的方法,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之时间日期操作实例

这篇文章主要介绍了Android开发之时间日期操作,是Android程序开发中常见的一个功能,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之时间日期组件用法实例

这篇文章主要介绍了Android开发之时间日期组件用法,主要介绍了TimePicker和DatePicker组件,对于Android程序开发有不错的借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之获取网络链接状态

这篇文章主要介绍了Android获取网络链接状态的方法,主要是通过ConnectivityManager类来完成的,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之广播机制浅析

这篇文章主要介绍了Android开发之广播机制浅析,主要包括了发布、接收及配置广播的实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之登录验证实例教程

这篇文章主要介绍了Android开发之登录验证实现方法,包括发送数据、服务器端验证、配置文件等,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发之注册登录方法示例

这篇文章主要介绍了Android开发的注册登录方法,是针对Android程序设计中版本兼容性的进一步完善,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多