• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

面试问题——为何新生代和老年代使用的算法不一样?

前两天面试碰到一个比较有意思的问题:为何新生代和老年代采取的算法不一样?

众所周知,新生代所采取的算法是标记-复制算法(复制算法),老年代采用的是标记-清除算法和标记—整理算法。

最早出现的垃圾收集算法是“标记-清除”算法,但是他主要有两个缺点:1.执行效率不稳定,如果堆中大部分对象需要回收,那么需要进行大量标记和清除动作,执行效率会随着对象数量增长而降低。2.内存空间的碎片化问题。

对于新生代而言,因为需要面对的大部分对象都是可回收的对象,所以标记-复制算法应运而生。

因为该算法只需要复制的只是占少数的存活对象,而且分配内存是不用考虑有空间碎片的情况,只需要移动堆顶指针,按顺序分配即可,实现简单,运行高效,十分适合新生代那些大部分“朝生夕灭”的对象。

但是,复制算法在对象存活率较高时,需要较多的复制操作,效率会降低,尤其是该算法会浪费掉一部分内存,所以不适合老年代。这个时候“标记-清除算法”以及“标记-整理算法”便可以发挥他们的作用了。


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址