什么是垃圾、为什么需要GC、早期的垃圾回收、Java垃圾回收机制、垃圾回收相关算法

1什么是垃圾?

垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。
如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。

2为什么需要GC?

在这里插入图片描述

3早期的垃圾回收

在这里插入图片描述

4Java垃圾回收机制

在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。

1自动内存管理,无需开发人员手动参与内存分配与回收,这样降低内存泄漏和内存溢出的风险。
2可以更专心的专注于业务开发。
3 弱化java开发人员在程序出现内存溢出时定位问题和解决问题的能力。
4我们就必须对这些“自动化”的技术实施必要的监控和调节。
在这里插入图片描述
其中,Java堆是垃圾收集器的工作重点。
从次数讲:频繁收集Young区;较少收集old区;基本不动perm区;

5垃圾回收相关算法

1标记阶段:引用计数算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2标记阶段:可达性分析算法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3对象的finalization机制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4清楚阶段:标记-清除算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5清除阶段:复制算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6清除阶段:标记-压缩算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7 三种算法的对比

在这里插入图片描述

8分代收集算法(具体问题具体分析)

在这里插入图片描述
在这里插入图片描述

9增量收集算法

在这里插入图片描述
在这里插入图片描述

10分区算法

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zs18753479279/article/details/114515917