Java入门之了解JVM(30)

如果对象经过第1次标记后没能够逃脱,那么GC就会进行第2次标记;这时就算对象本身重写了finalize(),但已经执行了1次了,所以连救命稻草就丢失了,这时对象就会被GC清除回收内存

垃圾回收算法

在目前JVM中使用的垃圾回收算法有以下3种:

1)标记-清除

从名字可以看出,该算法有两个步骤:标记 和 清除即先对“垃圾”进行标记,然后进行清除图片源自网络

Java入门之了解JVM

标记-清除算法的缺点就是造成内存的不连续,即内存碎片化,如上图所示2)复制

将内存一分为二,只使用其中的一半清除时,将存货的对象全部复制到未使用的一半,让后将使用了的那一半进行正块清除图片源自网络

复制算法虽然解决了标记-清除所在来的内存碎片化的现象,但可以在上图的得知,永远都只能使用一半,造成内存的浪费,这就是复制算法的缺点复制算法还有另外一个缺点,就是当内存中有较高存活率对象时,这种算法的效率就会降低,因为如果对象的存活率很高,即很多内存中很多对象都是存活的,那么复制这个操作的时间就相对延长了,因此造成效率降低,也所以,复制算法只适用与对象存活率不高的内存区域,如堆内存的Eden区3)标记-整理(标记-清除)

推荐阅读