Java -Xmx,系统最大内存

标签 java memory-management

我的 Java 应用程序通过运行“java -jar j.jar”进程来运行另一个 Java 应用程序。众所周知,J.jar 会根据给定的数据集使用大量内存,并且经常会获得 OutOfMemoryError 堆。所以我想在它上面使用-Xmx,这样我就可以分配尽可能多的内存(或接近)。我正在考虑获取系统上的总内存,然后在 -Xmx 中指定其中的 80-90%。

我的问题有什么解决办法吗?而且,我的解决方案听起来如何?

编辑:我无法减少内存消耗,因为正在使用的内存是 Java 的内置 pack200 压缩,我用它来打包一些 JAR 文件。

最佳答案

在 32 位窗口上 -XmX 的限制是 -Xmx1500m。 共享库阻碍了更大的堆。 您需要大约 2Gb 的 RAM 才能执行此操作。

在非 Windows 操作系统上,您可以做得更大,而 64 位 JVM 可以做得更多。

Windows XP 不会让您拥有超过 3Gb 的 RAM(不管您是否拥有 4Gb 物理内存,从 XP SP3 开始) Vista 可能与 YMMV 不同。

我已经在 64 位 Linux 上的 64 位 JVM 上尝试了 -Xmx4000M,它很好。 考虑到我有 6Gb 的物理内存,这不是一个大要求。

您的 80% 想法很有趣,但我的测试系统运行的百分比比没有不良影响的要高。 (只要你不尝试做任何其他事情。)

另一位评论者是对的,分页出 JVM 的内存镜像并不快。 后来的 JVM 在这方面做得更好(但他们也有更好的垃圾收集器)

如果你不能减少内存消耗——我知道这有多难——那么就拥有大量的物理内存并分配其中的大部分。

关于Java -Xmx,系统最大内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1190837/

相关文章:

delphi - 需要在 Delphi 字符串复制之前分配内存吗?

java - 碧 Jade 报告 : multi line text field

java - 如何使用 JPA 关系实体创建 RestAPI

java - 在 Java 的 for 循环中声明数组有多糟糕?

memory-management - gfortran 解除分配段错误

c++ - 为什么将对象地址存储在缓冲区中会在实例化和删除它们时导致内存泄漏?

java - cvtColor 在 OpenCV for Java 中无法正常工作

java - 如何将xml解析为java对象?

java - MyBatis:选择一个Map进行映射

python - 计算范围 (0,n] 中数字 'x' 的出现次数