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了

目录
相关文章
|
5月前
|
存储 算法 Oracle
极致八股文之JVM垃圾回收器G1&ZGC详解
本文作者分享了一些垃圾回收器的执行过程,希望给大家参考。
|
2月前
|
监控 算法 Java
Java虚拟机(JVM)的垃圾回收机制深度解析####
本文深入探讨了Java虚拟机(JVM)的垃圾回收机制,旨在揭示其背后的工作原理与优化策略。我们将从垃圾回收的基本概念入手,逐步剖析标记-清除、复制算法、标记-整理等主流垃圾回收算法的原理与实现细节。通过对比不同算法的优缺点及适用场景,为开发者提供优化Java应用性能与内存管理的实践指南。 ####
|
1月前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
44 0
|
16天前
|
算法 网络协议 Java
【JVM】——GC垃圾回收机制(图解通俗易懂)
GC垃圾回收,标识出垃圾(计数机制、可达性分析)内存释放机制(标记清除、复制算法、标记整理、分代回收)
|
1月前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
2月前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
58 1
|
2月前
|
监控 算法 Java
Java虚拟机垃圾回收机制深度剖析与优化策略####
【10月更文挑战第21天】 本文旨在深入探讨Java虚拟机(JVM)中的垃圾回收机制,揭示其工作原理、常见算法及参数调优技巧。通过案例分析,展示如何根据应用特性调整GC策略,以提升Java应用的性能和稳定性,为开发者提供实战中的优化指南。 ####
47 5
|
2月前
|
存储 算法 安全
JVM常见面试题(四):垃圾回收
堆区域划分,对象什么时候可以被垃圾器回收,如何定位垃圾——引用计数法、可达性分析算法,JVM垃圾回收算法——标记清除算法、标记整理算法、复制算法、分代回收算法;JVM垃圾回收器——串行、并行、CMS垃圾回收器、G1垃圾回收器;强引用、软引用、弱引用、虚引用
|
2月前
|
存储 算法 Java
JVM进阶调优系列(10)敢向stop the world喊卡的G1垃圾回收器 | 有必要讲透
本文详细介绍了G1垃圾回收器的背景、核心原理及其回收过程。G1,即Garbage First,旨在通过将堆内存划分为多个Region来实现低延时的垃圾回收,每个Region可以根据其垃圾回收的价值被优先回收。文章还探讨了G1的Young GC、Mixed GC以及Full GC的具体流程,并列出了G1回收器的核心参数配置,帮助读者更好地理解和优化G1的使用。
|
2月前
|
监控 Java 测试技术
Elasticsearch集群JVM调优垃圾回收器的选择
Elasticsearch集群JVM调优垃圾回收器的选择
67 1