当前位置: 首页 > news >正文

百度网站模板免费下载福建城乡建设部网站首页

百度网站模板免费下载,福建城乡建设部网站首页,黑马培训机构,情侣wordpress模板下载写在前面 本文看下Java的强,软,弱,虚引用相关内容。 1:各种引用介绍 顶层类是java.lang.ref.Reference,注意是一个抽象类,而不是接口,其中比较重要的引用队列ReferenceQueue就在该类中定义,子…

写在前面

本文看下Java的强,软,弱,虚引用相关内容。

1:各种引用介绍

顶层类是java.lang.ref.Reference,注意是一个抽象类,而不是接口,其中比较重要的引用队列ReferenceQueue就在该类中定义,子类们共同使用:

// java.lang.ref.Reference
public abstract class Reference<T> {// ...volatile ReferenceQueue<? super T> queue;// ...
}

另,以下测试案例使用的gc配置:

-Xms10m -Xmx10m -XX:+PrintGC

1.1:强引用

平时我们用的默认就是强引用。所以也就没有一个类似于StrongReference的类来代表强引用了。

1.2:软引用

使用类SoftReference代表一个软引用,比强引用稍微弱化些,在内存空间充足时发生GC不会被回收,但是在内存不足发生GC时将会被回收,所以适合用在类似于缓存这种并不会对程序起到决定性作用的场景中。如下例子:

public void softRefTest() {/**** @author mikechen*/Object obj = new Object();SoftReference softRef = new SoftReference<Object>(obj);obj = null;//删除强引用byte[] b = new byte[1024 * 1024];System.gc();//调用gcSystem.out.println("gc之后的值:" + softRef.get()); // 对象依然存在
}

运行:

[GC (System.gc())  2663K->1713K(9728K), 0.0011382 secs]
[Full GC (System.gc())  1713K->1647K(9728K), 0.0055792 secs]
gc之后的值:java.lang.Object@330bedb4Process finished with exit code 0

这里内存不足的场景我没有试出来,要么就OOM了。

软引用也可以选择和ReferenceQueue来一起使用,当软应用关联的对象被GC之后就会将软引用本身添加到队列中,如下:

public void softRefWithQueue() throws Exception {ReferenceQueue<Object> queue = new ReferenceQueue<>();Object obj = new Object();SoftReference softRef = new SoftReference<Object>(obj, queue);//删除强引用obj = null;//调用gcSystem.gc();System.out.println("gc之后的值: " + softRef.get()); // 对象依然存在,虽然GC但内存足够,不会回收//申请较大内存使内存空间使用率达到阈值,强迫gcbyte[] bytes = new byte[1024 * 1024 * 6];//如果obj被回收,则软引用会进入引用队列System.out.println("111");//调用gcSystem.gc();Reference<?> reference = queue.remove(); // 因为没有触发内存不足的场景,所以不会添加到队列中,所以这里会卡着System.out.println("222");if (reference != null) {System.out.println("对象已被回收: " + reference.get());// 对象为null}
}

运行:
在这里插入图片描述
同样试不出来内存不足被回收的场景。

1.3:弱引用

弱引用和软引用的区别是在发生GC时不管内存是否足够,都会被回收,看个例子:

    private void weakRef() {Object o1 = new Object();WeakReference<Object> w1 = new WeakReference<Object>(o1);//        System.out.println(o1);System.out.println(w1.get()); // 因为此时还有强引用,肯定不会被回收o1 = null; // 手动去除强引用System.gc();//        System.out.println(o1);System.out.println("因为发生了GC,所以就被回收掉了:");System.out.println(w1.get()); // 因为发生了GC,所以就被回收掉了
}

运行:

java.lang.Object@330bedb4
[GC (System.gc())  1570K->745K(9728K), 0.0010741 secs]
[Full GC (System.gc())  745K->622K(9728K), 0.0059361 secs]
因为发生了GC,所以就被回收掉了:
nullProcess finished with exit code 0

当然也可以和ReferenceQueue一起使用,来监听对象被回收的动作:

