Obecnie eksperymentuję z OpenGL w Javie. Po uruchomieniu następującego kodu testowego kilka cykli w NetBeans, otrzymuję błąd niskiej pamięci i program się kończy. Problem występuje po pewnym czasie po uruchomieniu aplikacji przez kilka udanych cykli.Dlaczego NetBeans deklaruje niską pamięć po kilkukrotnym uruchomieniu aplikacji Java opartej na LWJGL?
Dlaczego tak się dzieje i jak można to naprawić?
Kod:
package test3d;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.input.Keyboard;
class ColoredTriangle {
public void start() {
try {
Display.setFullscreen(true);
DisplayMode dm = new DisplayMode(34,34);
// Display.setDisplayMode(new DisplayMode(DisplayMode.get));
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
System.exit(0);
}
// Init OpenGL
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(-3, 3, -2.4, 2.4, -1, 1);
GL11.glRotatef(0.0f,5.0f,1.0f,0.0f);
//GL11.glOrtho(0, 640, 480, 0, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
boolean quit = false;
while (!quit) {
// Clear the screen.
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
//GL11.glFrontFace(GL11.GL_CCW);
// Begin drawing
GL11.glBegin(GL11.GL_QUADS);
GL11.glColor3f(1.0f,0.0f,0.0f); //Red
/*
GL11.glVertex3f(0.0f,0.0f, 0.0f);
GL11.glVertex3f(0.0f,1.0f, 0.0f);
GL11.glVertex3f(1.0f,1.0f, 0.0f);
GL11.glVertex3f(1.0f,0.0f, 0.0f); //*/
GL11.glVertex3f(1.0f,0.0f, -1f);
GL11.glVertex3f(1.0f,1.0f, -1f);
GL11.glVertex3f(2.0f,1.0f, -1f);
GL11.glVertex3f(2.0f,0.0f, -1f);
GL11.glEnd();
Display.update();
if (Display.isCloseRequested() || Keyboard.isKeyDown(Keyboard.KEY_ESCAPE))
quit = true;
}
Display.destroy();
System.exit(0);
}
}
class Test3d
{
public static void main(String args[]) {
ColoredTriangle ct = new ColoredTriangle();
ct.start();
}
}
Uruchom program w debugerze. Powinien pokazać dokładnie, w której linii występuje wyjątek pamięci. –
jest pytanie: dlaczego netbeans zatrzymuje się na stanie niskiej pamięci? (jest na to ustawienie). Czy też jest pytanie: dlaczego istnieje przeciek menoryalny? (to jest znacznie trudniejsze pytanie). –
@JoshDM Program działa kilka razy dobrze. Za każdym razem, gdy zmieniam kod, uruchamiam kod, aby sprawdzić, czy działa, czy też nie i za każdym razem, gdy wciskam "esc", zamykam okno.Po powtórzeniu tej samej procedury pojawia się wyjątek pamięci czasu: – varuog