JavaFXアプリケーションがあります。JavaFXアプリケーションには、データ処理に使用されるバックグラウンドスレッドが含まれており、ユーザーインターフェイスにその結果を表示します。 私は、データ処理のために、次のコード作成:問題は、私は、アプリケーションを実行し、「runningThread()」関数を実行するために、「スタート」ボタンをクリックした後、メモリやCPUの消費が高いですJavaアプリケーションはますます2GBまでのメモリを消費しています。
public static void runningThread(){
long startTime = java.lang.System.nanoTime();
WSN wsn = new WSN(100, 100, 30, 60, 200);
wsn.initializeNodePosition();
wsn.alphaNodesDead = wsn.nodeNumber/2;
BaseStation BS = new BaseStation(); //the BS is created
BS.x = 125;
BS.y = 50;
BS.maxRadius = 65;
BS.energyModel = new NOEnergyModel();
wsn.BS = BS;
BS.wsn = wsn;
Thread queryThread = new Thread() {
public void run() {
System.out.println("Start");
for(int m=0; m<1000; m++){
System.out.println(m);
wsn.protocol = new HEED(wsn);
wsn.generateHomogeneousWSN(HEEDNODE.class, new MITModel(), new SimpleAggregation());
wsn.protocol.setRadiusAndNeighbors();
boolean running = true;
while(running){
wsn.roundPerformed++;
wsn.protocol.election_cluster_formation(); //cluster formation
wsn.defineStandardCHRouting(); //defines the routing at CH level
wsn.protocol.runRound();
System.out.println(wsn.roundPerformed);
if(wsn.deadNodeList.size() >= wsn.alphaNodesDead){
long stopTime = java.lang.System.nanoTime();
System.out.println("end: " + (stopTime-startTime)/1000000000.0);
running = false;
}
}
}
}
};
queryThread.start();
}
をし、 2GB以上のメモリと90%のCPUに達すると、 "for(int m = 0; m < 1000; m ++)"ループが非常に遅くなります。各ループが始まる前にすべてのオブジェクトをクリアしています。 オブジェクトが参照を失ったら、JVMは自動的に再利用のためにメモリを再利用しますか?
スピードは遅くなりますが、他のヘルプはありません。ガベージコレクタはどのように呼び出すことができますか? – Albert
System.gc()呼び出しでガベージコレクションをリクエストできます。 – Lee