android关于内存溢出的异常
来源:互联网 发布:什么软件借钱最快 编辑:程序博客网 时间:2024/06/06 10:50
我在程序中,用GridView 加载网络上的图片时,出现如下异常:
164200-byte external allocation too large for this process.
VM won't let us allocate 164200 bytes
Google后得到信息是 Android的Dalvik VM为一个应用提供了大约16MB的内存,一般我们处理超过8MB的图片将会出现OutOfMemoryError异常(内存溢出异常)
想不明白的是:
1 、处理超过8MB的图片 指的是单张的图片大于8M,还是整个应用中所有图片加起来大于8M
2、按上面的异常中为什么164200 bytes 时就出现了这个异常? 164200 bytes 算下来不过才不到0.2M
继续查,在网上看到了这篇文章 :Android Bitmap内存限制
其中有这么一段话,能够解释上述两个疑问。 “为了确保我们外部分配内存成功,我们应该保证当前已分配的内存加上当前需要分配的内存值,大小不能超过当前堆的最大内存值,而且内存管理上将外部内存完全当成了当前堆的一部分 ”
虚拟机为堆分配的默认大小为16M, 我的程序 在申请0.2M空间出现了OOM提示,是否是“当前已分配的内存”已大于16-0.2M;
按此种说法,问题1自然也就不存在了,不管图像的大小有多大,只要能保证“当前已分配的内存加上当前需要分配的内存值” 不大于16M即可。
上文的作者还写了一篇文章,解决加载图像时的OOM异常:Android中解决图像解码导致的OOM问题
8M图片的思想来源
android程序内存一般限制在16M,当然也有24M的,而android程序内存被分为2部分:native和dalvik,dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是 native+dalvik 不能超过最大限制 ,而且它们之间不能共享,也就是说,native内存用完了,也不能使用dalvik的内存
如果说“超过8MB的图片将会出现OutOfMemoryError异常”,那是不是可以理解为 native 和 dalvik 平分了16M?
- android关于内存溢出的异常
- 关于Android内存溢出
- 关于一些异常内存溢出的问题分析
- JVM的内存溢出异常
- jvm的内存溢出异常
- JVM的内存溢出异常
- jvm的内存溢出异常
- jvm的内存溢出异常
- Java_JVM的内存溢出异常
- 关于Android中的内存溢出和内存泄漏的问题
- 关于collector服务内存溢出异常问题
- 关于Android Application 内存溢出问题的总结
- Android关于Bitmap内存溢出的一点想法
- Android 中关于activity引起的内存溢出
- 关于 android oom(内存溢出的分析)
- 关于图片的内存溢出
- 关于内存溢出的问题
- 内存异常系列之Android解决加载大图片时内存溢出的问题
- C语言程序设计排序问题 ~~求解
- 查看CPU使用率 top命令详解
- androidHandler讲解
- 2011android面试题目及其答案大全
- HTTP
- android关于内存溢出的异常
- 快速确定linux下某个命令所在包
- 数据结构代码-简单链表
- magento 全页缓存
- web.xml深入了解——各种标签
- 宅男程序员给老婆的计算机课程
- 解决VS断点无效,源代码与原始版本不同的问题
- java.lang.AbstractMethodError: gnu.xml.dom.DomElement.getTextContent()Ljava/lang/String;
- What is a TCP window update?