zoukankan      html  css  js  c++  java
  • 初始化与清理

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

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

           停止-复制:

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

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

               标记-清扫:

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

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

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

  • 相关阅读:
    bzoj2733 永无乡 平衡树按秩合并
    bzoj2752 高速公路 线段树
    bzoj1052 覆盖问题 二分答案 dfs
    bzoj1584 打扫卫生 dp
    bzoj1854 游戏 二分图
    bzoj3316 JC loves Mkk 二分答案 单调队列
    bzoj3643 Phi的反函数 数学 搜索
    有一种恐怖,叫大爆搜
    BZOJ3566 概率充电器 概率dp
    一些奇奇怪怪的过题思路
  • 原文地址:https://www.cnblogs.com/huxipeng/p/6696721.html
Copyright © 2011-2022 走看看