zoukankan      html  css  js  c++  java
  • 垃圾回收的概念与算法

    GC中的垃圾,是指的是在内存中不在不再被使用的对象。

    常见的垃圾回收算法

    1.引用计数算法(无法回收循环引用的对象)

    2.标记清除算法
    分为标记阶段和清除阶段(会产生内存的空间碎片)

    3.复制算法(缺点是将系统内存折半,高效性是建立在存活对象少,垃圾对象多的前提下的)

    在java新生代串行垃圾回收器中,使用了复制算法的思想,新生代分为eden,from,to三个部分。from,to空间成为survivor空间,用于存放未被回收的对象。

    其中:新生代指得是存放年轻对象的空间。

    老年代指的是存放垃圾回收存活的对象。

    在新生代中的垃圾回收中,eden区存活的对象会放在to中,正在使用from中的年轻对象也会被复制到to中,此时eden区与from区可以直接清空。

    4.标记压缩法(高效性是建立在大多数的对象都是存活的)

    用于老年代中的垃圾回收:

    在标记清除算法中做了优化:从根节点开始,对所有可达对象做了标记。然后将所有的可达对象都压缩到内存的另一边,之后清理边界外的所有空间。

    5.分代算法:

    就是将复制算法与标记压缩法整合到一起。

    6.分区算法:

    将整个内存的对空间划分为连续的不同的小空间,每个小空间都单独的使用,独立的回收。由于对空间越大,一次GC所花费的时间越长,所以会减少GC的时间。

    对象回收的情况

    java提供了四个类型的引用:强引用,软引用,弱引用,虚引用。

    强引用所指的对象在任何时候都不会被GC回收。

    2.GC未必会回收软引用的对象吗,但是当内存资源紧张时,软引用的对象会被回收。

    3.在GC中还要发现弱引用就会被回收。

    4.一个虚引用随时随地都会被回收。

    新生代与老年代GC的区别:

    新生代GC比较频繁,但是持续的时间较短。

    老年代GC发生次数少,但是持续的时间比较长。

    垃圾回收器的分类:

    1.串行回收器

    单线程进行垃圾回收的回收器,对于并性能力较弱的计算机来说,性能比较好,是最古老的垃圾回收器。在串行收集器回收时,所有的线程都需要暂停,等待垃圾回收的完成。“stop the world”。

    2.并行回收器

    采用多个线程进行垃圾回收,对于并行能力强的计算机,可以有效的缩短垃圾回收的时间。

    3.CMS回收器

    主要关注于系统的停顿时间。意为并发标记清除。使用的是标记清除算法。同时他又是一个使用多线程并行回收的回收器。

  • 相关阅读:
    nodejs pm2使用
    react生命周期
    It's a start!
    关于react-native报错: Invariant Violation: WebView has been removed from React Native. It can ....
    react-native 页面使用WebView布满整个页面,导航栏不显示问题
    两个函数执行顺序,异步问题处理(已解决)
    react-native webView乱码问题
    react-native 多页面之间传值
    时间戳转换为时间日期格式
    React Native返回刷新页面(this.props.navigation.goBack())
  • 原文地址:https://www.cnblogs.com/caobojia/p/6849834.html
Copyright © 2011-2022 走看看