java - Eclipse 内存分析器 : java. lang.OutOfMemoryError: Java 堆空间

标签 java tomcat out-of-memory heap-dump openejb

我的应用程序有问题。当我尝试打开页面时,应用程序引发错误 java.lang.OutOfMemoryError: Java heap space

我们使用 Struts2 作为框架,Tomcat 6 作为服务器,Openejb 作为数据库连接。

我试图通过 Eclipse 扩展内存分析器找出内存不足的原因,但我不得不说这并不容易理解。

这是内存分析器的报告:

Top consumers Description Shortest Paths to the accumulation point Accumulated Objects in dominator tree

我不太确定是什么引发了这个错误,但有没有可能是数据库连接没有关闭,然后包含这个连接的映射对于 JVM 来说变得太大了。

我通过为 JVM 提供更多内存空间来解决问题,但我不确定这是解决此问题的好方法。

谁能帮帮我?

谢谢

最佳答案

根据您的快照,您的问题来自字段resourceEntriesWebappClassLoader这是根据 javadoc:

The cache of ResourceEntry for classes and resources we have loaded, keyed by resource name.

换句话说,它是一个缓存,将存储通过您的 Web 应用程序的 ClassLoader 加载的所有资源文件和类的所有元信息,以避免扫描整个类路径在每次调用时,因为当您有很多 jar 文件时,它可能会非常慢,尤其是。

据我所知the source code ,对我来说,除了像您已经做的那样增加堆大小之外,您无能为力。

关于java - Eclipse 内存分析器 : java. lang.OutOfMemoryError: Java 堆空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40886028/

相关文章:

java - 如何使用 Apache POI 加载大型 xlsx 文件?

java - Apache 凤凰java.lang.OutOfMemoryError : unable to create new native thread

Java 文件路径 Android

c# - IIS 上的 SOA/web 服务 : Java on Tomcat or C# (. NET)?

java - 当有超过 1 个 tomcat 运行时如何分配 jvm 内存

apache - (111)连接被拒绝 - Apache 反向代理和 Tomcat 8.5.51 - Docker Compose

c# - 未使用所有内存/限制时出现内存不足异常

java - 单个类中的 JUnit 多重测试

java - 如何修复 OptaPlanner 中的构造启发式?

.net - .NET 应用程序中与 native 堆相关的内存泄漏