Not enough memory

01.08.2009 01:26:17 class hstar.hhexen.HhexenDemo start()
SCHWERWIEGEND: Exception in game loop
java.lang.OutOfMemoryError: Direct buffer memory
   at java.nio.Bits.reserveMemory(Bits.java:633)
   at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:95)
   at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:288)
   at com.jme.util.geom.BufferUtils.createByteBuffer(BufferUtils.java:769)
   at com.jmex.audio.util.AudioLoader.read(AudioLoader.java:128)
   at com.jmex.audio.util.AudioLoader.loadOGG(AudioLoader.java:73)
   at com.jmex.audio.util.AudioLoader.fillBuffer(AudioLoader.java:65)
   at com.jmex.audio.openal.OpenALSystem.createAudioTrack(OpenALSystem.java:184)
   at com.jmex.audio.openal.OpenALSystem.createAudioTrack(OpenALSystem.java:58)
   at hstar.hhexen.engine.Utils.loadTrack(Utils.java:791)
   at hstar.hhexen.engine.core.sound.Sound.getMusicTrack(Sound.java:167)
   at hstar.hhexen.entity.ControllableEntity$FightType$8.resolve(ControllableEntity.java:899)
   at hstar.hhexen.entity.ControllableEntity$FightType$8.resolve(ControllableEntity.java:896)
   at hstar.commons.shell.LazyLoadingRef.getObject(LazyLoadingRef.java:31)
   at hstar.hhexen.entity.ControllableEntity$FightType.getSong(ControllableEntity.java:908)
   at hstar.hhexen.engine.core.sound.BackgroundMusicSwitcher.onTick(BackgroundMusicSwitching.java:33)
   at hstar.hhexen.engine.core.entities.Entities.executeHooks(Entities.java:204)
   at hstar.hhexen.engine.core.entities.Entities.onTick(Entities.java:252)
   at hstar.hhexen.engine.core.Core.onTick(Core.java:240)
   at hstar.hhexen.engine.AbstractHhexen.update(AbstractHhexen.java:94)
   at com.jme.app.BaseGame.start(BaseGame.java:79)
   at hstar.hhexen.Main.main(Main.java:35)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)



what can i do? should i unload tracks that i don't need anymore? how much memory is consumed per track? i expected audiotrack to be a small buffer, streaming the data from a file

You can set for every AudioTrack if it should use streaming or not.



Or you increase the Java heap size… I think the default is 128 MB.

i was using 700mb.

If you are using streaming, you have to release streamed audio player by implementing TrackStateListener.



@Override
public void trackStopped(AudioTrack track) {
   track.clearTrackStateListeners();
   track.release();
}