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 方法已经被虚拟机调用过时,虚拟机将这两种情况视为没有必要执行。

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

相关推荐
白帽攻防录8 分钟前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
聚美智数13 分钟前
智能结构化识别-图片结构解析-图像结构化解析-照片结构化解析
android·java·数据库
十年Java程序媛23 分钟前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
我是人✓35 分钟前
SpringBoot静态资源映射揭秘
java·spring boot·后端
2603_965148111 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
金銀銅鐵1 小时前
[Java] 借助GUI展示class文件的内容(v1.0版本)
jvm·后端·ai编程
土豆.exe1 小时前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存
xixiaoyunya2 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
学逆向的2 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
小坏讲微服务2 小时前
刚发布一个月的JDK 27,为什么我建议你立刻升级?
java·开发语言·spring boot·spring·架构·求职招聘·springboot4