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