I call it memory leak, you can call it whatever you want

I'm making my first game for a school project but I have an Issue managing the Audio side.
Everytime I call Shoot, it starts the 1 second clip but it stays in the memory. The only way I can avoid this so far is to do the Clip.Close() but thats going to stop the audio right after starting it so it doesnt help.
Code
SoundManager sm = new SoundManager();
public synchronized void shoot() {
if (tm.mesure() > 100) {
pro.add(new Projectiles(position, projectileSpeed));
sm.shoot();
tm.mark();
}
SoundManager class
Code
void shoot() {
try {
AudioInputStream audio = AudioSystem.getAudioInputStream(new File("impact.wav"));
Clip clip = AudioSystem.getClip();
clip.open(audio);
clip.start();
} catch (UnsupportedAudioFileException ex) {
Logger.getLogger(SoundManager.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(SoundManager.class.getName()).log(Level.SEVERE, null, ex);
} catch (LineUnavailableException ex) {
Logger.getLogger(SoundManager.class.getName()).log(Level.SEVERE, null, ex);
}
}