private void weakRefWithQueueV1() throws Exception {CC o1 = new CC();o1.setName("张三");ReferenceQueue referenceQueue = new ReferenceQueue();Map<WeakReference, String> map = new HashMap<>();WeakReference<CC> w1 = new WeakReference<CC>(o1, referenceQueue);map.put(w1, w1.get().getName());
//    System.out.println(w1);
//
//    System.out.println(o1);System.out.println(w1.get()); // 因为此时还有强引用,肯定不会被回收o1 = null; // 手动去除强引用System.gc();//        System.out.println(o1);System.out.println("因为发生了GC,所以就被回收掉了:");System.out.println(w1.get()); // 因为发生了GC,所以就被回收掉了final Reference ref = referenceQueue.remove();System.out.println(map.get(ref) + " 被回收了"); // 因为对象被回收,所以弱引用对象本身会被放到队列中
}

运行:

org.example.Main$CC@2503dbd3
[GC (System.gc())  1647K->709K(9728K), 0.0009438 secs]
[Full GC (System.gc())  709K->628K(9728K), 0.0058506 secs]
因为发生了GC,所以就被回收掉了:
null
张三 被回收了Process finished with exit code 0

1.4:虚引用

虚引用是最弱的的一种引用,不决定对象的生命周期,有跟没有一样,即形同虚设,必须和ReferenceQueue共同使用,一般用来监控jvm的gc活动,如下例子:

private void weakPhantomWithQueueV1() throws Exception {CC o1 = new CC();o1.setName("张三1");ReferenceQueue referenceQueue = new ReferenceQueue();Map<PhantomReference, String> map = new HashMap<>();PhantomReference<CC> w1 = new PhantomReference<CC>(o1, referenceQueue);map.put(w1, o1.getName());
//        System.out.println(w1);//        System.out.println(o1);System.out.println(w1.get()); // 因为此时还有强引用,肯定不会被回收o1 = null; // 手动去除强引用System.gc();//        System.out.println(o1);System.out.println("因为发生了GC,所以就被回收掉了:");System.out.println(w1.get()); // 因为发生了GC,所以就被回收掉了final Reference ref = referenceQueue.remove();System.out.println(map.get(ref) + " 被回收了"); // 因为对象被回收,所以弱引用对象本身会被放到队列中
}

运行:

null
[GC (System.gc())  1643K->741K(9728K), 0.0012171 secs]
[Full GC (System.gc())  741K->627K(9728K), 0.0062680 secs]
因为发生了GC,所以就被回收掉了:
null
张三1 被回收了Process finished with exit code 0

2:在框架中的应用

2.1:在netty中的应用

just go。

2.2:在mybatis中的应用

TODO

写在后面

参考文章列表

Java四大引用详解:强引用、软引用、弱引用、虚引用 。

netty之内存泄露检测。

http://www.yayakq.cn/news/394265/

相关文章:

  • 焦作网站建设公司哪家好各自的特点是什么
  • 网站开发国内外研究背景如何做网站泛目录解析
  • 网站营销推广策划书建立网站的风险
  • 承接各类网站建设wordpress修改首页文章样式
  • 蓝色管理系统网站模版昆明做网站的公司有哪些
  • 美食网站开发现状espcms易思企业网站管理系统
  • 360浏览器直接进入网站温州市建筑业联合会
  • 国外metro风格网站模板网站服务内容有哪些
  • 中山营销型网站设计网站建设域名的选取有讲究
  • 做网站是做完给钱还是指数运算公式大全
  • 专业网站开发制作文字变形logo设计生成器
  • 网站后台打开很慢网站开发中系统部署与维护要求
  • 网站建设与维护招聘条件男男做的视频网站好
  • python网页版运行器建筑优化公司排名
  • 广州外贸型网站长春师范大学
  • 南宁软件优化网站建设莱州市双语网站
  • 对比色的网站鞍山信息港招聘信息网
  • 凡科手机网站设置问题公司网站开发类属什么费用
  • php钓鱼网站怎么做视频教程如何查看网站的浏览量
  • 网站备案核验照片背景外国做动漫图片的网站叫什么名字
  • 站长统计幸福宝宝官方青岛seo整站优化
  • 怎样做建网站做淘客建模外包网站
  • 上海网站高端利用微博做网站推广
  • 做移动网站优化首页软深圳做电商平台网站
  • 制作网站多少钱wordpress网速卡
  • 网站开发主要职责中卫网站推广服务
  • 湖南平台网站建设公司wordpress手册插件
  • 自适应网站好建们青岛做网站公司电话
  • 武进网站建设方案wordpress图文主题
  • 建设工程 法律 网站广州网站开发创意设计