GC对象的判定方法

Visual VM 定位OOM,FullGC使用方法 Visual VM 定位OOM使用方法 阅读详情

JVM03-GC对象的判定方法

判断一个对象是否存活有两种方法:

  • 引用计数法
      所谓引用计数法就是给每一个对象设置一个引用计数器,每当有一 个地方引用这个对象时,就将计数器加一,引用失效时,计数器就减一。当一个对象的引用计数器为零时,说明此对象没有被引用, 也就是“死对象”,将会被垃圾回收.
      引用计数法有一个缺陷就是无法解决循环引用问题,也就是说当对象 A 引用对象 B,对象 B 又引用者对象 A,那么此时 A、B 对象的引用计数器都不为零,也就造成无法完成垃圾回收,所以主流的虚拟机都没有采用这种算法。
    引用计数法

  • 可达性算法(引用链法)
      该算法的思想是:从一个被称为 GC Roots 的对象开始向下搜索,
    如果一个对象到 GC Roots 没有任何引用链相连时,则说明此对 象不可用。
      在 Java 中可以作为 GC Roots 的对象有以下几种:

    • 虚拟机栈中的引用的对象
    • 方法区类静态属性引用的对象
    • 方法区常量池引用的对象
    • 本地方法栈JNI引用的对象
      可达性算法

  虽然这些算法可以判定一个对象是否能被回收,但是当满足上述条件时,一个对象并不一定会被回收。
  当一个对象不可达 GC Root 时,这个对象并不会立马被回收,而是出于一个死缓的阶段,若要被真正的回收需要经历两次标记.
两次标记

  • 如果对象在可达性分析中没有与 GC Root 的引用链,那么此时就 会被第一次标记并且进行一次筛选,筛选的条件是是否有必要执行 finalize() 方法。
  • 当对象没有覆盖 finalize() 方法或者已被虚拟机 调用过,那么就认为是没必要的。 如果该对象有必要执行 finalize() 方法,那么这个对象将会放在一个称为 F-Queue 的对 队列中,虚拟机会触发一个 Finalize() 线程去执行,此线程是低优先级的,并且虚拟机不会承诺一直等待它运行完,这是因为如果 finalize() 执行缓慢或者发生了死锁,那么就会造成 F-Queue 队列一直等待,造成了内存回收系统的崩溃。GC 对处于 F-Queue 中的对象进行第二次被标记,这时,该对象将被移除” 即将回收” 集合,等待回收。
【5G NB-IoT NTN】3GPP R17 NB-IoT NTN介绍_nbiot ntn 你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!” />你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!更多资料点击此处获qu!! 阅读详情

相关推荐

硬件基础(4):(6)高精度ADC设计中模拟地与数字地的划分与连接

在实际 PCB 设计中,**接地与布线**对于获得干净的参考电压和高精度 ADC 测量至关重要。下面详细阐述**如何在硬件层面减少数字噪声耦合到模拟电路、保障参考电压的稳定性**。

FCZlll的博客 2645

JVM GC之一找出不可达对象并回收

JAVA运行时数据区域 1、程序计数器:当前线程所执行的字节码的行号指示器。一个处理器只会执行一条线程中的指令,为了线程切换后能回复到正确的执行位置,所以每条线程都需要一个独立的计数器。各条线程之间互不影响,独立存储,属于‘线程私有’内存。 2、java虚拟机栈:描述的是JAVA方法执行的内存模型:每个方法执行的时候都会创建一个栈帧用于存储局部变量表、操作数栈、...

dianpenluo2033的博客 272

项目管理面试常见问题及答案

1. 项目管理软件工具知识,   2. 编制项目计划的技术,   3. 人员管理技能   4. 沟通技能   5. 原理体系知识(标生命周期和项目管理)。 项目管理软件工具知识   问题1:工期和工作量之间的差异是什么?   答案1:工期是商业/日历上的天数,与人数和工作量无关。工作量是与日历天数无关的人的工作。例如:   一天的工作量对于一个一只花50%在时间在上面的人来说,他的工期就是两天。...

okbin1991的博客 2840

第十七章:运行时特性-gc:垃圾回收器-查找无法回收的对象引用

