java虚拟机采用的是一种“自适应的、分代的、停止—复制,标记—清扫”式的垃圾回收技术。
停止—复制机制:
首先暂停程序的运行,然后将所有存活的对象从当前堆复制到另一堆,没有复制的全是垃圾。当对象被复制到新堆时,他们是紧凑排列的。
这种方式需要2个堆,从而得维护比实际大一倍的空间。
程序在进入稳定状态时,可能产生的垃圾较少,但复制器仍然会将所有内存复制到另一处。
标记—清扫机制:
遍历所有的引用,标记每一个存活的对象。全部标记工作完成时,没有标记的对象将会被释放。所以剩下的空间是不连续的。同样,标记—清扫也必须在程序暂停的情况下进行。
分代机制:
分代算法把内存分为几块,根据不同块内的对象特点采用不同的垃圾回收机制。新建的对象放入新生代中,新生代中的对象经过几次垃圾回收后,存活的对象放入老年代中。所以老年代中的对象都是较为稳定、生命周期长的对象,再使用停止—复制的方法就不合适了,应采用标记—清扫的方法来进行老年代的垃圾回收。