【发布时间】:2011-01-06 07:58:02
【问题描述】:
AFAIK 当 GC 正在做它的事情时,VM 会阻塞所有正在运行的线程——或者至少在它压缩堆时。在 CLR 和 JVM (截至 2010 年 1 月的生产版本) 的现代实现中是否是这种情况?请不要提供有关 GC 的基本链接,因为我了解基本的工作原理。
我假设全局锁定是这种情况,因为当压缩发生时,引用可能在移动期间无效,并且锁定整个堆似乎最简单(即通过阻塞所有线程间接)。我可以想象更强大的机制,但 KISS 经常占上风。
如果我不正确,我的问题将通过对用于最小化阻塞的策略的简单解释来回答。如果我的假设是正确的,请对以下两个问题提供一些见解:
如果这确实是这种行为,那么 JBOSS 和 Glassfish 等重量级企业引擎如何保持始终如一的高 TPS 率?我在 JBOSS 上进行了一些谷歌搜索,我期待在 APACHE 上找到适合 Web 处理的内存分配器之类的东西。
面对 NUMA 式架构(可能在不久的将来),这听起来像是一场灾难,除非进程受线程和内存分配的 CPU 限制。
【问题讨论】:
标签: java clr memory-management blocking garbage-collection