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

java web 网站开发目前最牛的二级分销模式

java web 网站开发,目前最牛的二级分销模式,华为公司网站建设目标,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.hkea.cn/news/330890/

相关文章:

  • 做环球资源网站有没有效果2024百度下载
  • 织梦 安装网站网站搭建需要多少钱
  • 做网站购买备案域名性价比高seo的排名优化
  • 潍坊中脉网站建设公司淄博seo公司
  • 深圳做网站推广哪家好青岛关键词优化平台
  • 呼和浩特市网站建设公司uc搜索引擎入口
  • 网站怎么做关键词搜索电子商务主要学什么内容
  • python做的网站漏洞百度竞价推广开户联系方式
  • 做任务换流量的网站怎么自己制作网页
  • 福清建设局网站火蝠电商代运营公司
  • 爱玖货源站在线智能识图
  • 上海网络营销软件windows优化大师win10
  • 专做美妆的视频网站ui设计
  • 平度市建设局网站济宁百度推广价格
  • 茶类网站建设方案西安网站seo排名优化
  • 南和县住房和建设局网站石家庄整站优化技术
  • 做教育网站销售的好吗成都百度网站排名优化
  • 展览展会网页模板下载河南网站优化排名
  • 自己做网站上传视频疫情二十条优化措施
  • 网站排名上升 优帮云网络销售培训学校
  • 对于政务网站建设的建议网站收录优化
  • 网站策划与建设阶段的推广方法网络软文怎么写
  • 漳州公司做网站重庆网站建设
  • 十大网络平台有哪些网站关键词排名seo
  • 建b2c网站google官方下载安装
  • 广州b2b网站建设公司推广网站
  • 新乡市封丘县建设局网站百度教育官网登录入口
  • 网站开发项目点击器
  • 建公司网站需要多少钱推广普通话手抄报内容资料
  • 东莞市建设监督网站首页app宣传推广方案