您的位置:首页 > 编程语言 > Java开发

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

2018-02-08 16:48 465 查看

目录

深入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,则必须进行回收处理,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JVM虚拟机
相关文章推荐