线程“Thread-8”java.lang.OutOfMemoryError 中的异常:Java 堆空间

Posted

技术标签:

【中文标题】线程“Thread-8”java.lang.OutOfMemoryError 中的异常:Java 堆空间【英文标题】:Exception in thread "Thread-8" java.lang.OutOfMemoryError: Java heap space 【发布时间】:2015-10-23 15:13:12 【问题描述】:
Exception in thread "Thread-8" java.lang.OutOfMemoryError: Java heap space
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "Thread-8"
Exception in thread "Thread-6" java.lang.OutOfMemoryError: Java heap space
Exception in thread "Thread-0" java.lang.OutOfMemoryError: Java heap space
Exception in thread "Thread-1" java.lang.OutOfMemoryError: Java heap space
Exception in thread "Thread-3" java.lang.OutOfMemoryError: Java heap space

我遇到了这个异常。谁能帮我理解为什么会发生这种异常?

该异常未提供我的代码中发生这种情况的位置。

编辑: 从我收到的所有答案中,我意识到我需要某种 Java Profiler 来帮助我检测 内存泄漏 的位置。因为我使用 NetBeans 来开发我的应用程序,所以我决定使用它的嵌入式分析器。

@MuhammadGhazanfar 给了我这个非常有用的链接: Best way to profile memory usage in a Java application?

感谢您的宝贵时间和所有帮助。

【问题讨论】:

【参考方案1】:

它发生在哪里并不重要:它只是发生在需要一些内存的地方;并没有发现任何剩余。

基本上,您想学习如何使用 Java 分析器来分析应用程序的内存使用情况;为了弄清楚您正在处理的内存泄漏;或了解实际需要多少内存;可能只是您的应用程序在运行“java”帐户时需要比默认设置更多的内存。

【讨论】:

我做了一些研究,但我发现的帖子都没有帮助我。从其中一篇文章中,我添加了 -Xmx1024m -Xms512m 但没有帮助我。我知道问题是泄漏我只是想了解在哪里。当我发布这个问题时,我的意图是看看是否有人已经看过它,也许知道什么类型的代码会创建这样的异常。我并不是为了这个问题而提出一个问题。我需要方向,因为我不知道去哪里找。您的建议是使用 Java Profiler。我将在互联网上查找有关它的更多信息。谢谢。 好吧,“调试 java 内存泄漏”给了我一些开箱即用的好链接。但是好吧,有时候真的需要这样才能走上正轨……【参考方案2】:

经过Java docs,OutOfMemoryError 是,

当 Java 虚拟机因为内存不足而无法分配对象时抛出,并且垃圾收集器无法提供更多内存。


为什么会这样?您的应用程序只是使用了过多的内存。

你能做些什么来解决它?好吧,你可以试试下面列出的一些东西,看看here 和here 了解更多

尽可能使用Singleton pattern。 避免使用大型数组。将链表放入内存更容易。 不要在不需要的时候制作物品。 使用-Xmx 选项和java 设置更大的堆大小。

【讨论】:

感谢您的回复。你很善良。无论如何要跟踪消耗所有内存的对象吗?你会建议我用什么来了解泄漏的来源? @ThelmaJay 你需要一个分析器。阅读这些链接。 Best-way-to-profile-memory-usage-in-a-java-applicationHow-to-memory-profile-in-java @ThelmaJay 没问题! @MuhammadGhazanfar 告诉你。你很善良。我会读的:)。 @ThelmaJay 完全没问题 :) 如果您仍然有同样的问题,请回来!

以上是关于线程“Thread-8”java.lang.OutOfMemoryError 中的异常:Java 堆空间的主要内容,如果未能解决你的问题,请参考以下文章

Python之路——多线程

指定线程执行的顺序---join()

JVM78参数详解及优化

MySQL的SQL语句 -复制语句- 控制副本服务器的 SQL 语句 - START SLAV

如何在tid xxxxx(Thread-X)中解决Android致命信号11(SIGSEGV),代码1,故障地址0x0?

mysql连接数,缓存区大小,连接超时时间如何设置呢?