我需要运行一个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)
7条答案
按热度按时间l7mqbcuq1#
在32位模式下使用JVM时,可以分配的最大堆大小为1280 MB。因此,如果希望超过此值,则需要在64位模式下调用JVM。
您可以使用下列项目:
其中,
您可以根据需要调整-Xms和-Xmx(YMMV)
关于JVM性能调优的一个非常好的资源,可能需要研究:http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html
7gcisfzg2#
从Oracle获得一个64位JVM。
cwdobuhd3#
我相信2GB的限制是针对32位Java的。我以为v1. 6总是64位的,但是试着强制64位模式,看看:请添加-d 64选项。
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。
egmofgnx5#
下面的配置适合我:
zfycwa2u6#
对于内存密集型应用程序,GraalVm可以作为更好的替代方案。提供32 GB的最大堆大小和其他优势。Hotspot vs Graal
cotxawn77#
就我而言,
使用JVM 64位后,它允许使用2GB RAM,因为我使用的是Win Server 2012
请参阅x1c 0d1x操作系统上JVM 32位可用的最大堆大小
https://www.codementor.io/@suryab/does-32-bit-or-64-bit-jvm-matter-anymore-w0sa2rk6z