之前我们已经了解过具体的 GC 涉及的细节知识点,现在我们站在更高的角度,来看看各种垃圾收集器,以及其中两个的工作过程(CMS 和 G1)。
我们知道,虚拟机将保存对象实例的区域分为了两个叫做 「新生代」 和 「老年代」 的地方,为此虚拟机针对不同的内存区域利用不同的算法设计了不同的垃圾收集器。
了解垃圾收集器之前,我觉得还是有必要在复习一下 「Stop The World」 ,其用来形容在安全点用户线程暂停的这种状态的一个叫法。关于这个垃圾收集器工作的时候为什么要 Stop The World 还有一个比较有意思的事 ,“你妈妈在给你打扫房间的时候, 肯定也会让你老老实实地在椅子上或者房间外待着, 如果她一边打扫, 你一边乱扔纸屑, 这房间还能打扫完? ”这是虚拟机团队对 Stop The World 的说明,嗯,很有道理,哈哈哈。
那些回收 JVM 垃圾的家伙
Serial
关键字:新生代、Stop The World 、标记 - 复制算法、单线程
Serial 是作用在新生代的垃圾收集器,单线程工作,在工作的时候需要 Stop The World,(包括之前提到的 GC 工作,都是指可达性分析)。采用的是标记 - 复制算法,(关于标记 - 复制的内容之前有讲过就不再展开说了)。
看起来 Serial 收集器没什么特别的,但实际上 Serial 收集器在一些特殊的场景下有着不错的表现,这些要得益于他的额外内存消耗,因为其相比其他收集器要小一些,所以在服务器资源受限的情况下(单核或较少核心以及内存紧张),这个简单的单线程收集器效率还是很可观的。
ParNew
关键字:新生代、Stop The World 、标记 - 复制算法、多线程、「绝配」
ParNew 可以看成 new parallel gc ,一个新的并行垃圾收集器。是一个对标 Serial 的收集器,它与 Serial 的区别就是它在工作的时候是使用多线程进行工作的。还有,它是目前(JDK 9 以后) 「唯一一个」能配合 CMS 在新生代工作的垃圾收集器。
Parallel Scavenge
关键字:新生代、Stop The World、标记 - 复制算法、多线程、可控吞吐量【用户线程执行时间 /(用户线程执行时间+GC线程执行时间)】、「自适应策略」
Serial Old 是和 Serial 一样的一款收集器,只不过,它是工作在老年代的。换句话说就是 Serial Old 就是 Serial 的老年代版本。Serial Old 有一个特殊的用途就是作为 CMS 并发清除失败的时候的替补,这里后面 CMS 收集器再看。
Parallel Old
关键字:老年代、Stop The World、标记 - 整理算法、多线程、CP(组合)
Parallel Old 是一个多线程并行的老年代垃圾收集器。它的出现也是为了解决吞吐量最大化的问题。因为他没出现之前,只有 Serial Old 一款老年代垃圾收集器来配合 Parallel Scavenge ,因为 Serial Old 的单线程性能原因,导致 Parallel Scavenge 吞吐量的优势体现不出来。直到它的出现,它与 Paralle Scavenge 就组成了一对完美的吞吐量 CP。
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。
Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。
Sublime Text
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。