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时间。









  • 相关阅读:
    时间操作、时间戳
    滚动条大于120px时,判断pc端的情况下,导航条固定定位
    通过js中的useragrent来判断设备是pc端还是移动端,跳转不同的地址
    js构建函数,点击按钮显示div,再点击按钮或其他区域,隐藏div
    localStorage用法总结
    轮播插件、原生js编写,弄懂这个,基本上各种轮播都可以自己写了
    (原)选择远比努力重要
    Java线程之间通信
    迪杰斯特拉(Java)
    FFTW中文参考
  • 原文地址:https://www.cnblogs.com/heng-yan/p/6256967.html
Copyright © 2011-2022 走看看