09-28 17:16:37.543: DEBUG/dalvikvm(21466): GC_EXTERNAL_ALLOC freed 390 objects / 45656 bytes in 50ms

09-28 17:16:40.513: DEBUG/dalvikvm(3267): GC_EXPLICIT freed 4501 objects / 251624 bytes in 67ms

很多做开发的朋友不明白上面这句是什么意思,给大家解释一下!

前面Free的内存是VM中java使用的内存,external是指VM中通过JNI中Native的类中的malloc分配出的内存,例如Bitmap和一些Cursor都是这么分配的。

在Davilk中,给一个程序分配的内存根据机型厂商的不同,而不同,现在的大部分的是32M了,而在VM内部会把这些内存分成java使用的内存和 Native使用的内存,它们之间是不能共享的,就是说当你的Native内存用完了,现在Java又有空闲的内存,这时Native会重新像VM申请,而不是直接使用java的。

例如上边的例子

free 3411K/6663K和external 24870K/26260K

如果这时需要创建一个2M的

Bitmap

,Native现有内存26260-24870=1390K<2048k,因此他就会向Vm申请内存,虽然java空闲的内存是

6663-3411=3252>2048,但这部分内存Native是不能使用。

但是你现在去申请2M的Native内存,VM会告诉你无法分配的,因为现在已使用的内存已经接近峰值了32M(26260+6663=32923 ),所以现在就会成force close 报OOM。

所以现在我们要检查我们的native内存的使用情况来避免OOM。

java native内存_android java内存与native内存相关推荐

  1. java 字节乱码_Android/Java 字节读取出现乱码问题

    用字节流读包含中文的文件出现乱码是不可避免的,简单的想想:单第一个字为英文,第二个子为中文,而一个英文占1一个字节,一个中文占两个字节,当你用两个字节的的数组读取,中文字就会被拆分,这样就肯定会出现乱 ...

  2. android平台java编程规范_Android Java类编写规范+优化建议

    本文仅是我个人在实际开发中习惯的编写方式,当然这种方式也是来自很多官方的推荐,所以在一定程度上是可以被模仿套用的.本文将不定期更新~ 零.指导原则 优先保证可读性,不要过分追求代码艺术和效率 在可读性 ...

  3. android java服务端_Android/Java从服务器端下载图片

    /** * 思想: 1.直接将所有数据安装字节数组发送 2.对象序列化方式 *//** * thread方式 * * @author Administrator */public class Test ...

  4. java mp4分割_Android(java方法)上实现mp4的分割和拼接 (二)

    这节谈一下如何在android上实现mp4文件的高效率切割. 业务需求举例:把一段2分钟的mp4文件切割出00:42 至 01:16这段时间的视频,要求足够短的执行时间和尽量少的误差. 分析:mp4P ...

  5. java android 服务器_Android/Java从服务器端下载图片

    /** * 思想: 1.直接将所有数据安装字节数组发送 2.对象序列化方式 *//** * thread方式 * * @author Administrator */public class Test ...

  6. java设置native内存大小_如何定位native内存泄露问题?

    运行一段时间后,程序出现异常:部分操作无法进行.异常日志如下: java.lang.OutOfMemoryError: unable to create new native thread at ja ...

  7. java 通信层_Android native进程间通信实例-binder篇之——HAL层访问JAVA层的服务

    有一天在群里聊天的时候,有人提出一个问题,怎样才能做到HAL层访问JAVA层的接口?刚好我不会,所以做了一点研究. 之前的文章末尾部分说过了service call 可以用来调试系统的binder服务 ...

  8. java内存 海子_Android 面试经验 - Java 内存模型 - Java 技术驿站-Java 技术驿站

    Java内存模型 目录 Java执行流程 Java文件被编译成字节码文件之后,由JVM中的类加载器进行加载,加载完毕之后,交由JVM的执行引擎执行.在程序执行的过程中,JVM会用一段空间来存储数据和相 ...

  9. 深入理解Java虚拟机——第二章——Java内存区域与内存溢出异常

    运行时数据区域 Java虚拟机运行时数据区域 程序计数器 程序计数器可以看做是当前线程所执行的字节码的行号指示器.字节码解释器工作时就是通过改变这个计数器的值来选取下一条所需要执行的字节码指令,分支. ...

最新文章

  1. linux open()调用的注意事项
  2. ACM入门之【KMP】
  3. RE|GoF23种设计模式-动态代理
  4. Apache+jboss群集部署
  5. 微信开发接口调用(前端+.net服务端)
  6. AD软件之模块化原理图
  7. linux内核那些事之ZONE
  8. linux释放cache
  9. 拓步机器人联网说明书_科沃斯IPO聚焦三大战略 谋划转型互联网生态企业
  10. 三个月可更改用户昵称两次
  11. 【数据科学】kNN算法笔记
  12. thuwc9102划水记
  13. excel公式和函数
  14. 莫烦 Matplotlib
  15. 2022年计算机保研记录(计算所、浙大、华科、东南、北航)
  16. dist文件夹、src文件夹、dest文件夹是什么意思?
  17. mysql错误1786_mysql错误处理之ERROR 1786 (HY000)
  18. 网上传的京东撸货为什么那么火?
  19. 使用腾讯云Ubuntu20.04搭建代理服务器
  20. 制作一个简单HTML抗疫逆行者网页作业(HTML+CSS)

热门文章

  1. php7和7.1,PHP7.0和7.1 部分新增特性备忘代码分享
  2. nedc和epa续航里程什么意思_为何特斯拉的锂电池行驶里程至今仍无人超越?
  3. (传送门) Ubuntu随身系统
  4. 为什么一些人喜欢在java代码中能加final的变量都加上final
  5. elasticsearch _field_stats 源码分析
  6. C++调用父类的构造函数规则
  7. pyhton url参数和字典互转
  8. 拼接字符串时去掉最后一个多余逗号
  9. oc35--自定义构造方法
  10. js 判断手机横竖屏的实现方法(不依赖任何其他库)