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

    1、概念

      GC 中的垃圾,特指存在于内存中、不会再被使用的对象。垃圾回收有很多种算法,如引用计数法、复制算法、分代、分区的思想。

    2、算法

      1、引用计数法:对象被其他所引用时计数器加 1,而当引用失效时则减 1,。但这种方式有非常严重的问题:无法处理循环引用的情况、还有就是每次进行加减操作比较浪费性能。

      2、标记清除法:就是分为标记和清除两个阶段进行处理内存中的对象,当然这种方式也有非常大的弊端,就是空间碎片问题,垃圾回收后的空间不是连续的,不连续的内存空间工作效率要低于连续的内存空间 ( java 中新生代的 from 和 to 空间就是使用的复制算法 ) 

      3、复制算法:其核心思想就是将内存分为两块,每次只使用一块,在垃圾回收时,将正在使用的内存中的存留对象复制到未被使用的内存中去,之后清除之前使用内存中的对象,反复去交换两个内存的角色,完成垃圾回收。

      4、标记压缩法:标记压缩法在标记清除法基础上做了优化,把存活的对象压缩到内存一端,然后进行垃圾清理。(  java 中老年代就是使用的标记压缩法 )

      5、分代算法:根据对象的特点把内存份为 n 块,然后根据每个内存的特点使用不同的算法。对新生代和老年代来说,新生代回收频率高,但每次耗时短,而老年代回收频率低,但耗时相对较长,所以应当尽量减少老年代的 GC。

      6、分区算法:将整个内存分为 n 个独立空间,每个小空间都可以独立使用,这样细粒度的控制一次回收多少个小空间和哪些空间,而不是对整个空间进行 GC,从而提升性能,并减少 GC 的停顿时间。

    3、为什么新生代和老年代使用不同的算法

      新生代里面的对象死得快、死的多,所以采用复制算法可以一次性大批量 GC

      老年代里面的对象死的少、死的慢,所以采用标记压缩法一次性小批量 GC

  • 相关阅读:
    Docker(12)- docker run 命令详解
    adb 常用命令大全(7)- 其他实用功能
    adb 常用命令大全(6)- 模拟按键输入
    adb 常用命令大全(5)- 日志相关
    adb 常用命令大全(4)- 应用管理
    adb 常用命令大全(3)- 查看手机设备信息
    adb 常用命令大全(2)- 基础命令
    adb 常用命令大全(1)- 汇总
    Docker
    Docker(11)- docker ps 命令详解
  • 原文地址:https://www.cnblogs.com/fangwu/p/8378847.html
Copyright © 2011-2022 走看看