增加内存密集型应用程序的JVM最大堆大小

Alc*_*sta 84 java jvm jvm-arguments

我需要运行一个使用超过2GB的Java内存密集型应用程序,但是我遇到了增加堆最大大小的问题.到目前为止,我尝试了以下方法:

  • 设置-Xmx参数,例如-Xmx3000m.这种方法在创建JVM时失败.从我用Google搜索,看起来-Xmx必须小于2GB.

  • 使用-XX:+ AggressiveHeap选项.当我尝试这种方法时,我得到一个"内存不足"错误,告诉堆大小为1273.4 MB,即使我的计算机有8GB内存.

是否有另一种方法可以尝试增加JVM的最大堆大小?以下是计算机规格的摘要:

  • 操作系统:Windows 7(64位)
  • 处理器:Intel Core i7(2.66 GHz)
  • 内存:8 GB
  • java -version:
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)

moh*_*oni 93

在32位模式下使用JVM时,可以分配的最大堆大小为1280 MB.因此,如果您想要超越它,则需要在64模式下调用JVM.

您可以使用以下内容:

$ java -d64 -Xms512m -Xmx4g HelloWorld
Run Code Online (Sandbox Code Playgroud)

哪里,

  • -d64:将启用64位JVM
  • -Xms512m:将初始堆大小设置为512 MB
  • -Xmx4g:将最大堆大小设置为4 GB

您可以根据您的要求调整-Xms和-Xmx(YMMV)

有关JVM性能调优的非常好的资源,可能需要查看:http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html


Jam*_*olk 46

Oracle获得64位JVM .


G__*_*G__ 14

我相信2GB限制是针对32位Java的.我认为v1.6总是64位,但尝试强制64位模式只是为了看:添加-d64选项.

  • -d64 和 -d32 开关仅在 Solaris 上正常工作(至少根据这些文档):http://java.sun.com/docs/hotspot/HotSpotFAQ.html#64bit_layering。 (2认同)

小智 8

32位Java限制在大约1.4到1.6 GB之间.

Oracle 32位堆常见问题解答

引用

32位JVM的最大理论堆限制为4G.由于各种附加约束,例如可用交换,内核地址空间使用,内存碎片和VM开销,实际上限制可以低得多.在大多数现代32位Windows系统上,最大堆大小范围为1.4G到1.6G.在32位Solaris内核上,地址空间限制为2G.在运行32位VM的64位操作系统上,最大堆大小可能更高,在许多Solaris系统上接近4G.