JVM 垃圾回收原理
1、什么是垃圾?
在 JVM 进行垃圾回收之前,首先就是判断哪些对象是垃圾,也就是说,要判断哪些对象是可以被销毁的,其占有的空间是可以被回收的。根据 JVM 的架构划分,我们知道, 在 Java 世界中,几乎所有的对象实例都在堆中存放,所以垃圾回收也主要是针对堆来进行的。
在 JVM 的眼中,垃圾就是指那些在堆中存在的,已经“死亡”的对象。而对于“死亡”的定义,我们可以简单的将其理解为“不可能再被任何途径使用的对象”。垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制,释放宝宝贵的内存资源。
jvm组织架构图:
2、如何回收?
从线程栈帧中的局部变量,或者方法区的静态变量出发,将这些变量引用的对象进行标记,看这些被标记的对象是否引用了其他对象,继续进行标记,所有被标记过的对象都是被使用的对象,二那些没有被标记的对象就是可回收的垃圾对象了。
3、垃圾回收的算法种类
标记-清除算法
复制算法
标记-整理算法
分代收集算法
4、常见的垃圾收集器
Serial收集器(复制算法)
Serial Old收集器(标记-整理算法)
ParNew收集器 - 新生代收集器
Parallel Scavenge收集器-并行收集器
CMS收集器
G1收集器
评论