深刻JVM原理(十一)Java引用类型

目录

深刻JVM 原理(一)Java内存模型:http://www.noobyard.com/article/p-vcuxafar-mx.html
深刻JVM原理(二)Java对象访问模式:http://www.noobyard.com/article/p-kshslmnp-ma.html
深刻JVM原理(三)JVM 垃圾收集:http://www.noobyard.com/article/p-ztnmzyos-kr.html
深刻JVM原理(四)JVM垃圾回收流程:http://www.noobyard.com/article/p-anmqpmkm-cy.html
深刻JVM原理(五)Java堆内存调整参数(调优关键):http://www.noobyard.com/article/p-eltveokx-mg.html
深刻JVM原理(六)年轻代:http://www.noobyard.com/article/p-atmiidnt-ks.html
深刻JVM原理(七)老年代、永久代和元空间:http://www.noobyard.com/article/p-vaxbmhqe-ea.html
深刻JVM原理(八)JVM垃圾回收策略:http://www.noobyard.com/article/p-adodzhii-ds.html
深刻JVM原理(九)JVM垃圾回收策略参数配置:http://www.noobyard.com/article/p-yopfenvx-mg.html
深刻JVM原理(十)G1收集器:http://www.noobyard.com/article/p-olmrbdgd-mw.html
深刻JVM原理(十一)Java引用类型:http://www.noobyard.com/article/p-hsennvkb-ks.htmljava

引用类型能够说是整个java开发的灵魂所在,若是没有合理的操做,那么就有可能产生垃圾问题,可是对于引用也须要一些合理化的设计。 
在不少的时候并非全部的对象都须要对咱们一直使用,那咱们就须要对引用的问题作进一步的思考。因此从 JDK 1.2以后,关于引用提出了四种方案: 
强引用:当内存不足的时候,JVM宁肯出现OutOfMemory错误中止,也须要就进行保存,而且不会将此空间回收;如新new一个对象; 
软引用:当内存不足的时候,进行对象的回收处理,每每用于高速缓存中; 
弱引用:无论内存是否紧张,只要有垃圾产生,则当即回收; 
幽灵引用:和没有引用是同样的;缓存

强引用

JVM默认的引用模式。即:在引用期间内,若是该堆内存被指定的栈内存有联系,那么该对象就没法被GC所回收,而一旦出现了内存空间不足,就会出现“OutOfMemoryError”错误信息; 
范例:观察强引用.net

Object object = new Object(); //强引用 ,默认支持 
Object obj = object; //引用传递 
object = null; //断开一个链接 
System.gc(); 
System.out.println(obj);设计

若是此时堆内存有一个栈内存指向,那么该对象将没法被该GC回收; 
强引用是咱们一直使用的模式,而且也是之后常使用的引用模式,正由于强引用存在这种内存分配异常问题,因此,尽可能少实例化对象。对象

软引用

在许多的开源组件中,每每使用软引用做为缓存组件出现,其最大的特色在于:不足时回收,不充足时不回收。要想实现软引用,则须要一个单独的类来实现控制:java.lang.ref.SoftReferenceblog

构造:public SoftReference(T referent) 
取出数据:public T get()接口

范例:观察软引用内存

若是此时内存空间充足,那么对象将不会回收,不然,会进行回收处理;开发

弱引用

本质含有是只要一进行GC处理,那么所引用的对象将会被马上回收。弱引用须要使用的是Map接口的子类。get

一旦出现有GC,则必须进行回收处理,