java.lang.OutOfMemoryError: Java heap space - Stack Trace Meaning

java.lang.OutOfMemoryError: Java heap space - Stack Trace Meaning

我在一个长期存在的应用程序中有一条消息,java.lang.OutOfMemoryError:Java 堆 space。

我想知道错误消息后显示的堆栈跟踪的含义;我可以找到读取此跟踪的问题吗?堆栈跟踪的含义是什么?

java.lang.OutOfMemoryError: Java heap space
    at java.nio.HeapIntBuffer.<init>(Unknown Source)
    at java.nio.IntBuffer.allocate(Unknown Source)
    at com.sun.javafx.tk.quantum.UploadingPainter.run(Unknown Source)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
    at com.sun.javafx.tk.RenderJob.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)java.lang.OutOfMemoryError: Java heap space
    at java.nio.HeapIntBuffer.<init>(Unknown Source)
    at java.nio.IntBuffer.allocate(Unknown Source)
    at com.sun.javafx.tk.quantum.UploadingPainter.run(Unknown Source)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
    at com.sun.javafx.tk.RenderJob.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
java.lang.OutOfMemoryError: Java heap space
    at java.nio.HeapIntBuffer.<init>(Unknown Source)
    at java.nio.IntBuffer.allocate(Unknown Source)
    at com.sun.javafx.tk.quantum.UploadingPainter.run(Unknown Source)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
    at com.sun.javafx.tk.RenderJob.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
java.lang.OutOfMemoryError: Java heap space
    at java.nio.HeapIntBuffer.<init>(Unknown Source)
    at java.nio.IntBuffer.allocate(Unknown Source)
    at com.sun.javafx.tk.quantum.UploadingPainter.run(Unknown Source)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
    at com.sun.javafx.tk.RenderJob.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

谢谢。

不幸的是,堆栈只代表分配内存失败的调用,但这可能不是原因。您的程序中可能有其他部分正在泄漏内存,或者您正在打开一个大文档,或者如果您的应用程序是基于 Web 的,那么太多用户正在 运行 某些进程并且他们正在使用所有内存。 jvisualvm.exe(包含在您的 jdk 中)是分析内存的绝佳工具。

java.lang.OutOfMemoryError: Java堆space

Java 允许应用程序使用有限的内存。此限制在应用程序启动期间指定。 Java内存被分成两个不同的区域。

这些区域称为堆 spacepermgen:

这些区域的大小是在 Java 虚拟机 (JVM) 启动期间通过指定 -Xmx 和 -XX:MaxPermSize 等参数设置的。 Here 你可以看到如何设置这些参数

如果您没有明确设置尺寸,将使用 platform-specific 默认值。

所以 – 当你尝试向堆中添加更多数据时,将触发“java.lang.OutOfMemoryError: Java堆space”错误space 面积,但没有足够的空间

请注意,可能有足够的物理内存可用,但如果已达到此 Java 程序的堆大小限制,“java.lang.OutOfMemoryError: Java 堆 space” 抛出错误。

java.lang.OutOfMemoryError的原因:Java堆space

  1. usage/data 成交量激增。

该应用程序旨在处理 一定数量的用户或一定数量的数据。现在,当 用户数量或数据量突然激增,操作 在尖峰停止响应之前正常运行,并且 触发 java.lang.OutOfMemoryError: Java 堆 space 错误。

  1. 列表项

特定类型的编程错误会导致您的应用程序不断消耗更多内存。每次使用应用程序的泄漏功能时,它都会将一些对象留在 Java 堆 space 中。随着时间的推移,泄漏的对象会消耗所有可用的 Java 堆 space 并触发已经熟悉的 java.lang.OutOfMemoryError: Java heap space 错误。