使用大量内存的 Java 应用程序。使用 -Xmx?

2022-09-01 17:28:07

我有一个Java应用程序,在具有16G的机器上使用大约15G。我不知道我是否应该设置最大堆大小。

如果设置,jvm是否会将所有RAM吃到极限,然后开始垃圾收集并停止所有内容,同时它通过15G堆对象?

否则,jvm 会因未使用机器上所有可用的 RAM 而损害性能。

我的具体虚拟机是:Java HotSpot(TM)64位服务器虚拟机(内部版本1.6.0_03-b05,混合模式)。

谢谢


答案 1

-Xmx15G会将最大堆大小设置为 15 gig。Java只会在运行时分配它需要的东西。如果不设置它,它将仅使用默认值。有关默认值的信息,请参阅此帖子

-Xms15G将最小堆设置为 15 gig。这迫使java在开始执行之前分配15 gig的堆空间,无论它是否需要它。

通常,您可以根据调整 JVM 的方式将它们都设置为适当的值。


答案 2

在 Java 6 中,缺省的最大堆大小由存在的系统内存量确定。

根据垃圾回收器人体工程学页面,最大堆大小为:

小于物理内存的 1/4 或 1GB。在 J2SE 5.0 之前,缺省的最大堆大小为 64MB。

通过使用开关可用于更改最大堆大小。有关用法的详细信息,请参阅 java - Java 应用程序启动器文档。-Xmx


推荐