垃圾回收的工作:当它工作时,一面回收空间,一面使堆中的对象紧凑排列。
Java虚拟机采用一种自适应的垃圾回收技术。
做法一:停止——复制。
先将所有存活的对象随机分配到堆中,然后再停止程序运行,对分散的存活的对象从当前堆复制到新堆,使其紧凑排列,这样就可以简单、直接的分配新的空间。
做法二:标记——清扫。
遍历所有的引用,找到所有存活的对象,每当找到一个存活的对象,就会给这个对象投一个标记,这个过程中不会回收任何的垃圾,当遍历完全部的对象,才会启动清理。
自适应:如果对象都很稳定,垃圾回收器的效率降低的话,会从停止——复制切换到标记——清扫方式,如果堆空间出现很多碎片的话,就会切回停止——复制方式。