我的 Linux 服务器上有 16GB RAM 和 8 个 CPU,安装了 JDK8 x64。
我已将 JVM 堆大小设置如下,但不断收到 java.lang.OutOfMemoryError
JAVA_OPTS="-Xms2048m -Xmx4096m -XX:MaxPermSize=1024m -XX:-UseGCOverheadLimit
任何建议,最小/最大/PermGen 堆大小应该是多少。
最佳答案
导致内存不足错误,因为您的代码消耗的堆大小超过了Java分配的大小。
这可能是由多种原因造成的。
1) 您的代码体积庞大,需要更多内存:仅打印“Hello World”的简单代码不会消耗太多内存。然而,1 GB 源代码的冗长且庞大的应用程序将消耗大量内存。如果是这种情况,您可以尝试增加内存参数。
2) 错误代码:错误代码会消耗无用的内存,并且稍后不会释放它,导致连续使用的堆大小超过垃圾收集的大小。如果这是代码,您可能需要确定代码的问题。您实际上可以使用Java Flight Record (JFR)来识别消耗如此大量堆的方法或类。 。
理想的堆内存大小因情况而异,您必须了解确切的堆大小的要求。
关于java - 在物理内存为 16 GB RAM 和 8 个 CPU 的 Linux 上,JDK8 64 位的 JVM 堆大小 (Xms Xmx) 应该是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53332953/