私はJavaでゲームを作っています。私はすぐにオーディオ再生をテストしていました。以下のコードが主な方法です。Javaのガベージコレクタ発生
final CountDownLatch latch = new CountDownLatch(1);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new JFXPanel();
latch.countDown();
}
});
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
//assets grabs a Media object
new MediaPlayer(Assets.getMedia("aBstracT - Vivacious Vagabonds.mp3")).play();
//cannot create an anonymous inner class of media player
new Object() {
@Override
public void finalize() {
System.out.println("Garbage collected");
}
};
私は音楽が40秒で一貫して停止したことを見つけるために混乱していました。私の推測はガベージコレクション(私はメディアオブジェクトへの参照を保持していないことを認識した)でした。これは印刷物から確認しました。
私の質問は次のとおりです:
なぜ40秒ですか?ガベージコレクションはいつ行われるのですか?私はこの奇妙なことを発見し、JVMは未使用のオブジェクトが多すぎる場合にのみガベージコレクションを試みると常に考えていました。
第2に、オブジェクトをガベージコレクションするためにJVMをマークする方法はありますか? JVMがすべてのオブジェクトへの参照を調べてからメモリから削除する必要があるかどうかを判断するのは非効率的です。ガベージコレクションが間違っていた場合のメモリリークについても心配しています。
ありがとうございます。
"ガベージコレクションが間違っていました"それを心配しないでください。よりスマートな人々によって書かれていますので、あなたが書いたコードに集中する必要があります。 – Kayaman