zoukankan      html  css  js  c++  java
  • java 弱引用

    java 引用分为强,软,弱,虚

    强引用,即平常创建对象得到的引用,如果一个对象存在强引用,它是不会被 GC 回收的。

    但是如果一个对象只有软引用或弱引用,则当发生 GC 时

    软引用:如果内存不足,则回收

    弱引用:不管内存是否充足,回收

    这里主要总结下弱引用的使用方法:弱引用对象被回收时,对象被回收,引用会放入一个队列,可以获取这个队列的弱引用,做一些清理动作。

    public class WearkRefTest {
        static class WeakReferenceExt<String> extends WeakReference<String> {
            public WeakReferenceExt(String referent, ReferenceQueue rq) {
                super(referent, rq);
            }
            public void clean() {
                System.out.println("do some cleaning");
            }
        }
    
        public static void main(String[] args) throws InterruptedException {
            // 创建一个大点的对象
            char[] chars = new char[1024 << 16];
            Arrays.fill(chars, 'z');
            String str = new String(chars);
            // 创建弱引用
            ReferenceQueue rq = new ReferenceQueue();
            WeakReference weak = new WeakReferenceExt(str, rq);
            str = null;
            System.out.println(((String)weak.get()).length());
            // 建议 GC,执行 GC 后,对象会被回收,弱引用放入队列
            System.gc();
            System.out.println("-------------");
            // 阻塞,从队列中弹出弱引用
            WeakReferenceExt remove = (WeakReferenceExt)rq.remove();
            // 触发业务清理动作
            remove.clean();
            // 抛空指针异常
            System.out.println(((String)weak.get()).length());
        }
    }

    WeakHashMap 类需要关注下,当它的 key 没有强引用时,发生 GC 后,对象会被清除。

  • 相关阅读:
    洛谷 1443——马的遍历(广度优先搜索)
    jzoj C组 2017.1.21
    jzoj C组 2017.1.20 比赛
    jzoj C组 2017.1.19 比赛
    jzoj C组 2017.1.18 比赛
    jzoj C组 2017.1.17 比赛
    jzoj C组 2017.1.16 比赛
    jzoj C组 2017.1.15比赛
    [LCA][数学]JZOJ 4794 富爷说是一棵树
    [CDQ分治][带权并查集]JZOJ 4769
  • 原文地址:https://www.cnblogs.com/allenwas3/p/12248296.html
Copyright © 2011-2022 走看看