1 java
Java内存泄漏
private boolean refreshResponseWindow(MessageObject message) {
this.responsePanel.removeAll();
this.responsePanel.add(message.buildGUI());
this.responsePanel.validate();
message = null;
return true;
Run Code Online (Sandbox Code Playgroud)
}
发生的问题是当我收到越来越多的消息时,我的Java程序的内存使用量继续增长,最终导致它被锁定.我已将内存泄漏隔离到上面的代码,特别是添加过程调用.我假设removeAll会清除我面板的内容,但它似乎仍在继续增长.
注意:message.buildGUI()返回一个显示在responsePanel上的JPanel
跟进:
BuildGUI代码如此显示
public JPanel buildGUI() throws Exception {
JPanel busPanel = new JPanel();
busPanel.setLayout(new GridBagLayout());
busPanel.setPreferredSize(new Dimension(Globals.panelW, Globals.panelH));
busPanel.setMinimumSize(new Dimension(Globals.panelW, Globals.panelH));
final JLabel headingLabel = new JLabel();
headingLabel.setFont(new Font("", Font.PLAIN, 18));
headingLabel.setText(this.name);
final GridBagConstraints gridBagConstraints_heading = new GridBagConstraints();
gridBagConstraints_heading.gridwidth = 2;
gridBagConstraints_heading.gridy = 0;
gridBagConstraints_heading.gridx = 0;
busPanel.add(headingLabel, gridBagConstraints_heading);
//Many more gui components marked as final
return busPanel;
Run Code Online (Sandbox Code Playgroud)
返回的面板没有监听器仅用于显示目的.
该buildGUI方法是否将侦听器添加到业务对象中?这是内存泄漏的常见原因.调用responsePanel.removeAll()将删除组件,但组件仍可能在responsePanel其他对象上注册为侦听器,从而导致它们保留在内存中.
| 归档时间: |
|
| 查看次数: |
1914 次 |
| 最近记录: |