资讯专栏INFORMATION COLUMN

java:强引用,软引用,弱引用和虚引用

fengxiuping / 295人阅读

摘要:强引用如果一个对象具有强引用垃圾回收器绝不会回收它当内存空间不足时虚拟机宁愿抛出错误使程序异常终止也不会靠随意回收具有强引用的对象来解决内存不足问题软引用如果内存空间充足垃圾回收器就不会回收它如果内存空间不足就会回收这些对象的内存只要垃圾回

强引用

如果一个对象具有强引用,垃圾回收器绝不会回收它.当内存空间不足时,java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题.

软引用 SoftReference

如果内存空间充足,垃圾回收器就不会回收它;如果内存空间不足,就会回收这些对象的内存.只要垃圾回收器没有回收它,该对象就可以继续被应用程序使用.软引用可以实现内存敏感的高速缓存.

弱引用 Weakreference

只具有弱引用的对象具有更短的生命周期.在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存.不过,垃圾回收器是一个优先级很低对的线程,因此不一定会很快发现那些只具有弱引用的对象.

虚引用 PhantomReference

虚引用并不会决定对象的生命周期.如果一个对象仅持有虚引用,那么他就和没有任何引用一样,在任何时候都可能被回收.

引用队列 ReferenceQueue

引用队列可以和软引用,弱引用和虚引用联合使用.并且虚引用必须和引用队列联合使用.如果软引用(弱引用或者虚引用)所引用的对象被垃圾回收,java虚拟机就会把这个引用加入到与之关联的引用队列中.

        String reference = "hello";
        //引用队列
        ReferenceQueue queue = new ReferenceQueue<>();
        //弱引用
        WeakReference softReference = new WeakReference(reference,queue);
        reference = null;
        //取出弱引用持有的String对象
        String str = softReference.get();
        //取出引用队列中保存的引用对象
        Reference poll = queue.poll();

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77418.html

相关文章

  • Java中的四种引用类型:引用引用引用和虚引用

    摘要:虚引用与软引用和弱引用的一个区别在于虚引用必须和引用队列联合使用。 本文已同步至个人博客liaosis blog 在Java中是由JVM负责内存的分配和回收,这是它的优点(简化编程者的工作,不需要像C语言那样去手动操作内存),但同时也是它的缺点(不够灵活,垃圾回收对于编程者来说是不可控的)。 在JDK1.2以前,如果一个对象不被任何变量引用,则程序无法再次使用这个对象,这个对象最终会...

    makeFoxPlay 评论0 收藏0
  • Java四种引用简介

    摘要:简单来说就是引用和引用队列关联起来引用的构造函数传入队列,然后引用被回收的时候会被添加到队列中,然后使用方法可以返回引用。 引语:     我们知道java相比C,C++中没有令人头痛的指针,但是却有和指针作用相似的引用对象(Reference),就是常说的引用,比如,Object obj = new Object();这个obj就是引用,它指向的是真正的对象Object的地址,不过今...

    springDevBird 评论0 收藏0
  • 近期Java高级工程师面试总结

    摘要:面试总结最近两周面试了几家公司高级工程师的职位,主要有宜信网信金融阿里高德口袋购物。目前有部分公司已经面试通过,两家在等消息。今天趁热把常见面试内容总结一下。可以用来完成统一命名服务状态同步服务集群管理分布式应用配置项等管理工作。 面试总结 最近两周面试了几家公司Java高级工程师的职位,主要有宜信、网信金融、阿里高德、口袋购物。目前有部分公司已经面试通过,两家在等消息。今天趁热把常见...

    raoyi 评论0 收藏0

发表评论

0条评论

fengxiuping

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<