垃圾回收和线程
AFAIK 当 GC 执行其操作时,VM 会阻止所有正在运行的线程,或者至少在压缩堆时会阻止它。在CLR和JVM的现代实现中是否如此(截至2010年1月的生产版本)?请不要提供GC的基本链接,因为我了解基本的工作原理。
我假设全局锁定是这种情况,因为当发生压缩时,引用在移动期间可能是无效的,并且似乎最简单的方法是锁定整个堆(即,通过阻塞所有线程间接)。我可以想象更强大的机制,但KISS经常占上风。
如果我不正确,我的问题将通过对用于最小化阻止的策略的简单解释来回答。如果我的假设是正确的,请就以下两个问题提供一些见解:
如果这确实是行为,那么像JBOSS和Glassfish这样的重量级企业引擎如何保持持续的高TPS率?我在JBOSS上做了一些谷歌搜索,我期望在APACHE上找到一些适合Web处理的内存分配器。
面对 NUMA 式架构(可能在不久的将来),这听起来像是一场灾难,除非进程受线程和内存分配的 CPU 限制。