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收集器










目录
相关文章
|
1月前
|
算法 Java
JVM垃圾回收机制
JVM垃圾回收机制
15 0
|
2月前
|
Java 程序员
探讨JVM垃圾回收机制与内存泄漏
探讨JVM垃圾回收机制与内存泄漏
|
3月前
|
算法 Java 关系型数据库
掌握这3个技巧,你也可以秒懂JAVA性能调优和jvm垃圾回收
JVM 是一个虚拟化的操作系统,类似于 Linux 和 Window,只是他被架构在了操作系统上进行接收 class 文件并把 class 翻译成系统识别的机器码进行执行,即 JVM 为我们屏蔽了不同操作系统在底层硬件和操作指令的不同。
25 0
|
3月前
|
存储 缓存 算法
JVM的垃圾回收机制
JVM的垃圾回收机制
|
4月前
|
算法 Java
太狠了!阿里技术专家撰写的电子版JVM&G1 GC实战,颠覆了传统认知
JVM是Java语言可以跨平台、保持高发展的根本,没有了 JVM, Java语言将失去运行环境。针对 Java 程序的性能优化一定不可能避免针对JVM 的调优,随着 JVM 的不断发展,我们的应对措施也在不断地跟随、变化,内存的使用逐渐变得越来越复杂。所有高级语言都需要垃圾回收机制的保护,所以 GC 就是这么重要。
|
4月前
|
算法 Java
JVM GC和常见垃圾回收算法
JVM GC和常见垃圾回收算法
48 0
|
21天前
|
存储 前端开发 安全
JVM内部世界(内存划分,类加载,垃圾回收)(上)
JVM内部世界(内存划分,类加载,垃圾回收)
52 0
|
25天前
|
存储 缓存 算法
深度解析JVM世界:垃圾判断和垃圾回收算法
深度解析JVM世界:垃圾判断和垃圾回收算法
|
2月前
|
存储 算法 Java
精华推荐 | 【JVM深层系列】「GC底层调优专题」一文带你彻底加强夯实底层原理之GC垃圾回收技术的分析指南(GC原理透析)
精华推荐 | 【JVM深层系列】「GC底层调优专题」一文带你彻底加强夯实底层原理之GC垃圾回收技术的分析指南(GC原理透析)
55 0
|
2月前
|
Java Serverless 对象存储
Serverless 应用引擎常见问题之jvm在进行垃圾回收的时候会导致重启如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
24 0