java—将堆空间增加到最大限制

java—将堆空间增加到最大限制,java,memory,Java,Memory,所以我正在使用intellij并在编写一个程序。我将VM选项留空并运行程序,它抛出outofmemory:java堆空间异常 所以我决定通过添加-Xmx1024m来增加堆空间。程序运行到一半,然后再次抛出相同的错误。我基本上是从一个有1000万单词的pdf文档中提取单词,所以这是一个大文件 我尝试将该值增加到5000m,但它显示无效的最大堆大小指定的大小超过了最大可表示大小。有人知道我指定的最大可能大小是多少,以便它可以完全运行我的程序吗?JVM堆大小的值与系统中的物理内存量直接相关。将初始堆大

所以我正在使用intellij并在编写一个程序。我将VM选项留空并运行程序,它抛出outofmemory:java堆空间异常

所以我决定通过添加-Xmx1024m来增加堆空间。程序运行到一半,然后再次抛出相同的错误。我基本上是从一个有1000万单词的pdf文档中提取单词,所以这是一个大文件


我尝试将该值增加到5000m,但它显示无效的最大堆大小指定的大小超过了最大可表示大小。有人知道我指定的最大可能大小是多少,以便它可以完全运行我的程序吗?

JVM堆大小的值与系统中的物理内存量直接相关。将初始堆大小和最大堆大小设置为4096以开始调优,因为32位操作系统的地址空间限制为4 GB,而与系统中的物理内存量无关

讨论Java中的默认堆大小,从Java6更新18开始 JVM计算默认堆大小的方式是否发生了重大变化 和64位机器以及客户端和服务器JVM模式:

初始堆空间和最大堆空间越大,性能越好 表演

默认最大堆空间为物理内存的1/2,大小不超过 192字节和1/4的物理内存,最大容量为1Gig。所以 1Gig计算机的最大堆大小为256MB 2。不会更改最大堆大小 直到程序创建足够的对象来填充初始堆为止 空间要小得多,但至少为8MB或1/64 物理内存高达1GB

对于服务器Java虚拟机,默认最大堆空间为1G 32位JVM上的4GB物理内存。对于64位JVM,它的32G用于 128GB的物理内存


还需要提醒的是,增加内存并没有多少帮助,因为实际问题存在于代码中。我建议您使用heap analyzer,并确保代码没有问题。

对此没有标准值。这取决于JVM版本,不同的实现可能有不同的限制

我认为您使用的是32位版本的JVM。根据我的经验,限制在1.5GB和2GB之间

如果您使用64位操作系统,则可以安装64位JVM。它允许您将几乎任何值设置为最大内存大小


PS:您可能会考虑将程序更改为将中间结果存储在磁盘或数据库中。

64位操作系统的地址空间限制为4 GB,您的意思是32位?您的答案提供了大量信息,但没有回答“最大值对应最大值”的问题。这里的答案非常简单,物理内存绑定的64位系统没有最大限制,它是documentedYes,但您的答案不包含此信息。另外,在32位版本的JVM中,答案会有所不同,您可能也需要添加它。@talex如果您阅读了所有的要点,并将它们链接在一起,答案就非常清楚了。