Следующий код создает новый аудиоклип, воспроизводит его, спит в течение 3 секунд, а затем закрывает его по окончании воспроизведения. Несмотря на вызов close (), я наблюдаю увеличение использования памяти jvm на размер аудиоклипа каждый раз, когда выполняется цикл while.
Я участвую в игре, написанной на языке 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);
}
}
}