引言
当提到Java虚拟机的时候,我们首先应该区分2件事情。一个是抽象的Java虚拟机规范,另一个是根据这个规范具体的实现。市面上有很多根据这个规范实现的虚拟机,比如jRockit、IBM J9、Hotspot等。那么在这篇文章中,我只介绍关于Hotspot虚拟机的行为,以及它里面提供的垃圾收集器。
什么是垃圾收集?
相信每一个现实中生活的人都知道什么是垃圾收集。顾名思义,就是找到没有用的东西(垃圾)并把它扔掉。但是,在JVM中的垃圾收集是完全相反的,它首先找到所有仍然使用的对象并标记下来,然后清理掉没有标记的垃圾。
那么对于一个垃圾收集器来说,它主要有三个工作需要完成:
- 分配内存
- 确保任何被引用的对象在内存中,不被垃圾收集器收集
- 释放不再使用的对象的内存
被引用的对象我们称它是活着的(live),不再被引用的对象我们称它为死的(dead),或垃圾。找到并释放这些垃圾的过程叫做垃圾收集。