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

hiz5n14c  于 2022-11-07  发布在  其他
关注(0)|答案(7)|浏览(205)

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

  • 设置-Xmx参数,例如-Xmx 3000 m。这种方法在创建JVM时失败。从我在谷歌上搜索的结果来看,-Xmx必须小于2GB。
  • 使用-XX:+AggressiveHeap选项。当我尝试此方法时,我得到一个“Not enough memory”错误,告诉堆大小为1273.4 MB,即使我的计算机有8 GB的内存。

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

  • 最低配置:操作系统:Windows 7
  • 处理器:Intel Core i7(2.66 GHz)
  • 内存:8 GB
  • java -版本:
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)
l7mqbcuq

l7mqbcuq1#

在32位模式下使用JVM时,可以分配的最大堆大小为1280 MB。因此,如果希望超过此值,则需要在64位模式下调用JVM。
您可以使用下列项目:

$ java -d64 -Xms512m -Xmx4g HelloWorld

其中,

    • d 64:将启用64位JVM
    • Xms 512 m:将初始堆大小设置为512 MB
    • Xmx 4g:将最大堆大小设置为4 GB

您可以根据需要调整-Xms和-Xmx(YMMV)
关于JVM性能调优的一个非常好的资源,可能需要研究:http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

7gcisfzg

7gcisfzg2#

Oracle获得一个64位JVM。

cwdobuhd

cwdobuhd3#

我相信2GB的限制是针对32位Java的。我以为v1. 6总是64位的,但是试着强制64位模式,看看:请添加-d 64选项。

ars1skjm

ars1skjm4#

32-位Java的大小限制为大约1.4到1.6 GB。
Oracle 32位堆常见问题解答

  • 引述 *

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

egmofgnx

egmofgnx5#

下面的配置适合我:

JAVA_HOME=/JDK1.7.51-64/jdk1.7.0_51/
PATH=/JDK1.7.51-64/jdk1.7.0_51/bin:$PATH
export PATH
export JAVA_HOME

JVM_ARGS="-d64 -Xms1024m -Xmx15360m -server"

/JDK1.7.51-64/jdk1.7.0_51/bin/java $JVM_ARGS -jar `dirname $0`/ApacheJMeter.jar "$@"
zfycwa2u

zfycwa2u6#

对于内存密集型应用程序,GraalVm可以作为更好的替代方案。提供32 GB的最大堆大小和其他优势。Hotspot vs Graal

cotxawn7

cotxawn77#

就我而言,

相关问题