增加Java中的堆大小

Sun*_*il 263 java heap-memory

我正在使用8 GB RAM的Windows 2003服务器(64位).如何增加堆内存最大值?我正在使用该-Xmx1500m标志将堆大小增加到1500 Mb.我可以将堆内存增加到物理内存的75%(6 GB堆)吗?

Ste*_* B. 314

您可以在32位系统上增加到4GB.如果您使用的是64位系统,则可以更高.如果你选错了,不用担心,如果你在32位系统上要求5g,java会抱怨无效值并退出.

正如其他人发布的那样,使用cmd-line标志 - 例如

java -Xmx6g myprogram
Run Code Online (Sandbox Code Playgroud)

您可以通过键入java -X来获取完整列表(或者几乎完整的列表).

  • 根据我的经验,Java将使用32b VM接受的实际堆大小(在32b或64b系统上 - VM是这里的重要部分)大约是2G.此外,惊讶的提问者没有首先搜索并找到:http://stackoverflow.com/questions/1596009/java-lang-outofmemoryerror-java-heap-space和:http://stackoverflow.com/questions/37335/how-对并购交易与Java的琅的OutOfMemoryError-Java的堆空间错误64MB堆-S (16认同)
  • 啊,你当然是对的 - 在32位系统上,你只能处理2 Gb的内存. (2认同)
  • 不会。但人们通常会这样做,因为 JVM 永远不会浪费时间调整大小。说实话,我怀疑这很重要。 (2认同)
  • @PhilipRego 您可以将它设置为任何您想要的,直到 JVM 可以解决的限制。-Xmx2G 将您的内存设置为 2G(另请参阅 -Xms)。这根本没有说明您需要多少内存。 (2认同)

小智 151

通过使用命令行选项可以增加JVM分配的堆大小.这里我们有3个选项

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName
Run Code Online (Sandbox Code Playgroud)

在上面的行中,我们可以将最小堆设置为16mb,最大堆为64mb


Kev*_*vin 27

在32位JVM上,理论上可以设置的最大堆大小为4gb.要使用更大的堆大小,您需要使用64位JVM.请尝试以下方法:

java -Xmx6144M -d64

-d64标志很重要,因为它告诉JVM以64位模式运行.

  • 定义"不工作".它不会启动并给你一个错误吗?它是否开始但使用不同的堆大小? (4认同)

Sah*_*bra 12

您可以通过传递 JVM 参数-Xms-Xmx来增加堆大小,如下所示:

对于 Jar 文件:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar
Run Code Online (Sandbox Code Playgroud)

对于 Java 文件:

 java -Xms4096M -Xmx6144M ClassName
Run Code Online (Sandbox Code Playgroud)

上述参数将InitialHeapSize (-Xms)增加到 4GB (4096 MB),将MaxHeapSize(-Xmx)增加到 6GB (6144 MB)。

但是,年轻代堆大小将保持不变,额外的堆大小将添加到老年代堆大小中。要均衡 Young Gen Heap 和 Old Gen Heap 的大小,请使用-XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy参数。

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar
Run Code Online (Sandbox Code Playgroud)

-XX:NewRatio = Old Gen Heap Size : Young Gen HeapSize(你可以使用这个比率来获得你想要的比率)。


小智 11

可以在eclipse IDE中直接增加由JVM分配的堆大小

运行---->运行配置---->参数

输入-Xmx1g(用于设置最大大小,如Xmx256m或Xmx1g ...... m - > mb g ---> gb)

  • 只是添加这个应该是一个VM参数(eclipse为您提供了两个选项). (3认同)

小智 10

java -d64 -Xms512m -Xmx4g HelloWorld

其中,-d64:将启用64位JVM -Xms512m:将初始堆大小设置为512 MB -Xmx4g:将最大堆大小设置为4 GB(此处java文件名为:HelloWorld.java)


Ste*_*n C 7

我可以将堆内存增加到物理内存的75%(6GB堆).

是的你可以.事实上,如果你愿意,你可以增加到超过物理内存的数量.

这样做是否是个好主意取决于系统上运行了多少其他功能.特别是,如果当前运行的应用程序和服务的"工作集"明显超过可用的物理内存,则系统可能会"捶打",花费大量时间将虚拟内存页面移入和移出磁盘.净效应是系统变得非常慢.

  • 您确定您运行的是64位版本的Java吗?在64位操作系统上? (3认同)

小智 6

请使用以下命令将堆大小更改为 6GB

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"
Run Code Online (Sandbox Code Playgroud)