上QQ阅读APP看书,第一时间看更新
第1章 垃圾回收器概述
Java是流行多年的编程语言,深受广大程序员的欢迎,其最主要的两个特点为:
❑跨平台:“一次编译,到处运行”是最为贴切的总结。一次编译指的是Java源文件被编译器编译成字节码文件(通常以.class作为后缀,所以也称为Class文件);到处运行指的是在安装了Java Virtual Machine(JVM)的不同平台上,Class文件都可以运行,由JVM负责解释或者编译执行字节码。
❑垃圾回收:程序员不用再像C/C++程序员一样关心内存的分配和释放,由垃圾回收器负责内存的管理,所以提高了程序开发的效率,减少了内存泄漏的概率。垃圾回收器由JVM的后台线程实现垃圾对象的识别和回收。
自Java中引入垃圾回收器以来,垃圾回收器的发展从未停止过。Java中成熟的垃圾回收器有串行垃圾回收器、并行垃圾回收器、并发标记回收器(Concurrent Mark Sweep, CMS)、垃圾优先回收器(Garbage First,也称为G1)。在JDK 11中引入了一款新的垃圾回收器ZGC,在JDK 12中又引入了另一款新的垃圾回收器Shenandoah。虽然新的垃圾回收器不断地涌现,但是垃圾回收的基本算法变化并不大。简单来说,回收算法主要有复制、标记清除、标记压缩。JVM中不同的垃圾回收器都是基于这些基本算法实现的,不同的垃圾回收器区别在于:选择的算法不同,实现时后台线程采用的并行/并发方式不同。
本章介绍JVM中实现的垃圾回收器,并着重回顾了G1,最后介绍为什么需要ZGC,以及ZGC的创新点和不足之处。