举例来说,假设我将JVM的最大堆大小设置为4GB。然而,一旦我的应用程序达到约3GB,操作系统开始将一些内存交换到磁盘上。此时已经有几个对象超出范围,JVM可以首先垃圾回收旧对象,而不是请求更多内存。从性能角度来看,运行垃圾回收要比进行内存交换好。JVM的垃圾回收是否聪明地处理这种情况?我们是否可以以某种方式调整JVM以解决这种情况?
我知道垃圾回收有可能在达到3GB之前就运行,因此我们实际上永远不需要交换内存,但这并没有真正回答我的问题。
编辑:假设我的计算机有超过4GB的内存,但有时其他应用程序占用了部分内存,导致我剩余的内存少于4GB。我不想减少最大堆大小,因为大多数时候我都会有4GB,但我想知道GC在其他情况下是否足够聪明。
我知道垃圾回收有可能在达到3GB之前就运行,因此我们实际上永远不需要交换内存,但这并没有真正回答我的问题。
编辑:假设我的计算机有超过4GB的内存,但有时其他应用程序占用了部分内存,导致我剩余的内存少于4GB。我不想减少最大堆大小,因为大多数时候我都会有4GB,但我想知道GC在其他情况下是否足够聪明。