当我执行我的JUnit
测试时,会遇到这个错误信息:
java.lang.OutOfMemoryError: GC overhead limit exceeded
我知道什么是OutOfMemoryError
,但是GC overhead limit是什么意思?我该如何解决这个问题?
当我执行我的JUnit
测试时,会遇到这个错误信息:
java.lang.OutOfMemoryError: GC overhead limit exceeded
我知道什么是OutOfMemoryError
,但是GC overhead limit是什么意思?我该如何解决这个问题?
已解决:
只需在 gradle.properties
文件中添加 org.gradle.jvmargs=-Xmx1024m
,如果不存在,则创建该文件。
您还可以通过将以下内容添加到gradle.properties
文件中来增加内存分配和堆大小:
org.gradle.jvmargs=-Xmx2048M -XX\:MaxHeapSize\=32g
它不必是2048M和32g,可以根据需求进行调整。
Java堆大小描述(xms,xmx,xmn)
-Xms size in bytes
Example : java -Xms32m
设置Java堆的初始大小。 默认大小为2097152 (2MB)。 这些值必须是1024字节(1KB)的倍数且大于1024字节。 (-server标志将默认大小增加到32M。)
-Xmn size in bytes
Example : java -Xmx2m
设置新生代Eden区的初始Java堆大小。默认值为640K。 (-server标志将默认大小增加到2M。)
-Xmx size in bytes
Example : java -Xmx2048m
设置Java堆可以增长到的最大大小。 默认大小为64M。(-server标志将默认大小增加到128M。) 最大堆限制约为2GB(2048MB)。
Java内存参数(xms、xmx、xmn)格式化
在设置Java堆大小时,应使用字母“m”或“M”表示MB,或使用“g”或“G”表示GB,指定您的内存参数。如果指定“MB”或“GB”,则设置无效。有效的参数如下所示:
-Xms64m或-Xms64M -Xmx1g或-Xmx1G 也可以使用2048MB来指定2GB 此外,请确保在指定参数时仅使用整数。使用-Xmx512m是一个有效的选项,但使用-Xmx0.5g会导致错误。
本参考资料对于某些人来说可能很有帮助。
要在IntelliJ IDEA中增加堆大小,请按照以下说明进行操作。这对我很有效。
对于Windows用户,
转到IDE安装的位置并搜索以下内容。
idea64.exe.vmoptions
-Xms512m
-Xmx2024m
-XX:MaxPermSize=700m
-XX:ReservedCodeCacheSize=480m
简而言之,我必须将我的应用程序级别的'build.gradle'文件从以下内容更改为: //...
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.sign_config_release
}
debug {
debuggable true
signingConfig signingConfigs.sign_config_debug
}
}
//...
到
//...
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.sign_config_release
}
debug {
debuggable true
signingConfig signingConfigs.sign_config_debug
}
}
//...
@Buhb 我在一个普通的Spring Boot Web应用程序的主方法中,通过以下代码进行了复现:
public static void main(String[] args) {
SpringApplication.run(DemoServiceBApplication.class, args);
LOGGER.info("hello.");
int len = 0, oldlen=0;
Object[] a = new Object[0];
try {
for (; ; ) {
++len;
Object[] temp = new Object[oldlen = len];
temp[0] = a;
a = temp;
}
} catch (Throwable e) {
LOGGER.info("error: {}", e.toString());
}
}
导致错误的示例代码也来自于Oracle Java8语言规范。
我不知道这是否仍然有关,但我想分享一下对我有效的方法。
将Kotlin版本更新到最新可用版本。https://blog.jetbrains.com/kotlin/category/releases/
就这样了。