强引用 软引用 弱引用 详解

Python011

强引用 软引用 弱引用 详解,第1张

java中引用对象类型分为强引用(默认) 软引用 弱引用 虚引用,引用的强弱等级是通过jvm垃圾回收的操作来区分的.本文只介绍前三种引用类型

1.对于强引用对象 垃圾回收器不会回收此类对象即便是jvm可使用内存不足宁愿抛出错误也不会回收强引用对象

2.对于软引用对象 当jvm可使用内存不足时 且该对象只被软引用所引用 则垃圾回收器会将其进行回收 释放内存

3.对于弱引用对象 无论jvm可使用内存是否充足 垃圾回收器随时都可能将只有弱引用所引用的对象进行回收

1.对于强引用对象 默认就是强引用 例如 Object target = new Object()

2.对于软引用对象 经常用于内存敏感的缓存(Soft references are most often used to implement memory-sensitive caches.)

3.对于弱引用对象 经常用于实现规范化映射(Weak references are most often used to implement canonicalizing mappings.) 典型应用 ThreadLocal

1.强引用测试

2.软引用测试 注意垃圾回收的时机 只在jvm可用内存不足时进行回收

3.弱引用测试 注意和软引用垃圾回收的时机不同 不会等到jvm可用内存不足才回收弱引用

4.软引用使用场景 cache

我自己也复习下概念。

强引用:就是普通引用。比如 A o1=new A()A o2=o1

强引用只有当所有对这个对象的所有引用(o1,o2)失效后,new A()的内存才会被回收。

残影引用、弱引用、软引用都用来引用随时可能被回收的对象。类似o1,o2即使未失效也会回收。

区别是被回收器回收的激烈程度,由强到弱。

残影引用是对象已经finalize或者执行完析构函数,只等内存马上回收了,最容易被回收。非常接近回收时机,就像残影会随物体消失而消失,故名。

弱引用的对象是在正常情况下,回收器遇到就回收,是被积极回收的对象。

软引用是仅在内存不够时才回收,属于消极回收。

我们在使用java编程开发语言开发软件的时候通常都会new对象,然后通过对对象的引用来实现不同的编程需求,而今天电脑培训http://www.kmbdqn.cn/就一起来了解一下,java编程开发语言中都有哪些常见的引用方法。

1:虚引用1.1简介:虚引用是所有引用中强度弱的,它完全类似于没有引用,在java.reflact.PhantomReference类中实现。

虚引用对象本身没有太大影响,对象甚至感觉不到虚引用的存在。

如果一个对象存在虚引用,那么它和没有引用的效果大致相同,虚引用无法引用任何堆中的对象作用:虚引用主要用于跟踪对象被JVM垃圾回收的状态,可以通过它来手机GC的行为。

可以通过检查与虚引用关联的引用队列中是否已经包含指定的虚引用,从而了解虚引用锁引用的对象是否被回收。

注意:虚引用无法单独使用,虚引用必须和引用队列(ReferenceQueue)联合使用.被虚引用所引用对象被垃圾回收后,虚引用将被添加到引用队列中。

2:弱引用简介:弱引用和虚引用有点类似,不同之处在于虚引用锁引用的对象生存期比虚引用长一点。

虚引用在java.reflact.WeakReference类实现。

在系统进行垃圾回收的时候,不管系统内存是否足够,总是回收该对象所占用的内存.但是弱引用的强度是要大于虚引用的3:软引用简介:软引用比弱引用的强度高一点,它是通过java.reflact.SoftReference来实现。

对于软引用来说,当系统内存空间足够时,它不会被系统回收,程序中改对象的引用也是有效的。

而当系统的内存空间不够时,系统将会回收它。

作用:软引用是强引用好的替代,它一定程度上可以避免系统内存不足的异常,可以充分使用软引用来解决内存紧张的问题。

4:强引用简介:强引用很常见,在平时的程序中,我们新new一个对象,比如Objectobject=newObject()那么这个object就是指向object对象的强引用。

强引用的特点就是:被引用的java对象绝对不会被垃圾回收机制回收,即使系统的内存非常紧张,即使java以后也用不到,jvm不会回收强引用所引用的java对象。