import java.lang.ref.SoftReference; import java.lang.ref.WeakReference; public class TestGC { /** * * 软引用 当内存满的时候,才会回收软引用指向的对象 * 弱引用 每次进行垃圾回收时,不论内存是否满,都是回收弱引用指向的对象 * * @param args */ public static void main(String[] args) { String str = new String("a…
1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object(); // 强引用 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题.如果不使用时,要通过如下方式来弱化引用,如下: o=null; // 帮助垃圾收集器回收此对象 显式地设置o为null,或超出对象的生命周期范围,则gc认为该对象不…
在JDK1.2之前,创建的对象只有在处于可触及(reachable)的状态下,才能被程序使用.也就是说,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.垃圾回收器一旦发现这些无用对象,就会对其进行回收.但是,在某些情况下,我们会希望有些对象不需要被立即回收,或者说从全局的角度来说没有立即回收的必要性.比如缓存系统的设计,在内存不吃紧或者说为了提高运行效率的情况下,一些暂时不用的对象仍然可放置在内存中,而不是立即进行回收. 为了满足这种要求,从JDK1.2版本开始,Java的设计人员把对…
java强引用,软引用,弱引用,虚引用 原文:https://blog.csdn.net/liaodehong/article/details/52223354 用了Java怎么长时间一直不知道原来Java还有四种引用类型,这个引用类型和我们平常说的可不一样.这里的引用类型不是指数据类型的一种,而是指Java中的引用所分的四种类型.他们代表了JVM回收内存的四种强度,分别如下. 强引用:Java中的引用,有点像C++的指针.通过引用,可以对堆中的对象进行操作.在某函数中,当创建了一个对象,该对象…
引用的应用场景 我们都知道垃圾回收器会回收符合回收条件的对象的内存,但并不是所有的程序员都知道回收条件取决于指向该对象的引用类型.这正是Java中弱引用和软引用的主要区别. 如果一个对象只有弱引用指向它,垃圾回收器会立即回收该对象,这是一种急切回收方式. 相对的,如果有软引用指向这些对象,则只有在JVM需要内存时才回收这些对象. 弱引用和软引用的特殊行为使得它们在某些情况下非常有用. 例如:软引用可以很好的用来实现缓存,当JVM需要内存时,垃圾回收器就会回收这些只有被软引用指向的对象. 而弱引用…
对于Java中的垃圾回收机制来说,对象是否被回收的标准在于该对象是否被引用.因此,引用也是JVM进行内存管理的一个重要概念. Java中对象的引用一般有以下4种类型: 1强引用  2软引用  3弱引用  4虚引用 以下一一介绍其用法和区别 1强引用:在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用.当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到JVM也不会回收.因此强引用是造成Java内存泄漏的主…
Java强引用. 软引用. 弱引用.虚引用 2012-07-09     1.对象的强.软.弱和虚引用    在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期.这4种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 图1为对象应用类层次1)强引用(StrongReference)    强引…
对于大部分的对象而言,程序里会有一个引用变量来引用该对象,这是最常见的引用方法.除此之外,java.lang.ref包下还提供了3个类:SoftReference.WeakReference和PhantomReference.它们分别代表了系统对对象的另外3中引用方式:软引用.弱引用和虚引用. Java中四种引用的区别和关联: 强引用.这是Java中最常见的引用方式.程序创建一个对象,并把这个对象赋给一个引用变量,程序通过该引用变量来操作实际的对象.当一个对象被一个或者多个引用变量引用时,它处于…
整体架构 强引用 强引用是默认支持,当内存不足的时候,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会回收对象. 强引用是最常见的普通对象引用,只要还有强引用指向对象,对象就存活,垃圾回收器不会处理存活对象.一般把一个对象赋给一个引用变量,这个引用变量就是强引用.当一个对象被强引用变量所引用,它就处于可达状态,是不会被垃圾回收的,即使之后都不会再用到了,也不会回收.因此强引用是造成Java内存泄漏的主要原因之一. 关于Java内存泄漏的详细内容,可以参考这篇博客:https://b…
JVM引用 我们希望能描述这样一类对象: 当内存空间还足够时,则能保留在内存中:如果内存空间在进行垃圾收集后还是很紧张,则可以抛弃这些对象. -[既偏门又非常高频的面试题]强引用.软引用.弱引用.虚引用有什么区别?具体使用.场景是什么? 在JDK 1.2版之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference).软引用(Soft Reference) .弱引用(Weak Reference) 和虚引用(Phantom Reference) 4种,这4种引用强度依…