码迷,mamicode.com
首页 > 其他好文 > 详细

初始化与清理

时间:2017-04-12 03:06:32      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:size   遍历   java虚拟机   初始化   方式   停止   另一个   font   释放   

一、垃圾回收器如何工作?

  1、Java虚拟机将采用一种自适用的垃圾回收技术。

       停止-复制:

    原理:  先暂停程序的运行(所以它不属于后台回收模式),然后将所有存活的对象从当前堆复制到另一个堆,没有被复制的全部都是垃圾。当对象被复制到新堆时,他们是一个挨着一个的,所以新堆保持着紧凑的排列,当对象从一处搬到另一处的时候,所有指向它的引用都必须修正,位于堆和静态存储区的引用可以直接被修正,但可能还有其他指向这些对象的引用,他们在遍历的过程中才能被找到。

           劣势:  这种所谓的“复制式回收器”,效率会降低,首先,有两个堆,然后在之间来回倒腾,从而得维护比实际需要多一倍的空间。某些Java虚拟机处理方式,按需从堆中分配几块较大的内存,复制动作发生在这些大块的内存之间。 第二个问题,程序进入稳定状态之后,可能只会产生少量垃圾,甚至没有垃圾,尽管如此,复制回收器仍然会将所有的内存自一处复制到另一处,很是浪费。

           标记-清扫:

           原理:   从堆栈和静态存储区出发,遍历所有的引用,进而找出所有的存活的对象。每当它找到一个存活的对象,将会给对象设置一个标记,这个过程中将不会回收任何对象,只有全部标记工作完成,清理动作才会开始。在清理过程中,没有标记的对象将会被释放,不会发生任何复制的动作。

           劣势:   速度相当慢,所有剩下的堆空间是不连续的,垃圾回收是希望的连续的话,就得重新整理剩下的对象。

   总结: 一些Java虚拟机会进行检查,停止-复制下 要是没有新垃圾产生,就会转换到另一种工作模式,即标记-清扫。         

初始化与清理

标签:size   遍历   java虚拟机   初始化   方式   停止   另一个   font   释放   

原文地址:http://www.cnblogs.com/huxipeng/p/6696721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!