JVM的垃圾回收算法.pdf
立即下载
没身份别烦我
2025-05-14
对象
算法
回收
垃圾
引用
标记
User
技术
交流
59898801
398.7 KB
浪尖 qq 技术交流群 459898801 224209501
浪尖 qq 技术交流群 459898801 224209501
JVM 的垃圾回收算法
一,如何判断对象已经消亡
1,引用计数算法
一个对象如果没有任何引用指向它,就可认为该对象已经”消亡“,这种方法有个
缺点就是无法检测到引用环的存在。
算法特点
1. 需要单独的字段存储计数器,增加了存储空间的开销;
2. 每次赋值都需要更新计数器,增加了时间开销;
3. 垃圾对象便于辨识,只要计数器为 0,就可作为垃圾回收;
4. 及时回收垃圾,没有延迟性;
5. 不能解决循环引用的问题;
2,根搜索算法
Java 使用根搜索算法回收垃圾,该算法的基本原理:定义一系列名为 GC Roots 的
对象作为起点,从起点向下搜索,搜索所走过的路径称为引用链。
当一个对象到 GC Roots 没有任何引用链相连,则说明该对象不可用,这时 Java 虚
拟机可以对这些对象进行回收。
Java虚拟机将以下对象定义为 GC Roots :
1), Java 虚拟机栈中引用的对象:比如方法里面定义这种局部变量 User user=
new User();
2),静态属性引用的对象:比如 private static User user = new User();
3),常量引用的对象:比如 private static final User user = new User();
4),本地方法栈中引用的对象
二,常用的垃圾回收算法
1,标记-清楚算法。
该算法包含标记和清楚两个阶段:
首先是标记处所有需要回收的垃圾对象,标记完成之后统一进行回收处理。
该算法主要不足:
A),一个是效率问题。标记和清楚两个过程的效率都不高。
B),一个是空间的问题。标记清楚之后会导致大量不连续的内存碎片。空间碎片过
多会导致在程序运行过程中需要分片大量内存的时候无法找到满足连续内存而不得不
提前出发另一次垃圾回收动作。标记-清除算法的执行过程如下图:
2,复制算法
此算法把内存划分为相等大小的两个区域,每一只使用其中一个,回收过程中将存活的
浪尖 qq 技术交流群 459898801 224209501
浪尖 qq 技术交流群 459898801 224209501
对象全部
对象/算法/回收/垃圾/引用/标记/User/技术/交流/59898801/
对象/算法/回收/垃圾/引用/标记/User/技术/交流/59898801/
-->