在最近的10年中,当讨论Java和/或垃圾回收时,我无法抗拒的唯一性能损失是,在分页内存体系结构中运行时,垃圾回收算法或多或少会中断,并且堆的某些部分会越来越多。分页。
Unix系统(尤其是Linux)积极地调出一段时间未使用的内存,尽管这对于您的普通泄漏c应用程序很有用,但它在内存紧张的情况下会杀死Java性能。
我知道最佳实践是将最大堆保留为小于物理内存。(或者您将看到您的应用程序转换为死亡),但是这个想法- 至少在unix世界中,是可以更好地将内存用于文件系统缓存等。
我的问题是:是否有任何分页(感知)垃圾收集算法?
您是正确的,垃圾收集器和虚拟内存管理器必须协作,否则GC将对系统进行垃圾处理。Matthew Hertz,Yi Feng和Emery D. Berger已研究了这种GC /内核协作。为了获得良好的性能,他们不得不稍微扩展内核并调整垃圾收集器。
在高内存压力下,使用GenMS Java GC的基准测试时间要长160倍左右。使用新的可识别页面的GC,基准测试速度仅慢了1.6倍。换句话说,使用适当调整的GC,性能可以提高100倍。
http://lambda-the-ultimate.org/node/2391