JVM中的GC如何判断对象可以被回收

ops/2024/12/23 4:37:51/

引用计数法:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收,

可达性分析法:从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引|用链相连时,则证明此对象是不可用的,那么虚拟机就判断是可回收对象。

引用计数法,可能会出现A引用了B, B又引用了A,这时候就算他们都不再使用了,但因为相互引用计数器=1永远无法被回收。

GC Roots的对象有:

●虚拟机栈(栈帧中的本地变量表)中引用的对象

●方法区中类静态属性引用的对象

●方法区中常量引用的对象

●本地方法栈中JN(即一般说的Native方法)引用的对象

可达性算法中的不可达对象并不是立即死亡的,对象拥有一次自我拯救的机会。 对象被系统宣告死亡至少要经历两次标记过程:第一次是经过可达性分析发现没有与GC Roots相连接的引用链,第二次是在由虚拟机自动建立的Finalizer队列中判断是否需要执行finalize()方法。

当对象变成(GC Roots)不可达时,GC会判断该对象是否覆盖了finalize方法,若未覆盖,则直接将其回收。否则,若对象未执行过finalize方法,将其放入F-Queue队列,由一低优先级线程执行该队列中对象的finalize方法。 执行finallize方法完毕后,GC会再次判断该对象是否可达,若不可达,则进行回收,否则,对象“复活

每个对象只能触发一次finalize()方法

由于finalize0方法运行代价高昂,不确定性大,无法保证各个对象的调用顺序,不推荐大家使用,建议遗忘它。


http://www.ppmy.cn/ops/21446.html

相关文章

JAVA: Spring Boot加载 Shiro 配置 >>找不到 SecurityManager

在 Spring Boot 应用中集成和配置 Apache Shiro 通常涉及创建一个配置类来设置 SecurityManager,以及定义 Shiro 的 Web 支持和必要的安全策略。下面是使用 Spring Boot 配置 Apache Shiro 的步骤: ### 1. 添加依赖 首先,确保在你的 pom.xml…

深入解析CSS3 @font-face 规则:自定义与网络字体全面指南

CSS3的font-face规则为网页设计开辟了全新的天地,允许开发者引入自定义字体以及网络字体资源,极大丰富了网页的视觉表现力与品牌一致性。本文不仅将详细解析font-face规则的工作原理、关键属性,还将指导您如何在实际项目中应用自定义字体&…

VPN的基本概念

随着互联网的普及和应用的广泛,网络安全和隐私保护越来越受到人们的关注。在这个信息爆炸的时代,我们的个人信息、数据通信可能会受到各种威胁,如何保护自己的隐私和数据安全成为了一个迫切的问题。而VPN(Virtual Private Network…

Redis(单/多)线程

一、 Redis 单线程 与 多线程 怎么说? (1)重要的版本迭代 redis4 之前仅支持 单线程, redis 4之后慢慢 支持多线程, 直到redis6/7后才稳定 (2)redis 的 工作线程 是 单线程的 &#xff08…

Rancher 应用商店离线环境使用

前言 Rancher (v2.5 ) 应用商店可以方便的安装 Helm3 构建的应用,并且支持私有 helm 应用仓库,方便了内网离线环境下的使用。本文以内网离线环境为前提、以 MySQL 5.7.43 版本为应用举例,从零开始手把手教你如何制作并应用。 1、环境准备 1.…

白平衡简介

文章目录 白平衡的概念白平衡的调节常见的白平衡模式 白平衡的概念 白平衡是指摄影、摄像和显示技术中的一项重要概念,用于调节图像中的白色或中性灰色的色彩,使其看起来在不同光源条件下都是准确的白色或灰色。白平衡的主要目的是确保图像的色彩准确性…

【八股】Spring篇

why Spring? 1.使用它的IOC功能,在解耦上达到了配置级别。 2.使用它对数据库访问事务相关的封装。 3.各种其他组件与Spring的融合,在Spring中更加方便快捷的继承其他一些组件。 IoC和DI 👉IOC是Inversion of Control的缩写,“…

Java 网络编程之TCP(二):基于BIO的聊天室

在上一篇【Java 网络编程之TCP(一):基于BIO】中,介绍Java中I/O和TCP的基本概念,本文在上文的基础上,实现一个基本的聊天室的功能。 聊天室需求描述: 聊天客户端:发送消息给所有其他客户端,接收…