解决 Java 中 Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded 异常
本篇文章介绍了 Java 中的“Java.lang.outofmemoryerror: GC overhead limit exceeded”错误。
Java.lang.outofmemoryerror: GC overhead limit exceeded错误
与其他编程语言不同,Java运行时使用垃圾收集器GC进程进行垃圾收集。 在Java中,每当内存的特定部分未被使用时,垃圾收集器就会为它们清除内存。
当我们的代码或应用程序耗尽所有内存并且 GC 无法再清理内存时,就会出现错误 Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded。
错误 Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded 表示 JVM 执行垃圾收集的时间过长。 当 JVM 花费 98% 的时间进行垃圾回收时,就会抛出这个错误,并且只有另外 2% 的堆可以恢复。
这是引发相同错误的示例:
package jiyik;
import java.util.*;
public class Example {
public static void main(String args[]) throws Exception {
Map DemoMap = System.getProperties();
Random DemoRandom = new Random();
while (true) {
DemoMap.put(DemoRandom.nextInt(), "value");
}
}
}
上面的代码会不断地将随机值放入map中,直到垃圾回收达到98%,并且会抛出 Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded。 堆内存用于映射中。
查看输出:
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"
即使我们使用并行垃圾收集器运行此代码,它仍然会抛出相同的错误。 通过CMD查看示例:
java -Xmx100m -XX:+UseParallelGC Example.java
它仍然会抛出相同的错误。 查看输出:
C:\Users\Sheeraz>java -Xmx100m -XX:+UseParallelGC Example1.java
Note: Example1.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.base/java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1047)
at java.base/java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006)
at java.base/java.util.Properties.put(Properties.java:1301)
at jiyik.Example.main(Example1.java:9)
解决Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded错误
解决此错误的方法是防止内存泄漏。 确保遵循以下几点,以便防止内存泄漏:
- 确定完成堆内存分配的位置。
- 最佳实践是避免创建大量弱引用或临时对象,因为它们大多是内存泄漏的原因。
- 识别在堆上占用较大空间的对象。
相关文章
修复 Java 中错误 Error: Else Without if
发布时间:2023/07/13 浏览次数:183 分类:Java
-
本篇文章我们将了解在用 Java 编写代码时只说 'else' without 'if' 的错误。 我们还将找出导致此错误的可能原因并找到解决方案。Java 中 error: 'else' without 'if'
Java 中 The System Cannot Find the File Specified
发布时间:2023/07/13 浏览次数:99 分类:Java
-
本篇文章介绍如何解决 Java 中的 The system cannot find the file specified 错误。修复Java中 The system cannot find the file specified 错误
Java 中的无效字符常量
发布时间:2023/07/13 浏览次数:152 分类:Java
-
本 Java 文章将讨论无效字符常量。 但在此之前,我们需要了解字符常量。Java字符常量 单字符常量,也称为字符常量,是封装在一对 '' 或单引号中的单个字符。
解决 Java 中 Missing Method Body or Declare Abstract
发布时间:2023/07/13 浏览次数:68 分类:Java
-
本篇文章讨论编译时错误、missing method body, or declare abstract。 在这里,我们将经历三个不同的步骤。首先,我们将了解一个Java程序来了解错误。 其次,突出显示此错误的可能原因,并最终找到
在 Java 中使用 Scanner 时没有此类元素异常
发布时间:2023/07/13 浏览次数:72 分类:Java
-
本篇文章将介绍如何在 Java 中使用 Scanner 时解决 NoSuchElementException 错误。在 Java 中使用 Scanner 时没有此类元素异常 Scanner 类用于在 Java 程序中获取用户输入。 它使用多种实用方法,如 next()、
Java 错误 Javac Is Not Recognized as an Internal or External Command, Operable
发布时间:2023/07/13 浏览次数:108 分类:Java
-
本文介绍了 Java 的 'javac' is not recognized as an internal or external command, operable program or batch file 的可能原因以及该错误的可能解决方案。 首先,我们来看看 javac 是什么。Java 中的 Javac
Java 错误 Java.Net.SocketTimeoutException: Connection Timed Out
发布时间:2023/07/13 浏览次数:161 分类:Java
-
在本篇文章中,我们将讨论 java.net.SocketTimeoutException: Connection timed out。 但首先,让我们仔细看看套接字和超时的概念。Java 中的套接字 两个计算机应用程序之间的逻辑链接可能有多个端点,其
Java 错误 Char Cannot Be Dereferenced
发布时间:2023/07/13 浏览次数:87 分类:Java
-
本篇文章介绍如何解决Java的 java char cannot be dereferenced 错误。Java Char cannot be dereferenced 当我们尝试使用 equals() 方法检查一个字符是否与另一个字符相等时,会出现错误 java char can not be dereferenc
JavaFX 中 InvocationTargetException
发布时间:2023/07/13 浏览次数:165 分类:Java
-
本篇文章介绍如何解决 JavaFX 中的 InvocableTargetException。修复 JavaFX 中的 InspirationTargetException 当我们使用 JavaFX 时,会发生 InvokingTargetException 异常。