首页 > 编程语言 > 详细

Java中的引用

时间:2020-07-26 14:23:53      阅读:72      评论:0      收藏:0      [点我收藏+]

1.强引用

  jvm在进行GC的时候,也不会去删除具有强引用的内存,即使内存以及不够用了,如果强引用的对象过多,超出了JVM的大小,那么就会发生内存溢出异常。

  例如,Object obj = new Object() 就是一个强引用。

2.软引用

  JVM在GC的时候,不会优先去删除只被软引用的对象,只有在内存不够的时候,也就是当前使用的内存回收了一次还是不够,那么就会回收掉软引用指向的内存区域,才会判断是否被回收。

3.弱引用

  每一次GC的时候,如果这块内存只被一个弱引用指向,那么都会被回收掉。

  例如TheadLocal就是一个弱引用的例子,在一个公共的ThreadLocalMap 中,存储的是(Threadlocal,Object) 使用的是弱引用存储,如果当前线程是存活状态,代表这个线程对这个Key是强引用状态,不会被GC掉,而当线程结束时,这个key也就失去了强引用,而ThradLocalMap对key则是使用的弱引用,方便于,线程结束时,对于ThreadLlocal中的对象进行GC。

4.虚引用

  如果当前的引用是虚引用,那么这个引用的内存是不能被获取到的,因为虚引用指向的并不是被JVM管理的内存区域,而是一块堆外内存,而且在垃圾回收的时候,也回收不到堆外的内存,所以在回收虚引用时间,会将虚引用回收在一个队列中,需要手动的监控队列,来对堆外内存进行回收,所需虚引用必须和队列一起使用。

 

Java中的引用

原文:https://www.cnblogs.com/Yye0118/p/13379514.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!