Excel不相邻列如何打印在一起-英雄云拓展知识分享
126
2023-11-07
【摘要】 本书摘自《深入理解 Java 虚拟机 JVM 高级特性与最佳实践(第3版)》一书中第3章,第5节,周志明著。
3.5 经典垃圾收集器
如果说收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者。《 Java 虚 拟机规范》中对垃圾收集器应该如何实现并没有做出任何规定,因此不同的厂商、不同版 本的虚拟机所包含的垃圾收集器都可能会有很大差别,不同的虚拟机一般也都会提供各种 参数供用户根据自己的应用特点和要求组合出各个内存分代所使用的收集器。
本节标题中“经典”二字并非情怀,它其实是讨论范围的限定语,这里讨论的是在 JDK 7 Update 4之后(在这个版本中正式提供了商用的G1 收集器,此前G1 仍处于实验状 态)、JDK11 正式发布之前, OracleJDK 中的 HotSpot 虚拟机日所包含的全部可用的垃圾收 集器。使用“经典”二字是为了与几款目前仍处于实验状态,但执行效果上有革命性改进
的高性能低延迟收集器区分开来,这些经典的收集器尽管已经算不上是最先进的技术,但 它们曾在实践中千锤百炼,足够成熟,基本上可认为是现在到未来两、三年内,能够在商 用生产环境上放心使用的全部垃圾收集器了。各款经典收集器之间的关系如图3-6所示。
图3-6展示了七种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明 它们可以搭配使用③,图中收集器所处的区域,则表示它是属于新生代收集器抑或是老年代 收集器。接下来笔者将逐一介绍这些收集器的目标、特性、原理和使用场景,并重点分析 CMS 和G1 这两款相对复杂而又广泛使用的收集器,深入了解它们的部分运作细节。
在介绍这些收集器各自的特性之前,让我们先来明确一个观点:虽然我们会对各个收 集器进行比较,但并非为了挑选一个最好的收集器出来,虽然垃圾收集器的技术在不断进 步,但直到现在还没有最好的收集器出现,更加不存在“万能”的收集器,所以我们选择 的只是对具体应用最合适的收集器。这点不需要多加论述就能证明:如果有一种放之四海 皆准、任何场景下都适用的完美收集器存在, HotSpot 虚拟机完全没必要实现那么多种不同 的收集器了。
3.5.1 Serial 收集器
Serial 收集器是最基础、历史最悠久的收集器,曾经(在JDK 1.3.1之前)是 HotSpot虚拟机新生代收集器的唯一选择。大家只看名字就能够猜到,这个收集器是一个单线程工 作的收集器,但它的“单线程”的意义并不仅仅是说明它只会使用一个处理器或一条收集 线程去完成垃圾收集工作,更重要的是强调在它进行垃圾收集时,必须暂停其他所有工作 线程,直到它收集结束。“Stop The World” 这个词语也许听起来很酷,但这项工作是由虚 拟机在后台自动发起和自动完成的,在用户不可知、不可控的情况下把用户的正常工作的 线程全部停掉,这对很多应用来说都是不能接受的。读者不妨试想一下,要是你的电脑每 运行一个小时就会暂停响应五分钟,你会有什么样的心情?图3-7示意了Serial/Serial Old 收集器的运行过程。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~