17.6.3 查找无法回收的对象引用 要在垃圾列表中查找哪个对象包含另一个对象的引用,这比查看一个对象引用了什么要麻烦一些。因为查找引用的代码本身也需要包含引用,所以需要忽略一些包含引用的对象(引用者)。下面这个例子创建了一个图环,然后处理Graph实例,并删除"父"节点中的引用。 import gc import pprint class Graph: def __init__(s...

编程菜鸟iglesias的博客 358

OneNET物联网平台实战:从零搭建到双向数据通信测试

本文提供了一份详细的OneNET物联网平台实战指南,从零开始讲解平台搭建与设备创建,并重点演示了如何通过MQTT协议实现设备数据上报与云端命令下发的双向数据通信测试。通过模拟设备连接与数据交互,帮助开发者快速理解物联网核心通信流程。

weixin_29306571的博客 350

Jupyter Lab 无法启动 Kernel 问题排查与解决总结

使用 curl,telnet,或 Python websocket-client 库可以本地模拟 WebSocket 握手行为,帮助分析服务端响应状态。避免使用 http:// + ws:// 组合方式部署 Jupyter Lab,特别是在远程或跨域访问场景。建议统一采用 https:// + wss:// 方式部署,确保浏览器信任并兼容。确认 WebSocket 已升级为 wss://,内核可正常启动。但在远程访问时,浏览器出于安全策略,默认拒绝 ws:// 协议。

weixin_43866043的博客 1857

java对象不被gc回收的情况,单例对象无法被回收的原因 - gc回收机制

单例对象无法被回收的真正原因要从java垃圾回收器开始说起JAVA垃圾对象判断准则Java中判断一个对象是否可以被回收是根据“可达性”来判定的。可达性:以一系列的称为 “GC Roots”的对象作为起始点,然后向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,即可视为垃圾。GC Roots点包含:虚拟机...

weixin_33021323的博客 8324

linux redis7 完整的集群搭建过程

一。安装: 1.1 说明: Redis官方只提供了源码,并没有提供经过编译之后的安装包。 因此,安装Redis,要先编译、后安装。(即源码安装方式) 注意:需要联网安装 1.2 安装编译的工具: yum install gcc gcc-c++ -y 1.3 下载tar包,上传到linux服务器,解压配置环境变量 1.4 cd +解压的目录下:编译 make 注意:如果编译失败,请重新进行解压编译,...

m0_38028438的博客 719

怎么排查内存溢出的问题

在上一篇文章中我分享了内存溢出的问题,也写了一个死循环 CUP 飙高的案例,今天我们来看看内存溢出该怎么排查。 jvisualvm 下面用 JDK 自带的工具 jvisualvm 来个小伙伴操作一遍,在命令行中搜索 jvisualvm 就会出来了。 而 jvisualvm 的操作界面是这样的: 下面我们还是用上一遍文章中的案例: public static void main(String[] args) { Map map = System.getProperties();

养歌的博客 4472

华为OD机试真题2025双机位B卷 Python&JS 实现【朋友圈个数】

给定一组朋友关系,统计一下该朋友关系网中的朋友圈个数。 朋友圈的定义:一个朋友圈至少由3个朋友组成,且要求同一个朋友圈中的任意两个人都具有直接的朋友关系。 输入描述 输入一个朋友关系列表,如 Fiends =A.B],[A.C],IB,DI,其中的每一个元素 Friendsi表示 Friends[i][0)和 Friends [i][1] 是朋友关系 先输入一个数字 N 代表关系的总数,后面每条关系一行,两个成员以逗号分隔

MISAYAONE的博客 562

手撕Lua字节码:从黑盒到透明

lua 字节码 怎么‘手撕’一个 chunk 看看里面啥样?我手里有一个.luac或出来的二进制字节码,想知道里面到底是什么结构、哪些字段、有哪些指令,怎么一步一步“拆箱”,从一个黑盒变成有迹可循的东西?也就是:不满足于只会loadpcall而是想亲眼看看一个 chunk 内部长啥样,甚至写点工具把它解析出来。这篇就用带你从“拿到一坨.luac不搞高深玄学,尽量让你看完就能自己动手。注:以 Lua 5.3/5.4 为主,细节各版本略有不同,但大体套路是一致的。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 98

如何判断一个对象是否存活?(或者GC对象的判定方法)?

这个问题,面试被问到的概率还是很大的。以下关于如何判断一个对象是否存活的回答,完全参照《深入理解Java虚拟机》一书,有需要的可以看书学习。以下是题目解析 判断对象是否存活的算法包括: 引用计数算法 可达性分析算法 问题的回答就是通过引用计数算法或者可达性分析算法去判断一个对象是否存活,下面开始具体描述这两种算法。 引用计数算法(Reference Countin...

知识分享 2688

AutoSAR配置与实践(深入篇)5.4 OS原理(下 )- 内存保护(MPU)

ECU可能由内部模块、第三方模块等各模块集成的。需求对每个模块所定义的安全等级可能有差异,需要考虑不同安全等级的模块和代码间减少相互干扰,防止程序错误传播。可以理解为包含Task、Alarm、Counter、Schedule table、ISRs、Event等基本对象的容器,用于隔离Task/Alarm等,进行内存保护。

nihaoljq2010的博客 3536

【26期】如何判断一个对象是否存活?(或者GC对象的判定方法)?

程序员的成长之路互联网/程序员/技术/资料共享关注阅读本文大概需要 3分钟。来自:www.jianshu.com/p/09a574dcd5df这个问题,面试被问到的概率还是很大的。以...

良月柒 702

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

如和判断一个对象是否存活?(或者 GC 对象的判定方法)

如果该对象有必要执行 finalize()方法,那么这个对象将会放在一个称为 F-Queue 的对队 列中,虚拟机会触发一个 Finalize()线程去执行,此线程是低优先级的,并且虚拟机不会承 诺一直等待它运行完,这是因为如果 finalize()执行缓慢或者发生了死锁,那么就会造成 FQueue 队列一直等待,造成了内存回收系统的崩溃。所谓引用计数法就是给每一个对象设置一个引用计数器,每当有一个地方引用这个对象 时,就将计数器加一,引用失效时,计数器就减一。 本地方法栈 JNI 引用的对象。

SKCQTGZX的博客 238

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

03-GC对象的两种判定方法(如何判断对象已死)?

为了解决引用计数法的循环引用问题,Java 使用了可达性分析的方法。通过一系列的“GC roots”对象作为起点搜索。如果在“GC roots”和一个对象之间没有可达路径,则称该对象是不可达的。要注意的是,不可达对象不等价于可回收对象,不可达对象变为可回收对象至少要经过两次标记过程。两次标记后仍然是可回收对象,则将面临回收。指的是如果某个地方引用了这个对象就+1,如果失效了就-1,当为 0 就会回收, 但是 JVM 没有用这种方式,因为无法判定相互循环引用(A 引用 B,B 引用 A)的情况。

鸣鼓ming的博客 266

JVM---如何判断一个对象是否存活?(或者 GC 对象的判定方法)?

判断一个对象是否存活有两种方法: 1. 引用计数法 所谓引用计数法就是给每一个对象设置一个引用计数器, 每当有一个地方引用这个对象时,就将计数器加一,引用失效时,计数器就减一。当一个对象的引用计数器为零时,说明此对象没有被引用, 也就是“死对象”,将会被垃圾回收. 引用计数法有一个缺陷就是无法解决循环引用问题, 也就是说当对 象 A 引用对象 B,对象 B 又引用者对象 A,那么此时 A、B 对象的引用计数器都不为零,也就造成无法完成垃圾回收,所以主流的虚拟机都没有采用这种算法。 2. 可达性算法(引用链法

weixin_43185348的博客 708

26面试常问:如何判断一个对象是否存活?(或者GC对象的判定方法)?

这个问题,面试被问到的概率还是很大的。以下关于如何判断一个对象是否存活的回答,完全参照《深入理解Java虚拟机》一书,有需要的可以看书学习。以下是题目解析 判断对象是否存活的算法包括: 引用计数算法 可达性分析算法 问题的回答就是通过引用计数算法或者可达性分析算法去判断一个对象是否存活,下面开始具体描述这两种算法。 引用计数算法(Reference Counting) 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器加1;当引用失效时,计数器值减1;任...

AI乔治 511

008 JVM中如何判断一个对象是否存活?(或者GC对象的判定方法)

判断一个对象是否存活有两种方法:1. 引用计数法 所谓引用计数法就是给每一个对象设置一个引用计数器,每当有一个地方引用这个对象时,就将计数器加一,引用失效时,计数器就减一。当一个对象的引用计数器为零时,说明此对象没有被引用,也就是“死对象”,将会被垃圾回收. 引用计数法有一个缺陷就是无法解决循环引用问题,也就是说当对象A引用对象B,对象B又引用者对象A,那么此时A,B对象的引用计数器都不为零,也就造成无法完成垃圾回收,所以主流的虚拟机都没有采用这种算法。 2.可达性算法(引用链法) 该算法的思想是:从一个

从2026-09-21开始专注于AI,以前是后端研发、大数据研发等 390

【跳槽面试】如何判断一个对象是否存活?(或者GC对象的判定方法)?

这个问题,面试被问到的概率还是很大的。以下关于如何判断一个对象是否存活的回答,完全参照《深入理解Java虚拟机》一书,有需要的可以看书学习。以下是题目解析判断对象是否存活的算法包括:引用计数算法可达性分析算法问题的回答就是通过引用计数算法或者可达性分析算法去判断一个对象是否存活,下面开始具体描述这两种算法。例如Object-C,Python语音使用引用计数算法进行内存管理。Java虚拟机没有选用引用计数器算法来管理内存,其中最主要的原因是它很难解决对象之间相互循环引用的问题。

技术分享 928

26. 如何判断一个对象是否存活?(或者GC对象的判定方法)?

如何判断一个对象是否存活?(或者GC对象的判定方法)?

优快云全栈领域优秀博主,阿里云博客专家,工信部权威认证物联网技术开发工程师,曾30分钟高分通过C语言二级,两天手撸代码完成EasyX飞机大战,靠接软件私活一个月换苹果电脑 256

26.如何判断一个对象是否存活(GC对象的判定方法)

(1)引用计数算法 给对象添加一个引用计数器,每当有一个地方引用它时,计数器加1;当引用失效时,计数器减1;任何时刻计数器为0的对象是不能被引用的。 但是某些代码会出现对象之间互相循环引用的问题。对象循环引用代码实例: public class ReferenceCountingGC { public Object instance = null; public static void testGC() { ReferenceCountingGC objA = new Re

wpr1812的博客 575

Java面试:垃圾收集方法、GC 对象判定方法、栈堆

引用计数法有一个缺陷就是无法解决循环引用问题, 也就是说当对象 A 引用对象 B, 对象 B 又引用者对象 A, 那么此时 A,B 对象的引用计数器都不为零, 也就造 成无法完成垃圾回收, 所以主流的虚拟机都没有采用这种算法。所谓引用计数法就是给每一个对象设置一个引用计数器, 每当有一个地方引用这个 对象时, 就将计数器加一, 引用失效时, 计数器就减一。当一个对象的引用计数器 为零时, 说明此对象没有被引用, 也就是“死对象”,将会被垃圾回收.a) 效率低速度慢, 需要移动对象, 但不会产生碎片。

zjjcchina的博客 73

.net 把一个对象赋值给一个参数_【26期】如何判断一个对象是否存活?(或者GC对象的判定方法)?...

这个问题,面试被问到的概率还是很大的。以下关于 如何判断一个对象是否存活 的回答,完全参照《深入理解Java虚拟机》一书,有需要的可以看书学习。以下是题目解析判断对象是否存活的算法包括:引用计数算法可达性分析算法问题的回答就是通过引用计数算法或者可达性分析算法去判断一个对象是否存活,下面开始具体描述这两种算法。引用计数算法(Reference Counting)给对象中添加一个引用计数器,每当有一...

weixin_39535349的博客 76

蚂蚁金服面试必问:如何判断一个对象是否存活?(或者GC对象的判定方法)?

如果对象的引用被置为null,只是断开了当前线程栈帧中对该对象的引用关系,而垃圾收集器是运行在后台的线程,只有当用户线程运行到安全点(safe point)或者安全区域才会扫描对象引用关系,扫描到对象没有被引用则会标记对象,这时候仍然不会立即释放该对象内存,因为有些对象是可恢复的(在 finalize方法中恢复引用 )。finalize()方法是对象逃脱死亡命运的最后一次机会,稍后GC将对F-Queue中的对象进行第二次小规模的标记,如果对象这个时候,未被重新引用,那它基本上就真的被回收了。

Java后端架构V 170

判断对象是否为空_面试:如何判断一个对象是否存活?(或者GC对象的判定方法)?...

这个问题,面试被问到的概率还是很大的。以下关于 如何判断一个对象是否存活 的回答,完全参照《深入理解Java虚拟机》一书,有需要的可以看书学习。以下是题目解析判断对象是否存活的算法包括:引用计数算法可达性分析算法问题的回答就是通过引用计数算法或者可达性分析算法去判断一个对象是否存活,下面开始具体描述这两种算法。引用计数算法(Reference Counting)给对象中添加一个引用计数器,每当有一...

weixin_39878247的博客 104
上一篇: JVM的类加载器与类加载过程
下一篇: Java中的锁升级
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值