zoukankan      html  css  js  c++  java
  • java垃圾回收机制

    1 、垃圾回收机制(GC)
    垃圾回收就是回收内存中不再使用对象;
    (1)垃圾回收的步骤:
    1)查找内存中不再使用的对象;
    2)释放这些对象所占用的内存;
    (2)查找内存中不再使用的对象方法:
    1)引用计数法
    如果一个对象没有被任何引用指向,则可视为垃圾;
    缺点:不能检测到环的存在;
    2)根搜索算法:
    根搜索算法就是通过一系列名为“GC Roots”的对象作为起始点,
    从这些节点开始向下搜索,搜索所走过的路径成为引用链,当一个对象
    到GC Roots没有任何引用链相连时,则认为该对象未被引用。
    (3)放这些对象占用的内存

    总得来说就产生了三种类型的回收算法:
    1)标记-复制
    它将可用内存容量划分为大小相等的两块,每次只使用其中的一块。当这一块用完之后,
    就将还存活的对象复制到另外一块上面,然后在把已使用过的内存空间一次理掉。
    它的优点是实现简单,效率高,不会存在内存碎片。缺点就是需要2倍的内存来管理。
    2)标记-清理
    标记清除算法分为“标记”和“清除”两个阶段:首先标记出需要回收的对象,
    标记完成之后统一清除对象。它的优点是效率高,缺点是容易产生内存碎片。
    3)标记-整理
    标记操作和“标记-清理”算法一致,后续操作不只是直接清理对象,
    而是在清理无用对象完成后让所有 存活的对象都向一端移动,并更新引用其对象的指针。
    因为要移动对象,所以它的效率要比“标记-清理”效率低,但是不会产生内存碎片。
    4)基于分代的假设
    由于对象的存活时间有长有短,所以对于存活时间长的对象,
    减少被gc的次数可以避免不必要的开销。这样我们就把内存分成新生代和老年代,
    新生代存放刚创建的和存活时间比较短的对象,老年代存放存活时间比较长的对象。
    这样每次仅仅清理年轻代,老年代仅在必要时时再做清理可以极大的提高GC效率,
    节省GC时间。









  • 相关阅读:
    DIY组装机
    伯努利数学习笔记的说...
    心得分享 | 软件研发效能(1)
    开发板烧录教程
    解决Windows7/10系统连接网线后显示“未识别的网络”的问题
    雷达扫描
    经验学习
    1045 Access denied for user 'root'@'localhost' (using password:YES)
    json格式化工具
    mysql安装出现error Nr.1045
  • 原文地址:https://www.cnblogs.com/heng-yan/p/6256967.html
Copyright © 2011-2022 走看看