我正在使用它连接到HP应用程序的质量中心。我运行了一个很大的应用程序,内存增加了很多,但它并没有减少。它使应用程序崩溃。有人有什么解决方案吗?
谢谢
发布于 2012-09-15 12:21:36
如果你的内存快用完了,你首先要做的就是找出是什么在使用内存,然后看看它是否应该仍然存在,如果不是,为什么它仍然存在。
一个很好的起点是使用this blog上解释的jmap获取一个堆转储。堆转储是当前内存中所有内容的转储,因此要为文件做好准备,该文件至少与分配给VM的内存量一样大。
获得堆转储后,就可以使用Eclipse Memory Analyzer对其进行分析。这将能够告诉你内存的最大用法是什么,并沿着阻止事物被垃圾收集的引用链上下移动。
现在这些都是纯java的东西,所以如果问题出在com4j的本机组件或com对象本身,那么这不会有什么帮助,但它将允许您从您的调查中排除Java端。如果是com组件泄漏了内存,那么试着在没有java端的情况下运行它,看看是否可以单独地重现内存泄漏。在这一点上,您需要使用与我刚才描述的技术相当的Native / COM,但恐怕我对此一无所知。
https://stackoverflow.com/questions/12418142
复制相似问题