六、垃圾回收_判断对象是否存活算法_引用计数法详解
时间:2022-07-26
本文章向大家介绍六、垃圾回收_判断对象是否存活算法_引用计数法详解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
引用计数法:
在对象中添加一个引用计数器,当有地方引用对象的时候,引用计数器的值就+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)]
IDEA 配置JVM 参数的地址
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- IntelliJ IDEA 2020.2激活破解教程
- Java String 源码分析
- Java ArrayList 源码
- Java8 HashMap 源码分析
- 数据分析方法论-统计学内容学习
- 同步与异步 Python 有何不同?
- 非线性方程组求解迭代算法&图像寻初始值讲解
- MyBatis笔记
- 网络工程师提高篇 | 路由重发布你了解多少?从原理到配置,瑞哥带你学习一波!
- Python 为什么不支持 switch 语句?
- 2019河南科技学院发现杯
- 排序算法之希尔排序
- 排序算法之快速排序
- 干货 | Oracle数据库操作命令大全,满满的案例供你理解,收藏!
- 【2万字长文】深入浅出主流的几款小程序跨端框架原理