当前位置: 首页 > 知识库问答 >
问题:

为什么JVM full GC需要停止这个世界?

柴亦
2023-03-14

有人问我这个问题,我只是回答“因为JVM需要移动对象”,但后来我搜索了一下,似乎找不到任何合理的答案。

共有1个答案

濮君植
2023-03-14

首先,维基百科上的垃圾收集文章真的是很好的读物。

说到.

一般情况下,GC不需要Stop-the-World暂停。有一些JVM实现(几乎)是免暂停的(例如Azul Zing JVM)。JVM何时需要STW收集垃圾取决于它所使用的算法。

    null

并发标记扫描(CMS)是HotSpot JVM中的另一种算法,它不利用STW暂停来进行旧的空间收集(与完全收集不完全相同)。

CMS使用write barrier(每次在Java堆中写入引用时触发)来实现MARK的并发版本,而不使用Compact。缺乏压缩可能会导致碎片,如果后台垃圾收集不够快,应用程序仍然会被阻止。在这些情况下,CMS将回退到STW标记-扫描-紧凑集合。

还有G1是MSC的增量变异。您可以在我的博客中阅读更多关于HotSpot JVM中GC算法的内容。

 类似资料:
  • 问题内容: 我的PC上安装了SQL Server 2012,通常不需要它。它仅用于调试目的。 我已经看到它占用了相当多的RAM,所以我想阻止它启动直到我需要它时,再启动它,然后在不需要时停止它。 我怎么做?(我也安装了SSMS,所以如果这样做的话,我可以使用它。) 问题答案: 要启动,停止,暂停,继续或重新启动SQL Server数据库引擎的实例,请执行以下操作: 在“开始”菜单上,指向“所有程序

  • 我有这个密码: 这给我留下了编译器对我大喊大叫: 我花了很长时间才明白我必须改变Vec 代码现在编译,但我完全不明白这里到底有什么问题。为什么要在Vec定义中发送代码?我的意思是,这个特性已经实现了发送克隆。对我来说,这看起来相当多余。 有人能和我分享他的智慧吗,为什么我必须这样修改代码?

  • 互联网是超文本标记语言(HTML)页面的集合,它们彼此链接以形成概念性信息网络。随着时间的推移,静态资源数量增加,图像等更丰富的项目开始成为Web结构的一部分。 高级服务器技术允许动态服务器页面 - 其内容基于查询生成的页面。 很快,需要拥有更多动态网页才能获得动态超文本标记语言(DHTML)。一切都归功于JavaScript。在接下来的几年中,我们看到了跨帧通信,试图避免页面重新加载,然后在帧内

  • 当前信息时代,哪里都是应用程序。这些应用程序们不仅仅是运行人们工作场所的工具 - 它们现在正在经营人们的生活。 对即时响应的需求,完美的行为和更多的功能是前所未有的。 而且,当然,人们期望应用程序在不同类型的设备上运行平稳,特别是在移动设备上。 应用程序执行的速度与它所做的一样重要。 NGINX的核心功能,例如其具有高性能HTTP和反向代理服务器的大规模可扩展事件驱动架构,访问和带宽控制以及与各种

  • 开发人员和运营工程师是两个不同的组织团队,如果发现这两个团队在错误的轨道上协作,则表明需要DevOps。以下是两个团队经常出现的一些问题: 在DevOps之前,开发和运营团队完全孤立。 测试和部署是在设计构建之后完成的独立活动。因此,他们比实际构建周期消耗更多时间。 在不使用DevOps的情况下,团队成员将大量时间花在测试,部署和设计上,而不是构建项目。 手动代码部署会导致生产中出现人为错误 编码

  • 我发现了一个很受欢迎的问题的答案,下面的代码是: 为什么...是必需的?如果我省略了,巴别就会对我抱怨说: 它看起来像扩展语法,但是一个布尔值。我找不到能解释到底发生了什么的医生。