繁体   English   中英

java.lang.OutOfMemoryError:Java堆空间-堆栈跟踪含义

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

我在一个长寿命的应用程序中有一条消息,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)

谢谢。

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

java.lang.OutOfMemoryError:Java堆空间

Java应用程序只能使用有限的内存。 此限制是在应用程序启动期间指定的。 Java内存分为两个不同的区域。

这些区域称为堆空间permgen:

差异存储区

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

如果未明确设置大小,将使用特定于平台的默认值。

因此,当您尝试向堆空间区域添加更多数据但没有足够的空间时,将触发“ java.lang.OutOfMemoryError:Java堆空间”错误。

请注意,可能有足够的物理内存可用,但是如果达到了此Java程序的堆大小限制,则会引发“ java.lang.OutOfMemoryError:Java堆空间”错误。

java.lang.OutOfMemoryError的原因:Java堆空间

  1. 使用率/数据量激增。

该应用程序旨在处理一定数量的用户或一定数量的数据。 现在,当用户数或数据量突然达到峰值时,在峰值之前正常运行的操作将停止响应并触发java.lang.OutOfMemoryError:Java堆空间错误。

  1. 项目清单

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM