[内存泄漏和OutOfMemoryException-Java Swing应用程序

问题描述 投票:2回答:1

我目前正在使用一个独立的Java Swing应用程序,它是一个非常复杂的应用程序,具有许多标签和输入文本字段。我发现,在每次操作之后,如Windows Task Manager中一样,应用程序的内存消耗至少增加了2 MB。当达到约305 MB的总内存消耗时,应用程序将因“内存不足异常”而崩溃。我在事件处理程序中明确提到要进行垃圾回收,但是这样做没有任何好处。我使用JVisualVM对应用程序进行了概要分析。我发现我的班级中几乎没有一个增量斜率永远不会下降的内存图。Memory Usage graph for class InspectableInputTextImpl

但是对于其他类别,图形就像波形一样非常正常,如下图所示:Memory Usage graph for class char array

从上图得出的结论是,InspectableInputTextImpl类正在发生内存泄漏。要修复,我为上述类添加了weakReference实例化,如下所示:

InspectableInputTextImpl inputText = new InspectableInputTextImpl(screen, componentId, length);
        WeakReference<InspectableInputTextImpl> weakInputText = new WeakReference<InspectableInputTextImpl>(inputText);
        ((TInputText) weakInputText.get()).setCustomDocument(new TRestrict4InputTextDocument());
        ((TInputText) weakInputText.get()).setMaxLength(maxLength);
        ((TInputText) weakInputText.get()).setRequirement(required);

即使这也没有任何改善,但是内存表看起来仍然完全相同。以下是我的问题:

  1. 我是根据InspectableInputTextImpl本身的结论来纠正的根据图表导致内存泄漏?

  2. 如果我是正确的,你可以分享一下修复问题的想法吗?问题。将实例转换为单例会修复它吗?

java swing memory-leaks weak-references jvisualvm
1个回答
0
投票
您在确认问题到底是什么(您的问题1)后,可以着手解决问题(您的问题2)。
© www.soinside.com 2019 - 2024. All rights reserved.