我在一个长期存在的应用程序中有一条消息,一个java.lang.OutOfMemoryError:Java堆空间。
我想知道错误消息后显示的堆栈跟踪的含义;我能找到读这个痕迹的问题吗?堆栈跟踪的含义是什么?
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)
谢谢。
答案 0 :(得分:1)
不幸的是,堆栈只代表无法分配内存的调用,但这可能不是原因。您的程序中可能还有其他部分正在泄漏内存,或者您正在打开一个大文档,或者如果您的应用程序是基于Web的,则有太多用户正在运行某个进程并且他们正在使用所有内存。 jvisualvm.exe(包含在你的jdk中)是分析内存的绝佳工具。
答案 1 :(得分:1)
java.lang.OutOfMemoryError:Java堆空间
允许Java应用程序使用有限的内存。在应用程序启动期间指定此限制。 Java内存分为两个不同的区域。
这些区域称为堆 空间 和 permgen:
通过指定-Xmx和-XX:MaxPermSize等参数,在Java虚拟机(JVM)启动期间设置这些区域的大小。 Here您可以看到如何设置这些参数
如果您没有明确设置尺寸,将使用特定于平台的默认值。
所以 - 您尝试将更多数据添加到堆空间区域时会触发“java.lang.OutOfMemoryError:Java堆空间”错误,但是没有足够的空间。
请注意,可能有大量可用的物理内存,但如果此Java程序的堆大小限制已被命中,则会抛出“java.lang.OutOfMemoryError:Java堆空间”错误。
java.lang.OutOfMemoryError的原因:Java堆空间
该应用程序旨在处理 一定数量的用户或一定数量的数据。现在,当 用户数量或数据量突然飙升,操作 在尖峰停止响应之前正常运行 触发java.lang.OutOfMemoryError:Java堆空间错误。
特定类型的编程错误将导致应用程序不断消耗更多内存。每次使用应用程序的泄漏功能时,它都会将一些对象留在Java堆空间中。随着时间的推移,泄漏的对象会占用所有可用的Java堆空间,并触发已经熟悉的java.lang.OutOfMemoryError:Java堆空间错误。