Java JVM垃圾回收确定垃圾的两种方式,GC Root

文章目录

前言

对于Java两种确定对象为可回收的两种方式,予以记录!

一、如何确定是垃圾?

内存中已经不再被使用到的空间就是垃圾

  • 引用计数法
  • 根可达路径法

引用计数法

根可达路径法

枚举根节点做可达性分析(根搜索路径)

二、GC Root

1、以下可作为GC Root对象

  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象。
  2. 方法区中(1.8称为元空间)的类静态属性引用的对象,一般指被static修饰的对象,加载类的时候就加载到内存中。
  3. 方法区中的常量引用的对象。
  4. 本地方法栈中的JNI(native方法)引用的对象。

2、判断可回收:GC Root不可达

此对象到GCRoot对象没有引用链,此对象到GCRoot对象再也找不到一条可达路径

在可达性分析法中不可达的对象,它们暂时处于"缓刑阶段",要真正宣告一个对象死亡,至少要经历两次标记过程;

3、真正宣告对象死亡需经过两次标记过程(重要)

可达性分析法中不可达的对象被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行 finalize 方法

当对象没有覆盖 finalize 方法,或 finalize 方法已经被虚拟机调用过时,虚拟机将这两种情况视为没有必要执行。

被判定为需要执行的对象将会被放在一个队列中进行第二次标记,除非这个对象与引用链上的任何一个对象建立关联,否则就会被真的回收。

相关推荐
神仙别闹19 分钟前
基于 C++ 实现两个有序链表序列的交集
java·c++·链表
传奇开心果编程1 小时前
【Rust入门知识点学与练】第21课:Trait 进阶 Advanced Traits
开发语言·学习·rust
新时代牛马1 小时前
字符设备驱动完整篇:从 cdev_add、file_operations 到chrdev_open 与排障
开发语言·python
swordbob1 小时前
ReentrantLock 与 AQS 完整学习手册
java·开发语言
m0_587383002 小时前
全民健身解决方案软件开发实战:从架构设计到落地指南
java·spring boot·spring·架构·需求分析
白山编程大哥2 小时前
Java OutputStreamWriter 详解:从字符到字节的桥梁
java·开发语言·python
shmily麻瓜小菜鸡3 小时前
JavaScript / TypeScript 易踩坑知识点 —— 异步编程类
开发语言·javascript·typescript
一技安身3 小时前
【信创】Docker‑Compose V2 两种离线部署(独立模式、插件模式)简易教程
java·docker·eureka
七夜zippoe3 小时前
为什么 2026 年每个 Java 团队都该懂 AI Agent
java·开发语言·人工智能
znnnk4 小时前
【Python】GUI 开发从入门到实战(三):PyQt/PySide 进阶之路
开发语言·python·pyqt