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