JVM垃圾回收机制及思维导图

一、Java垃圾回收机制

在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫描那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。

二、如何判断对象是否可以被回收

可以用两种方法来判断:引用计数器法、可达性分析算法。

引用计数器法:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。但是他有一个缺点是不能解决循环引用的问题。

可达性分析算法:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是可以被回收的。

三、JVM的垃圾回收算法

1、标记清除法:标记无用对象,然后进行清除回收。缺点:效率不高,无法清除垃圾碎片。

2、标记复制法:按照容量划分二个大小相等的内存区域,当一块用完的时候将活着的对象复制到另一块上,然后再把已使用的内存空间一次清理掉。缺点:内存使用率不高,只有原来的一半。

3、标记整理法:标记无用对象,让所有存活的对象都向一端移动,然后直接清除掉端边界以外的内存。

4、分代算法:根据对象存活周期的不同将内存划分为几块,一般是新生代和老年代,新生代基本采用复制算法,老年代采用标记整理算法。

四、垃圾收集器

用于回收新生代的收集器包括Serial、PraNew、Parallel Scavenge,

用于回收老年代的收集器包括Serial Old、Parallel Old、CMS,

用于回收整个Java堆的G1收集器。

新生代垃圾回收器一般采用的是复制算法,复制算法的优点是效率高,缺点是内存利用率低;老年代回收器一般采用的是标记-整理的算法进行垃圾回收。


思维导图

相关推荐

  1. jvm | 垃圾回收机制

    2024-01-19 02:40:04       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-19 02:40:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-19 02:40:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-19 02:40:04       82 阅读
  4. Python语言-面向对象

    2024-01-19 02:40:04       91 阅读

热门阅读

  1. 167. 两数之和2 - 输入有序数组

    2024-01-19 02:40:04       53 阅读
  2. 深度学习与药物发现在健康衰老中的应用

    2024-01-19 02:40:04       51 阅读
  3. DPDK trace 的简单使用

    2024-01-19 02:40:04       52 阅读
  4. 正则表达式

    2024-01-19 02:40:04       54 阅读
  5. React导航守卫(V6路由)

    2024-01-19 02:40:04       60 阅读
  6. 解决Reinitialized existing Git repository

    2024-01-19 02:40:04       57 阅读
  7. git push/pull/clone超时解决

    2024-01-19 02:40:04       49 阅读
  8. Crow:CROW_STATIC_DIRECTORY静态资源

    2024-01-19 02:40:04       54 阅读
  9. 安卓、ios系统详解

    2024-01-19 02:40:04       55 阅读