六、垃圾回收_判断对象是否存活算法_引用计数法详解
发布时间:2020-12-15 07:59:56 所属栏目:Java 来源:网络整理
导读:引用计数法: 在对象中添加一个引用计数器,当有地方引用对象的时候,引用计数器的值就+1 ,当引用失效的时候计数器的值就 -1? ?? 打印垃圾回收的参数 -verbose:gc -XX: +PrintGCDetail ? 使用程序模拟下图的? 对象引用来测试? jdk 1.8 使用的是否是? ? 引
引用计数法: 在对象中添加一个引用计数器,当有地方引用对象的时候,引用计数器的值就+1 ,当引用失效的时候计数器的值就 -1? ?? 打印垃圾回收的参数 -verbose:gc -XX: +PrintGCDetail ? 使用程序模拟下图的? 对象引用来测试? jdk 1.8 使用的是否是? ? 引用计数法 ? package com.zuoyan.test01; public class Main { private Object instance; private Main() { byte[] m = new byte[20*1024*1024]; } public static void main(String[] args) { Main m1 = new Main(); Main m2 = new Main(); m1.instance = m2; m2.instance = m1; m1 = null; m2 = null; System.gc(); } } ? ? m1 引用 m2?,m2 引用 m1? 将 m1 和 m2 对堆内存的引用置为空,然后进行垃圾回收,判断 m1 m2是否被回收 [GC (System.gc()) [PSYoungGen: 46203K->808K(76288K)] 46203K->816K(251392K),0.0013100 secs] [Times: user=0.00 sys=0.00,real=0.00 secs] [Full GC (System.gc()) [PSYoungGen: 808K->0K(76288K)] [ParOldGen: 8K->661K(175104K)] 816K->661K(251392K),[Metaspace: 3477K->3477K(1056768K)],0.0050335 secs] [Times: user=0.00 sys=0.00,real=0.00 secs] Heap PSYoungGen total 76288K,used 655K [0x000000076b100000,0x0000000770600000,0x00000007c0000000) eden space 65536K,1% used [0x000000076b100000,0x000000076b1a3ee8,0x000000076f100000) from space 10752K,0% used [0x000000076f100000,0x000000076f100000,0x000000076fb80000) to space 10752K,0% used [0x000000076fb80000,0x000000076fb80000,0x0000000770600000) ParOldGen total 175104K,used 661K [0x00000006c1200000,0x00000006cbd00000,0x000000076b100000) object space 175104K,0% used [0x00000006c1200000,0x00000006c12a5498,0x00000006cbd00000) Metaspace used 3484K,capacity 4496K,committed 4864K,reserved 1056768K class space used 385K,capacity 388K,committed 512K,reserved 1048576K ? 可以看到? 下面的结果,每个对象的构造方法创建的byte? 就创建了2M左右的数据,但是经过垃圾收集过后,剩余 808k 证明两个对象都被回收了,? ?JDK 1.8 使用的是 parallel 46203K->808K(76288K)] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |