我目前正在使用一个独立的Java Swing应用程序,它是一个非常复杂的应用程序,具有许多标签和输入文本字段。我发现,在每次操作之后,如Windows Task Manager中一样,应用程序的内存消耗至少增加了2 MB。当达到约305 MB的总内存消耗时,应用程序将因“内存不足异常”而崩溃。我在事件处理程序中明确提到要进行垃圾回收,但是这样做没有任何好处。我使用JVisualVM对应用程序进行了概要分析。我发现我的班级中几乎没有一个增量斜率永远不会下降的内存图。
从上图得出的结论是,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);
即使这也没有任何改善,但是内存表看起来仍然完全相同。以下是我的问题:
我是根据InspectableInputTextImpl本身的结论来纠正的根据图表导致内存泄漏?
如果我是正确的,你可以分享一下修复问题的想法吗?问题。将实例转换为单例会修复它吗?