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

目录

深入JVM 原理(一)Java内存模型:http://blog.csdn.net/qq_34707744/article/details/79278169
深入JVM原理(二)Java对象访问模式: http://blog.csdn.net/qq_34707744/article/details/79279979
深入JVM原理(三)JVM 垃圾收集:http://blog.csdn.net/qq_34707744/article/details/79281249
深入JVM原理(四)JVM垃圾回收流程:http://blog.csdn.net/qq_34707744/article/details/79281852
深入JVM原理(五)Java堆内存调整参数(调优关键):http://blog.csdn.net/qq_34707744/article/details/79287403
深入JVM原理(六)年轻代:http://blog.csdn.net/qq_34707744/article/details/79287900
深入JVM原理(七)老年代、永久代和元空间:http://blog.csdn.net/qq_34707744/article/details/79288787
深入JVM原理(八)JVM垃圾回收策略:http://blog.csdn.net/qq_34707744/article/details/79289110
深入JVM原理(九)JVM垃圾回收策略参数配置:http://blog.csdn.net/qq_34707744/article/details/79289556
深入JVM原理(十)G1收集器:http://blog.csdn.net/qq_34707744/article/details/79290595
深入JVM原理(十一)Java引用类型:http://blog.csdn.net/qq_34707744/article/details/79291451

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

强引用

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

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

如果此时堆内存有一个栈内存指向,那么该对象将无法被该GC回收;
强引用是我们一直使用的模式,并且也是以后常使用的引用模式,正因为强引用存在这种内存分配异常问题,所以,尽量少实例化对象。

软引用

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

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

范例:观察软引用

如果此时内存空间充足,那么对象将不会回收,否则,会进行回收处理;

弱引用

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

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

你可能感兴趣的:(java,系统架构)