问题一:什么是两次标记过程?
什么是两次标记过程?
参考回答:
两次标记过程是指在垃圾回收中,对象在被回收之前会经历两次标记。第一次标记不在“关系网”中的对象。第二次标记会先判断该对象是否实现了finalize()方法,如果没有实现就直接判断该对象可回收;如果实现了就会先放在一个队列中,并由一个低优先级的线程去执行它,随后进行第二次的小规模标记,这次被标记的对象会被真正的回收。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627212
问题二:垃圾回收算法有哪些?
垃圾回收算法有哪些?
参考回答:
垃圾回收算法主要有复制算法、标记清除、标记整理和分代收集。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627208
问题三:复制算法是如何工作的,它有什么优缺点?
复制算法是如何工作的,它有什么优缺点?
参考回答:
复制算法将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存使用完后,就将还存活的对象复制到另一块去,然后再把使用的空间一次性清理掉。其优点是实现简单,内存效率高,不易产生碎片。缺点是内存压缩了一半,如果存活对象多,复制算法的效率会大大降低。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627207
问题四:标记清除算法有什么问题?
标记清除算法有什么问题?
参考回答:
标记清除算法在标记完成后统一回收所有被标记的对象。它的缺点是效率低,并且标记清除后会产生大量不连续的碎片,同时需要预留空间给分配阶段的浮动垃圾。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627206
问题五:分代收集是如何根据年代选择算法的?
分代收集是如何根据年代选择算法的?
参考回答:
分代收集根据各个年代的特点选择合适的垃圾收集算法。新生代通常采用复制算法,因为新生代每次垃圾回收都要回收大部分对象,存活对象较少。老年代则因为对象存活几率较高,且没有额外的空间进行分配担保,所以通常选择“标记-清除”或“标记-整理”算法进行垃圾收集。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/627202