JVM垃圾回收GC

简介: 这是JVM系列知识的最后一篇文章,本文围绕垃圾回收GC,涉及常用的垃圾回收算法,以及几种垃圾回收器。

目录

一、前言

大家好,我是苍何。最近思考了一个问题,为什么会出现公司面试造火箭,工作扭螺丝的现象,包括各种八股文的连环大绝杀问到你不会为主,其实这是考察你的知识面以及掌握的深度,而为什么需要这样呢?归其原因,无非是通过筛选找到那些会思考的人,他们需要的并不是CRUD的工具人,而是会思考能创新的工程师。

当你深刻理解到这点,我想不用刻意去学习,在工作中,肯定会吾日三省吾身。

于是乎,这个重新开始学习编程系列文章出来了。

愿与君共勉!

这是JVM系列知识的最后一篇文章,本文围绕垃圾回收GC,涉及常用的垃圾回收算法,以及几种垃圾回收器。

二、什么是垃圾

我们知道java语言是支持自动垃圾回收的,我们创建对象后,GC可以为我们回收掉无用的垃圾对象,那么什么是垃圾?

说白了就是,没有人用了就是垃圾


主要是堆中垃圾回收,方法区回收的比较少,因为判断一个类是无用的条件太苛刻了。

三、垃圾回收相关算法

1、引用计数法

每个对象保存了一个引用计数器属性,只要有对象引用他了,就加1,引用失效时,就减1,当引用值为0 的时候,代表就是垃圾对象,该被回收,优点是简单效率较高,缺点是没办法解决循环引用的问题,所以java并没有选择引用计数法。



2、可达性分析算法

以根对象集合GC Roots为起始点,按照从上到下的方式搜索被根对象所连接的目标对象是否可达,内存中的对象都会直接或间接的被根对象相连着,即一个对象的引用链,如果目标对象无任何引用连项链,则是不可达的垃圾对象




GC Roots



3、对象的finalization机制

即是“死亡对象”的一块免死金牌。


4、寻找GC Roots溯源工具



5、标记清除算法

标记可达对象,清除未被标记的垃圾对象。

6、复制算法

新生代中的S0和S1区用的就是复制算法,将活着的内存分为2块区,每次只使用其中一块,GC时将存货对象复制到另一块空闲空间,并清空原来的空间。


如果存货对象太多,就不适合用复制算法,比如老年区存货对象较多,复制过去太消耗时间精力了。

7、标记整理算法




8、对比三种算法

9、分代收集算法

年轻代用复制算法,老年代用标记清除和标记整理算法


10、增量收集算法

11、分区算法

三、垃圾回收相关概念

1、System.gc()

2、内存溢出OOM



3、内存泄漏


还有ThreadLocal也会导致内存泄漏

4、SWT


5、垃圾回收的并行与并发





6、安全点和安全区域

安全点:



安全区域

7、引用相关(强软弱虚)

强引用:引用关系只要还在,不会被GC(99%的场景)
软引用:引用关系还在,内存不够了就GC,内存够就GC(缓存)
弱引用:引用关系还在,也会被GC(缓存)
虚引用:获得一个系统通知,追踪








四、垃圾回收器

1、GC分类和性能指标










2、7款经典的垃圾回收器





JDK8中默认的组合


JDK8也可以用

3、Serial回收器



4、ParNew




5、CMS回收器





6、G1收集器










目录
相关文章
|
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
|
3月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
116 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS