次のコードは、新しいオーディオ クリップを作成して再生し、3 秒間スリープしてから、再生が終了したら閉じます。close() の呼び出しにもかかわらず、while ループが実行されるたびに jvm のメモリ使用量がサウンド クリップのサイズだけ増加するのを見ています。
Javaでコーディングしたゲームに参加しており、サウンドを扱っています。サウンドが再生されるたびに、使用しているメモリを増やすことはできません。
私は何が欠けていますか?
import java.io.File;
import javax.sound.sampled.*;
public class ClipLeak{
public static void main(String[] args) throws Exception{
while(true){
File soundFile = new File("./sound.wav");
AudioInputStream sound = AudioSystem.getAudioInputStream(soundFile);
DataLine.Info info = new DataLine.Info(Clip.class, sound.getFormat());
Clip clip = (Clip) AudioSystem.getLine(info);
clip.open(sound);
sound.close();
clip.addLineListener(new LineListener(){
public void update(LineEvent event){
if(event.getType() == LineEvent.Type.STOP){
event.getLine().close();
}
}
});
clip.start();
Thread.sleep(2000);
}
}
}