其他分享
首页 > 其他分享> > 垃圾回收机制点睛4问

垃圾回收机制点睛4问

作者:互联网

1.触发垃圾回收的条件

2.垃圾回收流程

3.对象进入老年代的场景

对象首次创建会被放置在新生代的eden区

对象进入老年代主要有下面三种方式:

4.对象存活判定

由于程序计数器、栈、本地方法栈都是线程独享,其占用的内存是随线程结束而回收。而Java堆和方法区则不同,线程共享,是GC的所关注的部分。

引用计数算法

给对象添加一个引用计数器,当有一个地方引用对象是计数器加1,当引用失效是计数器减1,当该对象的计数器为0时表示可以回收。

可达性分析算法

从GC Roots对象作为起点向下搜索,当一个对象不在GC Roots的引用链路中时,该对象可以回收。
GC Roots对象包含:方法区静态属性引用的对象、栈中引用的对象、本地方法栈中Native方法引用的对象、常量引用的对象。

从GC Roots开始,把所有可以搜索得到的对象标记为存活对象,固定可作为GC Roots的对象包括以下几种:·
v 在虚拟机栈(栈帧中的本地变量表)中引用的对象,譬如各个线程被调用的方法堆栈中使用到的参数、局部变量、临时变量等。·
v 在方法区中类静态属性引用的对象,譬如Java类的引用类型静态变量。·在方法区中常量引用的对象,譬如字符串常量池(String Table)里的引用。
v 在本地方法栈中Native方法引用的对象。
v Java虚拟机内部的引用,如基本数据类型对应的Class对象,一些常驻的异常对象(比如NullPointExcepiton、OutOfMemoryError)等,还有系统类加载器。
v 所有被同步锁(synchronized关键字)持有的对象。

标签:Eden,对象,回收,点睛,gc,垃圾,GC,引用
来源: https://blog.csdn.net/qq_38011415/article/details/121461161