java虚拟机之垃圾回收机制

时间:2022-06-17 00:03:10

垃圾回收的本质是回收那些不会再被使用的对象,什么样的对象不会再被使用?如果从根对象开始所有的引用链都不能引用到该对象,那么该对象就不会再被使用,因为无法再次引用到改对象。

复制算法:

讲内存按容量分成大小相等的两块,每次只使用一块,当这一块内存用完了,就讲还存活这的对象复制到另一块上面。这种算法常用来回收新生代,实际中会将内存分为一块较大的eden空间和两块较小的servivor空间,每次使用eden和其中一块survivor,当回收时,将eden和survivor中还存活着的对象一次性复制到另一块survivor空间上,最后清理掉eden和刚刚使用过的survivor空间。一般eden和survivor的大小比例为8:1.如果回收时,survivor空间不足以存放所有的存活对象,则需要依赖老年代内测进行分配。

标记整理算法

复制算法在对象存活率较高的老年代并不适用,因为会进行较多的复制操作和浪费大量内存空间。老年代常使用标记整理算法,首先对存活的对象进行标记,然后将存活对象都向一端移动,然后直接清理掉端标界以外的内存。

垃圾回收器:

serial收集器和serial old收集器,早期的垃圾收集器,以单线程方式进行垃圾手机。

ParNew收集器和ParNew old收集器,实际上是Serial收集器的多线程版本。