`
xlover
  • 浏览: 244514 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java内存管理SoftReference 和 WeakReference

 
阅读更多

今天在看工程源码的时候看到了SoftReference这个类。

用来缓存我们软件的一些图片,好奇。就看了看这个类的作用。

 

首先这篇文章要讲的是两个内存管理相关的类WeakReference和SoftReference。

 

首相SoftReference的用处是增强一个引用常驻在内存的能力。也就是说一个引用比如A a=new A();

此时如果你把a=null;那么在不久之后的某个时间点,java虚拟机的内存回收机制就会把这个引用所占用的内存释放掉。

 

如果有时候,我们想让一个引用常驻内存而不是被回收,则可以用到softreference,比如上文的a引用。

用:SoftReference sr=new SoftReference(a);

 

这段代码就可以让a引用常驻内存,不会被回收。那可能就有疑问了,如果空引用也不回收那么内存很容易就溢出了。但是softreference可以保证 在抛出OutOfMemory异常之前会让虚拟机回收那些已经为空的引用,防止异常的发生。这就是softreference大概的用处。

 

概括起来就是:用于实现一些常用资源的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory异常。

 

weakReference一般用来防止内存泄漏,要保证内存被VM回收 

 

WeakReference,暂时我所了解的用处是当你想知道被设置为空的引用什么时候被回收时可以用到WeakReference。在代码上与SoftReference的用法是一样的。下面试一段简单的Demo代码

 

 

import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;

public class Test {
	
	public static void main(String[] args) throws InterruptedException
	{
		A a=new A();
		a.test();
		
		WeakReference wr=new WeakReference(a);
		//SoftReference sr=new SoftReference(a);
		a=null;
		while(true)
		{
		if(sr.get()!=null)
		{
			System.out.println("还没有被清楚");
		}else
		{
			System.out.println("已经被清除了");
			break;
		}
		
	}
	}
}


class A{
	public void test()
	{
		System.out.println("I am A");
	}
}
分享到:
评论

相关推荐

    SoftReference、WeakReference和PhantomRefrence分析和比较

    SoftReference、WeakReference和PhantomReference分析和比较 在 Java 中,引用类型分为强引用、软引用、弱引用和虚引用四种。强引用是我们最常用的引用类型,而软引用、弱引用和虚引用则是 Java 为我们提供的三种...

    Java引用总结--StrongReference、SoftReference、WeakReference、PhantomRef

    Java从1.2版本开始引入了四种引用,分别是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。这四种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用...

    Java内存泄露及内存无法回收解决方案

    Java内存管理是编程中至关重要的一个环节,尤其是对于大型、长时间运行的应用来说,内存泄漏和内存无法回收可能导致系统性能下降,甚至导致系统崩溃。本文将深入探讨Java内存泄露的原理,分析内存无法回收的原因,并...

    防范JAVA内存泄漏解决方案

    4. 使用弱引用和软引用:Java 提供了 WeakReference 和 SoftReference,这些引用类型的对象在 GC 需要回收内存时会被自动清除,有助于防止内存泄漏。 5. 监控系统指标:通过监控 JVM 的内存使用情况,如堆内存、非...

    Java内存模型详解

    - **弱引用和软引用**:使用弱引用(WeakReference)或软引用(SoftReference)来替代强引用(StrongReference),可以降低对象被垃圾回收的风险。 - **及时清理资源**:在对象不再使用时,及时清除对其的引用或关闭...

    Java内存溢出和内存泄露共4页.pdf.zip

    Java内存管理是编程人员在开发高并发、高性能应用时必须...理解并掌握Java内存管理机制,以及如何预防和处理内存溢出和内存泄露,是每个Java开发者必备的技能。通过上述方法,我们可以有效地提升程序的稳定性和性能。

    java内存模型和一些多线程的资料

    Java内存模型规定了程序运行时的数据存储在不同的区域,包括程序计数器、虚拟机栈、本地方法栈、堆和方法区(在Java 8之后被元空间取代)。其中,堆和栈内存是多线程共享的,而其他区域则线程私有。 2. **数据可见...

    Java中内存泄露及垃圾回收机制参照.pdf

    4. 使用WeakReference和SoftReference,WeakReference和SoftReference可以帮助避免内存泄漏。 Java的垃圾回收机制可以自动回收内存中的垃圾,避免内存泄漏,但是程序员需要注意避免内存泄漏的几点,以确保程序的...

    详解Java弱引用(WeakReference)的理解与使用

    Java 中的弱引用(WeakReference)是一种特殊的引用类型,它可以帮助我们更好地管理内存和避免内存泄漏。在 Java 中,当一个对象被创建时,它被放在堆(Heap)中。当垃圾回收器(GC)运行时,如果发现没有任何引用...

    内存泄漏问题\防范JAVA内存泄漏解决方案

    在Java编程中,内存泄漏是一个严重的问题,尤其对于长时间运行的应用程序,它可能...通过细心的代码审查、合理的对象管理和利用工具进行监控,我们可以有效地避免和解决Java内存泄漏问题,从而确保应用的稳定性和性能。

    深入探讨 java.lang.ref 包1

    例如,缓存系统可以利用 SoftReference 或 WeakReference 来存储数据,当内存不足时,系统可以自动释放缓存,而无需手动管理。 总结,Java.lang.ref 包提供了四种不同强度的引用,它们各自在不同的场景下发挥着重要...

    Java内存溢出问题

    总之,Java内存溢出问题需要从代码优化、内存管理策略、JVM参数配置等多方面进行综合考虑和处理。理解Java内存模型,掌握内存诊断工具,结合实际应用,才能有效地预防和解决内存溢出问题,提升系统的稳定性和效率。

    java内存泄露[借鉴].pdf

    Java内存管理是一个重要的主题,尤其是对于开发服务器端和嵌入式系统的程序员来说。Java通过垃圾收集器(Garbage Collector, GC)自动管理内存,减轻了程序员的负担,但同时也引入了内存泄露的可能性,尽管它的表现...

    介绍Java中的内存泄漏Java开发Java经验技巧共3页

    总之,理解Java内存管理和防止内存泄漏是每个Java开发者必备的技能。通过深入学习和实践,开发者可以编写出更加高效、稳定的程序,同时,不断学习新的知识,如Python小程序开发和C语言编程,能够帮助开发者更好地...

    Java内存泄露的理解与解决_.docx

    Java内存管理的核心在于垃圾回收机制(Garbage Collection, 简称GC),这是Java相对于C++等语言的一大优势,因为它自动回收不再使用的内存,避免了程序员手动管理内存可能导致的内存泄露。然而,Java中的内存泄露...

    java 内存泄露

    Java内存泄露:诊断与解决方案详解 ...总结:Java内存泄露是每个开发者都可能遇到的问题,但通过深入了解其原理,运用合适的工具和技术,我们完全可以有效地诊断和解决这类问题,确保应用系统的稳定性和性能。

    java内存分析

    7. **代码优化实践**:避免创建大量短生命周期的对象,减少静态字段的使用,合理使用软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)等,这些都能有效改善内存使用效率。 总的来说...

    JAVA程序有内存泄露。

    1. **正确管理引用:** 使用弱引用(WeakReference)、软引用(SoftReference)和虚引用(PhantomReference)可以帮助GC及时回收不再需要的对象。 2. **定期清理集合:** 清空不再使用的集合,避免持有无用对象的...

Global site tag (gtag.js) - Google Analytics