如果你想写一个 Java 程序,观察某对象什么时候会被垃圾收集的执行绪清除,你必须要用一个 reference 记住此对象,以便随时观察,但是却因此造成此对象的 reference 数目一直无法为零, 使得对象无法被清除。
1 |
java.lang.ref.WeakReference |
不过,现在有了 Weak Reference 之后,这就可以迎刃而解了。如果你希望能随时取得某对象的信息,但又不想影响此对象的垃圾收集,那么你应该用 Weak Reference 来记住此对象,而不是用一般的 reference。
03 |
WeakReference wr = new WeakReference(obj);
|
11 |
System.out.println( "obj 已经被清除了 " );
|
13 |
System.out.println( "obj 尚未被清除,其信息是 " +obj.toString());
|
在此例中,透过 get() 可以取得此 Reference 的所指到的对象,如果传出值为 null 的话,代表此对象已经被清除。
这类的技巧,在设计 Optimizer 或 Debugger 这类的程序时常会用到,因为这类程序需要取得某对象的信息,但是不可以 影响此对象的垃圾收集。
java.lang.ref.SoftReference
Soft Reference 虽然和 Weak Reference 很类似,但是用途却不同。 被 Soft Reference 指到的对象,即使没有任何 Direct Reference,也不会被清除。一直要到 JVM 内存不足时且 没有 Direct Reference 时才会清除,SoftReference 是用来设计 object-cache 之用的。如此一来 SoftReference 不但可以把对象 cache 起来,也不会造成内存不足的错误 (OutOfMemoryError)。我觉得 Soft Reference 也适合拿来实作 pooling 的技巧。
03 |
SoftRefenrence sr = new SoftReference(obj);
|
15 |
sr = new SoftReference(obj);
|
文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/20090502/166222.html
分享到:
相关推荐
本篇文章将深入探讨Android内存管理的两个核心概念:堆(Heap)和栈(Stack),以及如何理解和解决Android内存溢出问题。 1. 堆与栈 堆和栈是Java虚拟机(JVM)中的两种主要内存区域,它们各自具有特定的用途和...
同时,遵循最佳实践,如使用Parcelable而非Serializable进行数据序列化,以及及时关闭Cursor、数据库连接和网络连接等,都有助于优化内存使用。 性能调优还包括避免一次性加载过多数据,使用列表视图(ListView)和...
MAT能够帮助开发者深入理解内存分配情况,检测内存泄漏和不必要的对象引用,从而有效地优化内存使用,防止OOM的发生。 1. **MAT的使用** - **下载与安装**:MAT通常以Eclipse插件的形式存在,开发者可以在Eclipse ...
在Java中,内存分为堆(Heap)和栈(Stack)两部分。堆是存储对象实例的地方,而栈则存储方法调用时的局部变量。Java虚拟机(JVM)有自动垃圾回收机制(Garbage Collection, GC),用于回收不再使用的对象所占用的...
在安卓开发中,内存管理...通过理解和应用以上策略,开发者可以在源码层面优化内存管理,有效防止Android应用出现内存溢出,提升应用的稳定性和性能。深入研究Android源码,了解其内存管理机制,对开发者来说至关重要。
5. **使用WeakReference和SoftReference**:这两类引用可以帮助我们创建一种“弱连接”,让对象在不再被其他强引用时能够被GC回收。在处理大对象或者需要延迟回收的场景下,可以考虑使用。 6. **避免内存抖动**:...
在这个"clean memory"案例中,我们主要关注如何有效地管理和清理Android设备的内存。 首先,我们需要理解Android内存的类型。Android系统主要有两种内存:堆内存(Heap Memory)和 Dalvik/ART 运行时内存。堆内存...
3. **使用弱引用和软引用**: WeakReference和SoftReference是Java提供的两种特殊引用类型,它们不会阻止GC回收对象。弱引用在GC运行时会立即清除,而软引用则在系统内存紧张时才会被回收。合理使用这两种引用,可以...
在Android应用开发中,内存管理是至关重要的一个环节,尤其是对于大型、复杂的应用,内存泄露可能导致应用程序性能下降,甚至导致应用无响应(ANR)或崩溃。本文将深入探讨Android App中的内存泄露问题,以及如何...
- 使用WeakReference或SoftReference处理大对象,避免内存泄漏。 - 在适当的时候释放资源,如关闭数据库连接、释放网络连接等。 9. **版本兼容性**: - 使用Support Library或AndroidX库,确保代码兼容不同版本...
当需要清理缓存时,只需要清空这两个映射即可,因为软引用和弱引用的对象会在垃圾收集时自动被回收。 总的来说,软引用和弱引用是Android开发者处理内存问题的有效工具。它们可以帮助我们实现智能的缓存策略,平衡...
6. **使用SoftReference或WeakReference**:使用这两种引用类型可以降低Bitmap的内存保留优先级,使系统在内存紧张时更容易回收Bitmap。 7. **监控内存使用**:利用Android的`ActivityManager`或第三方工具如MAT...
- ** Glide**:一个强大的图片加载库,支持从网络、文件系统或资源中加载图片,并进行高效的内存和磁盘缓存。源码中可能使用Glide进行图片的懒加载和尺寸适配,减少内存消耗,提高性能。 - **Picasso**:另一种...
- **内存优化**:讲述避免内存泄漏的方法,如使用WeakReference和SoftReference,以及如何使用内存分析工具进行调试。 - **绘制优化**:解释如何减少过度绘制,以及如何使用 Choreographer 和 ViewTreeObserver 来...
在Android开发中,图片下载和内存管理是两个关键的环节,尤其对于性能优化和避免内存溢出(Out of Memory, OOM)问题至关重要。本文将深入探讨这些知识点,并结合源码学习来提升Android应用的效率。 一、图片下载 ...
在安卓开发中,图片加载和内存管理是两个关键的领域,尤其对于防止应用程序出现内存溢出(Out Of Memory,简称OOM)至关重要。Android系统运行在有限的内存资源中,因此,开发者需要谨慎处理图片资源,避免过度消耗...
在这个压缩包中,我们有两个主要的文件:项目说明.rar和BitmapFun。 项目说明.rar可能包含了对整个项目背景、目标以及Bitmap功能实现的具体细节的描述。它可能会涵盖如何在Android应用中加载、显示、操作和优化...
1. **Android开发环境**:这个项目是用Java或Kotlin语言编写的,这是Android应用开发的两种主要语言。开发者可能使用了Android Studio作为集成开发环境(IDE),它提供了丰富的工具和功能来编写、调试和构建Android...
- 使用SoftReference或WeakReference保存Bitmap,防止内存泄漏。 - 使用LruCache或其他内存缓存机制,复用Bitmap对象。 在提供的"ImageView转Bitmap"这个Demo中,可能涉及了从ImageView获取Bitmap的方法。通常,...
"Android异步加载图像小结(含线程池,缓存方法)"这个文档详细讲解了如何在Android环境中高效、异步地加载图片,同时利用线程池和缓存策略优化性能。以下是对这些知识点的详细说明: 1. **异步加载**: - 异步...