こんにちは、java.swing.timer を使用する 1 つのアプリケーションがあり、これはループしています。問題は、私の Windows メモリ プロセスがまだ熱くなり、停止しないことです。System.gc() などを使用して変数をクリーンアップしようとしましたが、機能しません。これをスレッド、タイマースタック、スイングタイマーでテストするサンプルを作成しました。jcombobox 内に itens を追加しても、メモリはまだ増加しています。
コードは次のとおりです。
//マイタイマー
@Action
public void botao_click1() {
jLabel1.setText("START");
timer1 = new java.util.Timer();
timer1.schedule(new TimerTask() {
@Override
public void run() {
adicionarItens();
limpar();
}
}, 100, 100);
}
@Action
public void botao_click2() {
thread = new Thread(new Runnable() {
public void run() {
while (true) {
adicionarItens();
try {
Thread.sleep(100);
limpar();
} catch (InterruptedException ex) {
Logger.getLogger(MemoriaTesteView.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
thread.start();
}
private void limpar() { // CleanUp array and jcombobox
texto = null;
jComboBox1.removeAllItems();
jComboBox1.setVisible(false);
//jComboBox1 = null;
System.gc();
}
private void adicionarItens() { //AddItens
texto = new String[6];
texto[0] = "HA";
texto[1] = "HA";
texto[2] = "HA";
texto[3] = "HA";
texto[4] = "HA";
texto[5] = "HA";
//jComboBox1 = new javax.swing.JComboBox();
jComboBox1.setVisible(true);
for (int i = 0; i < texto.length; i++) {
jComboBox1.addItem(texto[i].toString());
}
System.out.println("System Memory: "
+ Runtime.getRuntime().freeMemory() + " bytes free!");
}
助けてください!!! =(