何为垃圾?
什么是垃圾,垃圾指的是Java程序中已经没有使用的对象,这些对象占用堆的空间,而毫无用处,即可称作“垃圾”,为此JVM需要设计一个垃圾回收机制,将这些空间清除。
如何判断哪些是垃圾?
上面已经讲过,不在使用的对象 是 “垃圾”。在JVM中我们使用两种算法来计算此对象是否是没有使用的。
哪些数据可以成为GC ROOT呢?
通常包括了:
如何进行垃圾回收?
垃圾回收算法简单的说有三种:
标记-清除算法
将对象的生命周期分为“标记”和“清除”两种标记,对标记为“清除”的对象进行回收空间内存。(最初的垃圾收集算法)
缺点:执行效率不稳定;内存空间的碎片化问题;
如何理解碎片话问题:空间碎片化,意味着存在大量的间隔的空间,jvm在为对象分配空间时,是将同一对象分配在连续的内存中,当需要分配较大对象时无法找到足够连续内存而不得不提前触发另一次垃圾收集动作,将空间标记为“清除”标记的对象清空,从而保证这个较大的对象能够插入其中。
标记-复制算法
标记-复制算法也称为复制算法,或者半区复制。此算法为了解决标记-清除算法的碎片化问题而出现的。
它是将内存分为两个大小相同的内存块。在进行垃圾收集时,只需要把存活的对象复制到另外一个空间,当前空间直接清空。
标记-整理算法
对标记清除算法的另一种改进方式,回收对象时,让所有存活的对象都向内存空间一端移动,然后直接清除掉边界以外的内存。
声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!