Ubuntu 14 JVM - 无法为卡标记阵列保留足够的空间

Ubuntu 14 JVM - 无法为卡标记阵列保留足够的空间

升级到 Ubuntu 14 后,我遇到所有 JVM 崩溃的问题。

我重新安装了 Java(oracle 和 openjdk 版本)。我花了一些时间调整 JVM 堆参数,现在终于可以运行 Java 应用程序了。

现在的问题是,每次我启动 SQLDeveloper 时,我的 Eclipse JVM 都会给我:“无法为卡标记阵列保留足够的空间”。

如果我理解正确的话,这与 JVM 内存块分配有关。

我必须遵守什么规则来防止这种情况发生?

机器信息:

Ubuntu 14.04 LTS;64 位;CPU Intel Core2 Duo;8GB 内存

Eclipse:java-7-oracle;-d64;-XX:MaxPermSize=256M;-Xms512m-Xmx512m;

Eclipse 运行/调试:java-6-openjdk-amd64;-Xms1024m;-Xmx1024m;-XX:+UseSerialGC;

SQL开发器:java-7-oracle;-XX:MaxPermSize=256M;

答案1

JVM 正在尝试分配一块连续的内存。由于系统上有足够的内存,因此内存必须是碎片化的。

为了解决这个问题,我将初始堆大小设置得很低(默认 128 不起作用),并允许 JVM 处理它。

我将 JVM 执行参数从:

java-6-openjdk-amd64; -Xms1024m; -Xmx1024m; 

到:

java-6-openjdk-amd64; -Xms64m; -Xmx1024m; 

更新:

我还将 overcommit_ratio 从 100(默认值)降低到了 50。

$ cat /proc/sys/vm/overcommit_ratio

我知道建议将其保留为 100,但是自从我进行了更改后,当我并行运行 Chromium/Eclipse/SQLDeveloper 时,就不会出现 jvm 错误。

相关内容