JVM学习笔记(3)——垃圾回收器

简介: JVM学习笔记(3)——垃圾回收器

一、堆内存逻辑分区

这里图片写错了: 新生代比老年代应该是 1:2

对象来了,先会在stack上进行分配,stack放不下才到了Eden区,Eden区经过一次回收到了幸存者1区。进入old区的年龄可以通过参数配置,一般是15

二、MinorGC和MajorGC

三、逃逸

如果一个对象没有被引用指向它,被限定在一个范围里,则叫做没逃逸

new User被限定在alloc方法中,没有对象指向它

四、对象何时进入老年代

不同垃圾回收器不一样,可以通过用参数指定,PS垃圾回收器6次就进入了

年龄15并不是定死的规则,有的垃圾回收算法会采用动态的计算方法来判定对象进入老年代的年龄,大致逻辑如下:年龄从小到大进行累加,当加入某个年龄段后,累加和超过幸存者区域50%的时候,就从这个年龄段的往上的年龄对象进行晋升。50%这个百分比可以通过参数: TargetSurvivorRatio进行设置

五、怎么看JVM参数?

命令行直接输入

java -XX:+PrintFlagsFinal -version

就可以查看所有参数

想搜索自己想要的就加搜索关键字:

java -XX:+PrintFlagsFinal -version | grep Tenure

六、垃圾回收器

JDK8默认的垃圾回收器是: PS+PO ,Parallel Scavenge + Parallel Old

JDK9默认的是G1

目前所有的垃圾回收器都有 STW,即垃圾回收的时候要停止工作线程

Serial

STW(stop the world)

这种收集器是一个单线程的收集器,即垃圾收集时只有一个垃圾收集线程在工作,但是它的“单线程”不仅仅说明它只会使用一个CPU或者一条收集线程去完成垃圾收集工作,更重要的是在于它在进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束(Stop-the-World)。


-XX:+UseSerialGC参数可以指定年轻代和老年代都是用串行收集器,即年轻代用Serial GC,老年代用Serial Old GC。

CMS(concurrent mark sweep)

CMS收集器是基于“标记–清除”(Mark-Sweep)算法实现的。

整个过程分为四个步骤:

1.初始标记 (Stop the World事件 CPU停顿, 很短) 初始标记仅标记一下GC Roots能直接关联到的对象,速度很快;

2.并发标记 (收集垃圾跟用户线程一起执行) 初始标记和重新标记任然需要“stop the world”,并发标记过程就是进行GC Roots Tracing的过程;并发标记时间占了整个周期80%的时间左右,注意是并发而不是并行

3.重新标记 (Stop the World事件 CPU停顿,比初始标记稍微长,远比并发标记短)修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记时间短

4.并发清理 -清除算法;

如果内存几十个G,用PS怎么调优都没有用,因为调优是有上限的,这时候就得用CMS了

目录
相关文章
|
6天前
|
存储 算法 Java
先有JVM还是先有垃圾回收器?
是先有垃圾回收器再有JVM呢,还是先有JVM再有垃圾回收器呢?或者是先有垃圾回收再有JVM呢?历史上还真是垃圾回收更早面世,先有垃圾回收再有JVM。下面我们就来刨析刨析JVM的垃圾回收~
14 0
先有JVM还是先有垃圾回收器?
|
6天前
|
安全 算法 Java
深入浅出JVM(十三)之垃圾回收算法细节
深入浅出JVM(十三)之垃圾回收算法细节
|
6天前
|
存储 算法 Java
深入浅出JVM(十二)之垃圾回收算法
深入浅出JVM(十二)之垃圾回收算法
|
6天前
|
算法 Java PHP
JVM 的垃圾回收机制以及垃圾回收算法的详解
JVM 的垃圾回收机制以及垃圾回收算法的详解
12 0
|
6天前
|
监控 算法 安全
JVM工作原理与实战(三十九):G1垃圾回收器原理
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了G1垃圾回收器执行流程、年轻代回收原理、卡表(Card Table)、记忆集的生成流程、年轻代回收的详细步骤、混合回收的步骤、初始标记、并发标记、SATB、转移等内容。
29 0
|
6天前
|
存储 监控 算法
JVM工作原理与实战(二十七):堆的垃圾回收-G1垃圾回收器
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了G1垃圾回收器、G1垃圾回收器的回收方式、G1垃圾回收器执行流程、垃圾回收器的选择等内容。
13 0
|
6天前
|
机器学习/深度学习 监控 算法
JVM工作原理与实战(二十六):堆的垃圾回收-垃圾回收器
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收器、Serial垃圾回收器、SerialOld垃圾回收器、ParNew垃圾回收器、CMS垃圾回收器、Parallel Scavenge垃圾回收器、Parallel Old垃圾回收器等内容。
14 0
|
6天前
|
Arthas 监控 算法
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收算法评价标准、标记清除算法、复制算法、标记整理算法、分代垃圾回收算法等内容。
23 0
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法
|
6天前
|
存储 缓存 监控
JVM工作原理与实战(二十四):堆的垃圾回收-对象引用
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了强引用、软引用、弱引用、虚引用、终结器引用等内容。
15 0
|
6天前
|
监控 算法 安全
JVM工作原理与实战(二十三):堆的垃圾回收-引用计数法和可达性分析法
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了判断堆上的对象是否可以回收的方法(引用计数法、可达性分析法)、查看垃圾回收日志等内容。
14 0