现在的位置: 首页 > 综合 > 正文

java常用的两种回收机制

2013年03月08日 ⁄ 综合 ⁄ 共 692字 ⁄ 字号 评论关闭

之前有一次面试,有人问我java常用的垃圾回收机制有哪两种,说说区别,我瞬间傻眼了~

  前段时间读张孝祥的【java就业培训教程】忽然找到了这个问题的答案,记下来与大家分享;

====================================================================  

  不同的java虚拟机采用不同的回收策略,一般比较常用的有两种:一种叫做复制式回收策略,一种叫做“自省式”回收策略

  复制式回收策略:这种策略的执行模式是先将正在运行中的程序暂停,然后把正在被使用的所有对象从他们所在的堆内存里复制到另外一块堆内存那些所不在使用的对象所占据的内存空间就会被释放掉

  这种机制需要两块堆内存用于将内存中的内容搬运复制,这就需要维护所需内存数量的两倍内存空间,更麻烦的是即使程序只产生了少量垃圾甚至没有垃圾,回收器仍然会把堆内存里的内容复制到另外一块堆内存中,就使得这种策略效率低下。为了解决这个问题,“自身式”回收策略被采用。

  自省式回收策略会检测所有正在使用的对象,并为他们标注,完成这项工作再将所有不再被使用的对象占用的内存一次性释放。可想而知,这种方式的速度仍然较慢,不过如果程序只产生少许的垃圾甚至不产生垃圾,这种策略就极具优势。

    这两种方式颇具有互补性,因此在一些JVM里面两种方式被有机的结合运用,在实际运用中,JVM会监督这两种模式的运作效率,如果程序中的对象被长期的占用,JVM就会转至“自省式”回收模式,而当产生大量垃圾或对象占用内存不连续情况严重时,又会转至“复制式”模式,如此循环,实现了两种机制的交互。

抱歉!评论已关闭.