注意,当我说“JVM”时,实际上是指“Hotspot”,我正在运行最新的Java 1.6更新版。
举个例子:
我的JVM使用-Xmx设置为1gb。目前,堆分配了500mb,其中有450mb被使用。程序需要在堆上再加载200 mb数据。当前,堆中有300mb的“可回收”垃圾(我们假设它全部在最年长的一代中)。
在正常操作下,当JVM达到约700 mb或者适当时会进行垃圾回收。
在这种情况下,我希望JVM首先进行垃圾回收,然后再分配新的空间,以便我们的堆大小保持在500mb,并且已使用的堆为350mb。
是否有JVM参数组合可以实现这一点?
举个例子:
我的JVM使用-Xmx设置为1gb。目前,堆分配了500mb,其中有450mb被使用。程序需要在堆上再加载200 mb数据。当前,堆中有300mb的“可回收”垃圾(我们假设它全部在最年长的一代中)。
在正常操作下,当JVM达到约700 mb或者适当时会进行垃圾回收。
在这种情况下,我希望JVM首先进行垃圾回收,然后再分配新的空间,以便我们的堆大小保持在500mb,并且已使用的堆为350mb。
是否有JVM参数组合可以实现这一点?
CMS
通常比G1
差,尽管您的答案可能早于它。 - Aleksandr DubinskyG1
是非常好的垃圾回收器,但在 Java 7 上它对于任何需要频繁进行类加载和卸载的低延迟系统来说都不太适用,因为它无法清理永久代(permgen)。而 Java 8 则不存在这个问题。 - Leliel-XX:+CMSClassUnloadingEnabled
- Leliel