所以我正在使用intellij并正在开发一个程序。我将VM选项留空并运行了程序,它抛出了outofmemory:java heap space
异常。
因此,我决定通过添加-Xmx1024m
来增加堆空间。程序运行一半,然后再次引发相同的错误。我基本上是试图从pdf文档中提取单词(有1000万个单词),所以这是一个很大的文件。
我尝试将值增加到5000m
,但显示为invalid maximum heap size the specified size exceeds maximum representable size
。有谁知道我指定的最大可能大小是多少,以便它可以完全运行我的程序?
答案 0 :(得分:0)
JVM堆大小的值与系统中的物理内存量直接相关。将初始堆大小和最大堆大小设置为4096以开始调整,因为32位操作系统的地址空间限制为4 GB,而与系统中的物理内存量无关。
谈论Java中的默认堆大小,从Java 6 update 18开始 JVM如何计算32中默认堆大小的重大变化 和64位计算机以及客户端和服务器JVM模式:
初始堆空间和最大堆空间较大以进行改进 性能。
默认最大堆空间为最大物理内存的1/2,最大为 192字节和物理内存的1/4,最大大小为1Gig。因此对于 1Gig机器的最大堆大小为256MB 2.最大堆大小不会 在程序创建足够的对象以填充初始堆之前使用 空间要小得多,但至少为8 MB或1/64的一部分 物理内存高达1GB。
对于Server Java虚拟机,默认最大堆空间为1G 32位JVM上4GB的物理内存。对于64位JVM,其32G用于 物理内存为128GB
还请注意,增加内存并不能解决很多问题,因为实际问题出在代码中。我建议您使用堆分析器,并确保代码没有问题。
答案 1 :(得分:-1)
对此没有标准值。它取决于JVM版本,不同的实现可能有不同的限制。
我认为您使用32位版本的JVM。从我的经验来看,限制在1.5GB到2GB之间。
如果使用64位操作系统,则可以安装64位JVM。实际上,您可以将任何值设置为最大内存大小。
PS:您可能会考虑更改程序以将中间结果存储在磁盘或数据库中。