JVM判断对象是否存活
- 引用计数法
- 可达性分析算法
引用计数法
给对象添加一个引用计数器,每当有一个地方引用,计数器就加1,当引用失效,计数器减1,计数器为0的对象没有被使用,Java中没有使用引用计数法,原因是引用计数法无法解决对象间的循环引用问题。
package com.rumenz;
public class Testy {public Object instance = null;public static void main(String[] args) throws InterruptedException {Testy objA = new Testy();Testy objB = new Testy();objA.instance = objB;objB.instance = objA;objA = null;objB = null;//假设在这行发生了gc,objA和objB是否被回收System.gc();//拖延时间查看堆内存对象Thread.sleep(50000);}
}
VM设置参数
-XX:+PrintGCDetails -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -XX:NewSize=10M -XX:MaxNewSize=10M
-XX:+PrintGCDetails 启用日志
-XX:-UseAdaptiveSizePolicy 禁用动态调整,使SurvivorRatio可以起作用
-XX:SurvivorRatio=8 设置Eden:Survivior=8
-XX:NewSize=10M -XX:MaxNewSize=10M 设置整个新生代的大小为10M
使用jmap -histo pid
查看堆内的对象
断开栈和堆对象的引用
objA = null;
objB = null;
jmap -histo pid
堆中未发现
com.rumenz.Testy
对象。虽然objA
和objB
存在相互引用,但是由于栈和堆对象没有了引用关系, 垃圾回收时将objA
和objB
回收掉,说明JVM虚拟机未使用引用计数法来判断对象是否存活。
未断开栈和堆对象的引用
//objA = null;
//objB = null;
jmap -histo pid
堆中发现com.rumenz.Testy
对象。因为对象还在使用着。
可达性分析算法
以GC Root
对象为起点,从这些对象为起点,往下搜索,走过的路径为引用连,当一个对象到GC Roots没有任何引用连引用,则证明此对象没有被用到,将会被JVM判定为垃圾。
JDK1.8中什么是GC Root
- 虚拟机栈中(栈帧中的本地变量表)中引用的对象。
- 元数据区类静态属性引用的对象
- 元数据区常量引用的对象
- 本地方法栈(Native)方法引用的对象
相对于引用计数法,可达性分析避免了循环导致的问题。同时具备执行搞笑的特点。也是JVM采用的标记算法。
JVM判断对象是否存活相关推荐
- 深入理解JVM(三)——JVM之判断对象是否存活(引用计数算法、可达性分析算法,最终判定),Eclipse设置GC日志输出,引用
本文转载自https://blog.csdn.net/ochangwen/article/details/51406779 本文是基于周志明的<深入理解Java虚拟机> 堆中几乎存放着Ja ...
- JVM判断对象是否已死?
一.引用计数法 给对象添加一个引用计数器,但凡有一个地方引用它,就给计数器的值+1,引用失效就-1:任何时刻计数器为0的对象,不能再被使用了.主流的JVM中没有使用"引用计数法"来 ...
- java判断对象已经被回收_Java中JVM判断对象已死的基本算法分析
原标题:Java中JVM判断对象已死的基本算法分析 jvm中 有各种的垃圾收集器,每个收集器都有各自的算法. 但是一切的根本都需要找到找到应该被消除的对象,理解如何找到死亡对象才是理解垃圾收集器的基础 ...
- 垃圾回收器判断对象是否存活
转载自:http://blog.csdn.net/ochangwen/article/details/51406779 本文是基于周志明的<深入理解Java虚拟机> 堆中几乎存放着Java ...
- java中对象的生存期_深入理解Java虚拟机-判断对象是否存活算法与对象引用
我们知道Java中的对象一般存放在堆中,但是总不能让这些对象一直占着内存空间,这些对象最终都会被回收并释放内存,那么我们如何判断对象已经成为垃圾呢?这篇文章会提出两种算法解决这个问题.另外,本文还要谈 ...
- bat判断文件是否存在_BAT面试必问题系列:JVM判断对象是否已死和四种垃圾回收算法总结...
JVM系列: 面试题一:判断对象是否已死 判断对象是否已死就是找出哪些对象是已经死掉的,以后不会再用到的,就像地上有废纸.饮料瓶和百元大钞,扫地前要先判断出地上废纸和饮料瓶是垃圾,百元大钞不是垃圾.判 ...
- 如何判断对象是否存活之根搜索算法
根搜索算法有没有人了解过的,在垃圾回收机制里面判断对象存活,主要是使用根搜索算法进行实现的,根搜索算法可能稍微有点抽象,算法是怎么进行实现的,又叫GCRoots,类似于树形结构一样的,他怎么样进行实现 ...
- 如何判断对象是否存活之引用计数发
垃圾回收机制是怎么判断一个对象是否存活的,为什么要讲这个呢,这个讲完你就明白,新生代是怎么做晋升的,他的存活有几个方向点,垃圾回收对象是怎么判断存活的,哪几种,首先第一种引用计数法,根搜索法,GC r ...
- 三、垃圾收集之判断对象是否存活
2019独角兽企业重金招聘Python工程师标准>>> 一.引用计数算法 当有一个地方引用这个对象时,计数器加1 当引用失效时,计数器减1 当计数器为0时,则对象死亡,等待回收 二. ...
最新文章
- 国内42所一流大学综合排名出炉!清北之后谁是国内第三?
- 信息理论基础 周炯槃 常迥
- 某一列高度变化_高度近视,老了后会瞎吗?
- 草履虫纳米机器人_激光驱动的机器人大军!Nature:机器人尺寸小于 0.1 毫米,4 英寸晶圆可容纳 100 万个...
- java lombok
- 多功能复合机基于用户认证功能的实现过程详解
- 【转】如何在 Visual Studio 2019 中连接中国版 Azure
- jsp中获取list长度
- java记住用户名和密码_JAVA--高级基础开发Cookie实现记住用户名和密码
- Microsoft.NET Pet Shop 4.0各个模块之间的联系
- 【chrome插件】web版微信接入图灵机器人API实现自动回复
- Win7系统下解决VB6.0鼠标滚轮支持
- 什么是工业机器人,工业机器人的分类与特点
- CWE-476: NULL Pointer Dereference(空指针间接引用)
- 对话系统-口语理解-意图检测和槽填充:A Co-interactive Transformer for joint Slot Filling and Intent Detection
- Internet网络行为学
- 芝加哥大学计算机博士年薪,2020年芝加哥大学博士含金量
- 哈佛大学幸福课笔记一
- 撤销性CP-ABE方案研究现状总结 - 2021
- dva的用法_dva.js初探
热门文章
- 关于大小端、位域的一些概念详解
- 注意:不能将文件名叫做email.py,否则会报 ImportError: No module named mime.text
- 滨江学院 刘生 计算机网络考点知识点整理
- 1006. 换个格式输出整数 (15)-PAT乙级真题
- 蓝桥杯 ALGO-31算法训练 开心的金明(01背包,动态规划)
- 安装python时需要勾选_工业洗衣机安装时需要注意什么?
- 如何聊离职原因,向面试官展示自己的忠诚
- Window2003 IIS+MySQL+PHP+Zend环境配置
- Linux 文件夹和文件大小排序
- Unity3d面向英特尔 x86 平台的 Unity* 优化指南: 第 2 部分