余姚做网站哪家好易语言 做网站
余姚做网站哪家好,易语言 做网站,国内p2p网站建设,辽阳公司网站建设1、强引用#xff08;StrongReference#xff09; 强引用不会被GC回收#xff0c;并且在java.lang.ref里也没有实际的对应类型。举个例子来说#xff1a; Object obj new Object(); 这里的obj引用便是一个强引用#xff0c;不会被GC回收。 2、软引用StrongReference 强引用不会被GC回收并且在java.lang.ref里也没有实际的对应类型。举个例子来说 Object obj new Object(); 这里的obj引用便是一个强引用不会被GC回收。 2、软引用SoftReference 软引用在JVM报告内存不足的时候才会被GC回收否则不会回收正是由于这种特性软引用在caching和pooling中用处广泛。软引用的用法
Object obj new Object();
SoftReferenceObject softRef new SoftReference(obj);
// 使用 softRef.get() 获取软引用所引用的对象
Object objg softRef.get(); 3、弱引用WeakReference 当GC一但发现了弱引用对象将会释放WeakReference所引用的对象。弱引用使用方法与软引用类似但回收策略不同。 4、虚引用PhantomReference 当GC一但发现了虚引用对象将会将PhantomReference对象插入ReferenceQueue队列而此时PhantomReference所指向的对象并没有被GC回收而是要等到ReferenceQueue被你真正的处理后才会被回收。虚引用的用法
package com.asiainfo.proxydemo;import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;public class SoftReferenceDemo {//软引用在JVM报告内存不足的时候才会被GC回收否则不会回收正是由于这种特性软引用在caching和pooling中用处广泛。软引用的用法public static void soft(){Object obj new Object();ReferenceQueueObject refQueue new ReferenceQueueObject();SoftReferenceObject softRef new SoftReferenceObject(obj, refQueue);System.out.println(softRef.get()); // java.lang.Objectf9f9d8System.out.println(refQueue.poll());// null// 清除强引用,触发GCobj null;System.gc();System.out.println(softRef.get());try {Thread.sleep(200);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(refQueue.poll());}//当GC一但发现了弱引用对象将会释放WeakReference所引用的对象。弱引用使用方法与软引用类似但回收策略不同。public static void weak(){Object obj new Object();ReferenceQueueObject refQueue new ReferenceQueueObject();WeakReferenceObject weakRef new WeakReferenceObject(obj, refQueue);System.out.println(weakRef.get());System.out.println(refQueue.poll());obj null;System.gc();System.out.println(weakRef.get());System.out.println(refQueue.poll());}// 如果obj被置为null当GC发现了虚引用GC会将phanRef插入进我们之前创建时传入的refQueue队列// 注意此时phanRef所引用的obj对象并没有被GC回收在我们显式地调用refQueue.poll返回phanRef之后// 当GC第二次发现虚引用而此时JVM将phanRef插入到refQueue会插入失败此时GC才会对obj进行回收public static void phantom() throws InterruptedException{Object obj new Object();ReferenceQueueObject refQueue new ReferenceQueueObject();PhantomReferenceObject phanRef new PhantomReferenceObject(obj, refQueue);/// 调用phanRef.get()不管在什么情况下会一直返回nullSystem.out.println(phanRef.get());System.out.println(refQueue.poll());obj null;System.gc();System.out.println(phanRef.get());System.out.println(refQueue.poll());Thread.sleep(300);System.out.println(refQueue.poll());}public static void main(String[] args) {try {SoftReferenceDemo.phantom();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}弱引用与虚引用的用处 软引用很明显可以用来制作caching和pooling而弱引用与虚引用呢其实用处也很大首先我们来看看弱引用举个例子
class Registry {private Set registeredObjects new HashSet();public void register(Object object) {registeredObjects.add( object );}
}
所有我添加进 registeredObjects 中的object永远不会被GC回收因为这里有个强引用保存在registeredObjects里另一方面如果我把代码改为如下
class Registry {private Set registeredObjects new HashSet();public void register(Object object) {registeredObjects.add( new WeakReference(object) );}}
现在如果GC想要回收registeredObjects中的object便能够实现了同样在使用HashMap如果想实现如上的效果一种更好的实现是使用WeakHashMap。
而虚引用呢我们先来看看javadoc的部分说明
Phantom references are useful for implementing cleanup operations that are necessary before an object gets garbage-collected. They are sometimes more flexible than the finalize() method.
翻译一下
虚引用在实现一个对象被回收之前必须做清理操作是很有用的。有时候他们比finalize()方法更灵活。
很明显的虚引用可以用来做对象被回收之前的清理工作
参考http://www.cnblogs.com/newcj/archive/2011/05/15/2046882.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90338.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!