• 技术文章 > php教程 > java教程

    java中强引用,软引用,弱引用和虚引用的对比介绍

    不言 不言 2019-02-11 11:08:40 转载 167

    本篇文章给大家带来的内容是关于java中强引用,软引用,弱引用和虚引用的对比介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    强引用

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

    软引用 SoftReference<T>

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

    弱引用 Weakreference<T>

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

    虚引用 PhantomReference<T>

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

    引用队列 ReferenceQueue<T>

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

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

    以上就是java中强引用,软引用,弱引用和虚引用的对比介绍的详细内容,更多请关注php中文网其它相关文章!

    第六期线上培训班
    专题推荐: java
    上一篇:Java多线程之Callable和Future的详细介绍(代码示例) 下一篇:Java中方法覆盖与方法重载的对比介绍

    相关文章推荐

    • 分享JavaScript与Java中MD5使用两个例子_javascript技巧 • Java中Timer的用法详解_jquery • JS自定义对象实现Java中Map对象功能的方法_javascript技巧 • Java中final关键字详解_php技巧 • PHP实现java中的DatainputStream类. • PHP和JAVA中的重载(overload)和覆盖(override) 介绍_PHP

    全部评论我要评论

  • 取消 发布评论 发送
  • PHP中文网