垃圾回收器原理内容解析

运行时内存模型

在这里插入图片描述
在这里插入图片描述
堆默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2
在这里插入图片描述

垃圾回收模型

在这里插入图片描述

垃圾“判断”算法

在这里插入图片描述

引用计数算法


在这里插入图片描述

根搜索算法


在这里插入图片描述
上述的三种引用就是GC roots

方法区回收

在这里插入图片描述

在这里插入图片描述
注意:系统,扩展,根类加载器全局唯一实例 也就是说 这三种加载类加载是无法被GC ,其加载的类永远不会被卸载回收。自定义的类加载器才会被回收,所以方法区中的类被回收条件很苛刻但是还是可能被回收
在这里插入图片描述

垃圾“回收”算法

在这里插入图片描述

标记-清除算法(Mark-Sweep)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从头至尾 红色的都是可以被回收的
在这里插入图片描述
在这里插入图片描述

复制(Copying)收集算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标记-整理算符(Mark-Compact)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 没有内存碎片
  • 比标记清除耗更多时间进行整理压缩(存活的对象要进行移动 需要耗费时间)
    在这里插入图片描述

分代收集算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

内存结构

在这里插入图片描述

内存分配

在这里插入图片描述

内存回收

引用类型

在这里插入图片描述

  • Strong :强引用
  • Soft: 软引用
  • Weak:弱引用
  • Phantom:虚引用

在这里插入图片描述
在这里插入图片描述
还有G1算法

GC的时机(何时GC)

在这里插入图片描述
Full GC 的触发会导致业务线程暂停,他同时对新生代,老年代,元空间进行GC 开发时一定要避免FUllGC的出现

垃圾回收器

在这里插入图片描述

垃圾回收器并行和并发

在这里插入图片描述

Serial收集器

在这里插入图片描述
在这里插入图片描述

ParNew收集器

在这里插入图片描述
在这里插入图片描述

Parallel Scavenge收集器

在这里插入图片描述

Serial Old收集器

在这里插入图片描述

Parallel Old收集器

在这里插入图片描述
在这里插入图片描述

CMS收集器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

GC垃圾收集器JVM参数

在这里插入图片描述

Java内存泄露原因

在这里插入图片描述

对象定义在错误的范围(Wrong Scope)

在这里插入图片描述

异常处理不当

在这里插入图片描述

集合管理不当

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42261668/article/details/109016306