这个问题的表述可能更好:在 VMware ESX 等管理程序上运行 Java 服务器如何影响 Java 堆?
- 从操作系统/管理程序的角度来看,对 JVM 堆的访问是随机的
- 客户操作系统或管理程序很难优化随机访问的内存
- 鉴于此,管理程序能否检测 JVM 堆中未使用的页面?
Java 服务器应用程序的传统观点是,如果您在 JVM 启动时分配所有堆,而不是让堆在需要时动态调整大小,则性能最佳。换句话说,如果您将堆大小设置为 1GB,您的 Java 进程将获取 1GB 的连续虚拟地址空间(+ 二进制文件所需的任何空间),其他应用程序不再可用的内存。
VMware 是否足够聪明,可以检测到其中一些堆实际上是未使用的?这对 GC 性能有何影响?让堆在VMware中动态调整大小会更好吗?哪些 GC 策略最适合 VMware 来宾?
另外,有人会指出我在虚拟化环境中调整 JVM 堆的指南吗?