`
44289533
  • 浏览: 68345 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Android内存溢出整理总结

 
阅读更多
在最近做的工程中发现加载的图片太多或图片过大时经常出现OOM问题,找网上资料也提供了很多方法,但自己感觉有点乱,故我整理下:
一般我们大家在遇到内存问题的时候常用的方式网上也有相关资料,大体如下几种:
一:在内存引用上做些处理,常用的有软引用、强化引用、弱引用
二:在内存中加载图片时直接在内存中做处理,如:边界压缩
三:动态回收内存
四:优化Dalvik虚拟机的堆内存分配
五:自定义堆内存大小
可是真的有这么简单吗,就用以上方式就能解决OOM了?不是的,继续来看…
1:软引用(SoftReference)、虚引用(PhantomRefrence)、弱引用(WeakReference),这三个类是对heap中java对象的应用,通过这个三个类可以和gc做简单的交互,除了这三个以外还有一个是最常用的强引用
1.1:强引用,例如下面代码:
Object o=new Object();
Object o1=o;
上面代码中第一句是在heap堆中创建新的Object对象通过o引用这个对象,第二句是通过o建立o1到new Object()这个heap堆中的对象的引用,这两个引用都是强引用.只要存在对heap中对象的引用,gc就不会收集该对象.如果通过如下代码:
o=null;
o1=null
heap中对象有强可及对象、软可及对象、弱可及对象、虚可及对象和不可到达对象。应用的强弱顺序是强、软、弱、和虚。对于对象是属于哪种可及的对象,由他的最强的引用决定。如下:
String abc=new String(“abc”);  //1
SoftReference abcSoftRef=new SoftReference(abc);  //2
WeakReference abcWeakRef = new WeakReference(abc); //3
abc=null; //4
abcSoftRef.clear();//5
上面的代码中:
第一行在heap对中创建内容为“abc”的对象,并建立abc到该对象的强引用,该对象是强可及的。第二行和第三行分别建立对heap中对象的软引用和弱引用,此时heap中的对象仍是强可及的。第四行之后heap中对象不再是强可及的,变成软可及的。同样第五行执行之后变成弱可及的。
1.2:软引用
软引用是主要用于内存敏感的高速缓存。在jvm报告内存不足之前会清除所有的软引用,这样以来gc就有可能收集软可及的对象,可能解决内存吃紧问题,避免内存溢出。什么时候会被收集取决于gc的算法和gc运行时可用内存的大小。当gc决定要收集软引用是执行以下过程,以上面的abcSoftRef为例:
1 首先将abcSoftRef的referent设置为null,不再引用heap中的new String(“abc”)对象。
2 将heap中的new String(“abc”)对象设置为可结束的(finalizable)。
3 当heap中的new String(“abc”)对象的finalize()方法被运行而且该对象占用的内存被释放, abcSoftRef被添加到它的ReferenceQueue中。
注:对ReferenceQueue软引用和弱引用可以有可无,但是虚引用必须有,参见:
Reference(T paramT, ReferenceQueue
分享到:
评论

相关推荐

    android 扫描文件栈溢出问题,自己写的扫描文件方法

    在Android开发中,文件扫描是常见的操作,例如为了查找特定类型的文件或整理本地存储的数据。然而,如果处理不当,可能会导致内存栈溢出问题。本文将深入探讨Android平台下的文件扫描,以及如何避免栈溢出错误。 ...

    android网络编程面试题,Android面试题整理

    * 内存溢出的定义:程序在申请内存时没有足够的内存空间供其使用。 * 查找内存泄漏的方法: + 使用 AS 自带的内存分析界面,查看内存使用情况。 + 使用第三方工具,如 LeakCanary。 * 内存泄漏的解决方法: + ...

    Android小知识整理

    15. **内存优化**:监控和分析内存泄漏,合理使用软引用和弱引用,避免内存溢出。 16. **动画和过渡效果**:了解属性动画和视图动画,创建流畅的用户体验。 17. **Gradle构建系统**:熟悉Gradle的依赖管理和构建...

    Android的小知识整理

    12. **内存管理**:理解Java内存模型,学习如何避免内存泄漏和内存溢出,使用内存分析工具如MAT进行内存分析。 13. **UI动画**:学习如何使用属性动画、帧动画和视图动画,提升用户体验。 14. **多线程与并发**:...

    android 面试题 安卓巴士总结.rar

    这份"android 面试题 安卓巴士总结.rar"资源包含了丰富的面试准备材料,主要针对Android开发者在求职时可能遇到的问题进行了整理和归纳。以下是一些关键的Android知识点概览: 1. **Android体系结构**:了解Android...

    Android开发 微博demo(个人整理11)

    5. **图片加载与缓存**:微博中常包含大量图片,因此需要图片加载库,如`Glide`或`Picasso`,它们可以高效地加载和缓存图片,同时支持图片的压缩和处理,避免内存溢出。 6. **多媒体处理**:微博可能包含文字、图片...

    android 面试题 安卓巴士总结.pdf.zip

    6. **内存管理**:理解引用类型(强引用、软引用、弱引用、虚引用),避免内存泄漏和内存溢出,使用内存分析工具进行性能优化。 7. **性能优化**:包括视图优化(减少层级,使用FlatViewGroup)、绘制优化(避免...

    Android开发(个人整理04)仿安卓美团界面

    这时,我们可以使用像Glide或Picasso这样的图片加载库,它们能够高效地处理图片的加载、缓存和显示,避免内存溢出。 6. **自定义View**:为了达到更贴近原生美团应用的效果,可能需要对某些标准的Android控件进行...

    android图片处理集合demo

    Android原生的Bitmap API在处理大量或大尺寸图片时效率较低,可能导致内存溢出。因此,通常会使用第三方图片加载库,如Glide、Picasso、Fresco等。这些库提供了缓存、内存管理以及网络加载等功能,优化了图片显示的...

    Android批量导入联系人到手机通讯录

    总结来说,要实现“Android批量导入联系人到手机通讯录”,我们需要理解线程池的工作原理,学会使用`ContentResolver`操作联系人数据,并确保在处理大量数据时避免内存溢出。结合提供的文件结构,我们可以构建一个...

    Android High Performance Programming

    8. 内存管理:深入理解Android的内存模型和垃圾回收机制,学习如何进行内存监控和分析,以及如何处理内存不足和溢出的问题。 9. 网络优化:优化网络请求和响应处理,包括使用缓存机制减少数据传输,使用线程优化...

    整理出15个Android很有用的代码片段(技巧)

    当处理大量图片时,可以使用如Glide或Picasso这样的库来实现图片的延迟加载,防止内存溢出。 14. **保存和恢复状态**: 当Activity被销毁并重新创建时(例如屏幕旋转),可以使用`onSaveInstanceState`和`...

    Android开发规范

    1. Bitmap的使用:正确处理Bitmap资源,避免内存溢出和图片加载延迟。 2. Dialog的使用:合理使用Dialog,避免因错误使用导致的UI阻塞和内存泄漏。 3. Bitmap和Dialog的优化:针对Bitmap和Dialog的具体使用情况,...

    Android通用流行框架大全【整理】

    - **Fresco**:Facebook开发的图片管理库,采用了一种更先进的内存管理机制,能够防止内存溢出并优化图片加载。 - **Glide**:Google推荐的图片加载库,特别适合于处理大量的图片加载,支持多种资源格式和高效的...

    Android整理好的图片压缩工具类

    【Android图片压缩】在Android开发中,由于设备内存有限,特别是在处理大图片时,需要进行图片压缩以防止出现内存溢出(Out Of Memory,简称OOM)的问题。Android提供了多种图片压缩策略,包括使用系统自带的缩略图...

    Android UI控件之Gallery实现拖动式图片浏览效果

    我们知道现在智能手机上都有这样一种...不过需要说明的是:图片不宜过大,否则容易内存溢出,android对大图片的支持不好! 我们来看看切换之后的效果吧 看看重新设置一幅背景图片! 怎么样一个简单的效果就出来了吧!

    HCNA-HNTD V2.1入门培训教材.pdf

    第五章通过调优案例分析与实战,向读者展示了如何处理大内存硬件上的程序部署策略、集群间同步导致的内存溢出、堆外内存导致的溢出错误、外部命令导致系统缓慢、服务器虚拟机进程崩溃等问题。书中还讨论了不恰当数据...

    Android集成环信

    4. 内存管理:如果图片过大,可能导致内存溢出,需要对图片进行适当的压缩处理。 视频上传问题可能涉及以下几个方面: 1. 文件选择器:确保用户可以正确选择视频文件,通常会使用Intent或者自定义的文件选择器。 2...

Global site tag (gtag.js) - Google Analytics