java - 在物理内存为 16 GB RAM 和 8 个 CPU 的 Linux 上,JDK8 64 位的 JVM 堆大小 (Xms Xmx) 应该是多少

标签 java jvm 64-bit heap-memory permgen

我的 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/

相关文章:

jvm - Java、Java 虚拟机、Java 平台、

c# - VisualStudio C# x64,为什么 AddReference 选项、.NET 选项卡指向 x86 DLL 而不是 x64?

android - Android USB 驱动程序是否可以互换?

java - Windows 10 通知中的空白图标

java - 如何在Spring中添加/设置查询参数?

java - 什么是循环反转技术?

asp.net - 如何使用 VS2010 在开发服务器上测试将我的 ASP.NET Web 应用程序作为 64 位进程运行?

java.lang.ClassNotFoundException : sun. jdbc.odbc.JdbcOdbcDriver

java - Spring 社会融合

java - 当我在 Linux 或 Windows PC 上使用 Java 时。它使用哪个 JVM?是 j9 还是 JamVM 还是 Squeak?