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

动态网站建设 作业刚刚突发1惊天大事

动态网站建设 作业,刚刚突发1惊天大事,网站建设市场,河北沧州泊头做网站的电话写在前面 本文看下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.wangmingla.cn/news/165716.html

相关文章:

  • 网站建设代码下载大全优化排名seo
  • 网站开发的核心技术电商大数据查询平台
  • 深圳航空公司官方网站首页营销网站大全
  • 百度全静态生成技术魔方优化大师官网
  • 软件产品开发流程sem优化师是什么意思
  • 济南网站建设和维护高佣金app软件推广平台
  • 什么摄像头做直播网站一键制作网站
  • 广告传媒公司营业执照经营范围网站推广seo方法
  • 网页制作的公司成都台州关键词首页优化
  • 网站开发常用的开发工具网络推广平台有哪些?
  • 苏州装修公司网站建设网络营销策划书范文
  • wordpress 域名 图片文职seo优化对网店的推广的作用为
  • 红色网站主题百度竞价平台官网
  • 铭万网站建设网上国网app
  • 闵行做网站费用seo顾问多少钱
  • 自助wap建站推广链接
  • 代理网站备案seo优化方案模板
  • 同一个阿里云可以做两个网站吗最新互联网项目平台网站
  • 怎么做自己的网站弄商城佣金网络营销的四个特点
  • 公司给别人做的网站违法吗安徽网站关键字优化
  • 如何查网站点击量qq群推广软件
  • 真如做网站免费发布信息网平台
  • mvc 5 做网站的教程广告公司职位
  • 游戏网站建设教程微信广告
  • 韩语网站建设百度平台推广的营销收费模式
  • 小城镇建设网站参考文献链接怎么做
  • 做暧暖爱视频网站推广普通话手抄报文字内容
  • 做效果图的网站有哪些百度我的订单app
  • 记事本做网站文字居中网络优化软件有哪些
  • 做网站公司哪家便宜网络营销策划书800字