在 Java 中处理 OutOfMemoryError 异常
JVM 无法在堆空间中分配对象时抛出 OutOfMemoryError 异常。堆空间用于存储运行时创建的对象。
JVM 中有两个不同的空间部分,Permgen 和 Heap Space。本教程描述 OutOfMemoryError 异常并演示如何处理它。
Java 中的 OutOfMemoryError 异常
当 Java 虚拟机发现没有足够的内存用于在堆空间中存储新对象时,它会抛出 OutOfMemoryError。
当用户做错事时抛出 OutOfMemoryError。例如,用户试图通过长时间持有对象来处理高数据。
当用户无法处理捕获字符串的第三方库或部署后未清理的应用程序服务器时,这也可能是一个错误。
本机库代码也可能引发此错误;例如,当交换空间不足时,无法满足本地分配。
例子:
package delftstack;
public class Out_Of_Memory_Error{
public void Out_Of_Memory_Array(int array_size) {
try {
Integer[] Demo_Array = new Integer[array_size];
}
catch (OutOfMemoryError e) {
System.err.println("Array size is too large for memory");
System.err.println("The Maximum JVM memory is : " + Runtime.getRuntime().maxMemory());
e.printStackTrace();
}
}
public static void main(String[] args) {
Out_Of_Memory_Error demo = new Out_Of_Memory_Error();
demo.Out_Of_Memory_Array(1000000000);
}
}
这段代码尝试创建一个长度为 1000000000 的数组,这对于 JVM 来说是不可能的,因为它会耗尽内存。输出将显示 JVM 内存和错误。
输出:
Array size is too large for memory
The Maximum JVM memory is : 1046478848
java.lang.OutOfMemoryError: Java heap space
at delftstack.Out_Of_Memory_Error.Out_Of_Memory_Array(Out_Of_Memory_Error.java:6)
at delftstack.Out_Of_Memory_Error.main(Out_Of_Memory_Error.java:17)
处理 Java 中的 OutOfMemoryError 异常
一旦我们知道导致 OutOfMemoryError 的原因,我们就可以修复它,以便 JVM 可以将对象存储在 Java 堆空间中。下面我们来看看 java.lang.OutOfMemoryError 不同原因的不同解决方案。
使用 -Xmx
选项处理 Java 中的 OutOfMemoryError 异常
OutOfMemoryError 最常见的原因是 Java 虚拟机堆空间的大小。IDE 可以使用 -Xmx
选项解决此问题。
此配置将堆空间增加到 1024 大小。但是,增加堆大小并不能保证解决所有错误,例如内存泄漏错误。
堆空间大小的增加也会增加 GC 的长度。让我们看看如何解决堆大小问题。
当我们使用 Eclipse IDE 时,从安装文件夹中打开 eclipse.ini
文件:
现在,我们可以根据系统要求更改 Xmx 值:
现在,重新启动 Eclipse 以解决错误。
使用内存分析器工具处理 Java 中的 OutOfMemoryError 异常
增加堆大小会产生其他问题,但并不能保证解决问题。更好的方法是查看错误所在并相应地解决它。
另一个常见的原因是内存泄漏,如果 JVM 中存在内存泄漏,它也会抛出 OutOfMemoryError。要检查内存泄漏,我们可以使用 IDE 工具。
例如,Eclipse 有 Memory Analyzer Tool (MAT),它可以检查内存泄漏并减少内存消耗。可以从这里下载 MAT。
使用此工具,我们可以分析内存泄漏并解决 OutOfMemoryErorr 错误。
相关文章
JavaFX 文本旋转
发布时间:2023/09/21 浏览次数:96 分类:Java
-
本介绍了如何在 JavaFX 中旋转文本。可以使用 JavaFX.scene.text.Text 类创建文本节点,并在 JavaFX 中使用 setRotate() 来旋转文本。本文介绍了如何在 JavaFX 中旋转文本。
JavaFX 区域与窗格
发布时间:2023/09/21 浏览次数:94 分类:Java
-
本文介绍了 JavaFX 中区域和窗格之间的区别。Region 和 Pane 用于将可调整大小的子节点调整到它们的首选大小,而不是重新定位它们。本文介绍了 JavaFX 中 Region 和 Pane 之间的区别。
JavaFX 媒体播放器
发布时间:2023/09/21 浏览次数:115 分类:Java
-
本文演示了 JavaFX 媒体播放器的正确使用,使用 JavaFX 播放媒体文件。在本文中,我们将学习如何使用 JavaFX 在 Java 中制作媒体播放器。为此,我们将使用内置的 JavaFX 并手动进行设置。
JavaFX 方形按钮
发布时间:2023/09/21 浏览次数:126 分类:Java
-
本文介绍如何在 JavaFX 中创建方形按钮。可以通过扩展 Java 中的 ToolBar 类来创建方形按钮。本文介绍了如何在 JavaFX 中创建方形按钮。
JavaFX setFill() 方法
发布时间:2023/09/21 浏览次数:187 分类:Java
-
本教程演示了如何在 JavaFX 中使用 setFill() 方法。setFill() 方法用于在 JavaFX 中填充形状和其他元素的颜色。本教程演示了在 JavaFX 中使用 setFill() 方法。
JavaFX FXML 加载异常的解决方法
发布时间:2023/09/21 浏览次数:192 分类:Java
-
本文展示了如何解决 JavaFX FXML 加载异常。这也突出了导致此异常的原因。本文介绍导致 JavaFX FXML 加载异常的原因并提供快速解决方案。导致 JavaFX FXML 加载异常的原因 获得 JavaFX FXML 加载异常的
Java 将文本复制到剪贴板
发布时间:2023/09/21 浏览次数:96 分类:Java
-
本文讨论将文本从 Java 应用程序复制到剪贴板的方法。本文讨论将文本从 Java 应用程序复制到剪贴板。Java 提供了几个元素来显示 Java 应用程序中的文本。
在 Java 中捕获多个异常
发布时间:2023/09/21 浏览次数:167 分类:Java
-
本教程介绍了可以在 Java 中捕获多个异常的方法。今天我们将看看我们可以在 Java 中使用和捕获多个异常的方法。Java 中的异常发生在运行时发生不需要的事件时。
什么是 Java 中的空指针异常
发布时间:2023/09/21 浏览次数:122 分类:Java
-
这篇文章教你如何理解 Java 中的空指针异常。本文介绍了 Java 空指针异常以及如何处理它。我们已经包含了一些示例程序供你遵循。在 Java 中,任何引用变量的默认值都是指向内存位置但没有任