Java引用类型分类以及详解 | 您所在的位置:网站首页 › java引用类型是什么 › Java引用类型分类以及详解 |
Java引用类型分类以及详解
- Java引用类型概述
在JVM之中再好的算法,也敌不过一个好烂的程序员。一个程序要想写好有两点:按照开发标准进行、请写有用代码。 而对于垃圾的产生与回收的处理之中,要想进行更好的控制,就必须清楚的掌握Java中的四种引用方式。 强引用(Strong Reference):即使进行了多次的GC回收,即使JVM真的已经不够用了,即使JVM最终不得已抛出了OOM错误,那么该引用继续抢占; 软引用(Soft Reference):当内存空间不足时,可以回收此内存空间。如果充足则不回收,可以用其完成缓存的一些处理操作开发。 缓存:保证数据更快的操作(读取)。是不重要的数据。可以作为牺牲来释放空间。 弱引用(Weak Reference):不管内存是否紧张,只要一出现GC处理,则立即回收。 幽灵引用(Phantom Reference):和没有引用是一样的。 比如HashMap根据key取得值,设置key值为null和不设置key值的效果是一样的。 强引用强引用是Java默认支持的一种操作模式,也就是说在引用的处理其间,即使出现有GC,即使内存不足,该引用的数据也不会被回收。 范例:观察强引用:
在软引用之中如果想要进行引用的处理操作,则可以使用如下的方法完成: 1.构造方法:public SoftReference(T reference); 2.取得引用的数据:public T get(); 范例:观察软引用: 范例:弱引用处理 因为不执行GC,所以弱引用的对象并没有被释放。输出依然有值。 whm中存放的都是匿名对象。 个人觉得使用WeakHashMap最大的好处是可以用它保存一些共享数据,这些共享数据如果长时间不使用,可以将其清空。 引用队列 在之前使用软引用和弱引用的时候都会发现有这样一个构造方法: SoftReference:引用队列:待被砍掉的对象的集合点 如果要清楚引用队列,则首先必须知道对象的引用的强度。如果说按照现在的理解来讲:强引用的强度大于软引用,软引用大于弱引用。
在以上给出的引用的路径上,1到5是最强引用,但是由于其本身存在一个软引用,所以对象5对于整个的程序就属于软可及对象。 在java里面,如果某一个对象不属于强引用,那么就需要有一个专门的机制来清除那些不具有存在价值的对象(强对象才有价值) 所以这个时候如果保存有太多的无价值对象就会造成内存泄漏,那么为专门提供有一个引用队列,当某一个对象被垃圾回收后,则该对象会被保存到引用队列之中。 范例:观察引用队列的处理操作; 引用队列里面保存的就是一个要准备被回收的对象的信息。 幽灵引用(虚引用) 幽灵引用指的是什么都不保存,但是又看起来像是保存了一样。 这个的处理类java.lang.ref.PhantomReference。范例:观察幽灵引用: 幽灵引用直接就把要保存的内容保存在了引用队列之中 需要发生引用但是又不需要引用占用空间的时候。—采用幽灵引用。 |
CopyRight 2018-2019 实验室设备网 版权所有 |