2013-02-10 12 views
5

वर्तमान में जावा में ओपनजीएल के साथ प्रयोग कर रहा है। निम्नलिखित परीक्षण कोड नेटबीन के भीतर कई चक्र चलाने के बाद, मुझे कम स्मृति त्रुटि मिलती है और प्रोग्राम समाप्त हो जाता है। समस्या कुछ सफल चक्रों के माध्यम से आवेदन चलाने के कुछ समय बाद होती है।जब मैं एलडब्ल्यूजेजीएल आधारित जावा ऐप को कई बार चलाता हूं तो NetBeans कम मेमोरी क्यों घोषित करता है?

ऐसा क्यों होता है और इसे कैसे ठीक किया जा सकता है?

कोड:

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(); 
    } 

} 
+0

डीबगर में प्रोग्राम चलाएं। यह आपको दिखाएगा कि मेमोरी अपवाद के बाहर वास्तव में कौन सी रेखा हो रही है। –

+0

सवाल है: नेटबीन कम स्मृति की स्थिति पर क्यों रोक रहा है? (इसके लिए एक सेटिंग है)। या सवाल यह है कि क्यों एक मेनरी रिसाव है? (यह एक बहुत ही कठिन सवाल है।) –

+0

@ जोश डीएम कार्यक्रम कुछ समय के लिए अच्छी तरह से चलता है। हर बार जब मैं कोड बदलता हूं तो यह देखने के लिए कोड चलाता है कि यह काम कर रहा है या नहीं और हर बार जब मैं विंडो बंद करने के लिए 'esc' दबाता हूं।एक ही प्रक्रिया को दोहराने के बाद कुछ समय मेमोरी अपवाद – varuog

उत्तर

6

यह NetBeans के साथ एक known problem है।

नेटबीन जेवीएम प्रत्येक रीसायकल के बाद एलडब्ल्यूजेजीएल डीएलएल को उतार नहीं दे रहा है, जिसे आपके आवेदन के प्रत्येक निष्पादन पर एलडब्ल्यूजेजीएल के माध्यम से जेएनआई के माध्यम से कहा जाता है।

मुझे एक समान समस्या (see this SO question referencing it) पता है कि टॉमकैट एप्लिकेशन सर्वर एक वेब एप्लिकेशन चला रहा है जो जेएनआई का उपयोग करता है। यदि आप टॉमकैट व्यवस्थापक का उपयोग करते हुए जेएनआई-एक्सेसिंग वेब एप्लिकेशन को अनलोड और पुनः लोड करते हैं, तो जेएनआई द्वारा संदर्भित डीएलएल को अनलोड नहीं किया जाता है और जब एप्लिकेशन का बैक अप शुरू होता है तो सभी प्रकार की समस्याएं और संघर्ष सामने आते हैं। कहा गया मामला उचित उपयोग टोमकैट सेवा को पूरी तरह से बंद करना है, फिर फिर से टोमकैट शुरू करना है। यह उन लोगों के लिए सिरदर्द बनाता है जो अपने जेएनआई-रेफरेंसिंग तैनाती को अद्यतन करने के लिए व्यवस्थापक का उपयोग करना चाहते हैं; उन्हें इसे मैन्युअल रूप से करना है।

अपने सबूत और the first link के आधार पर, NetBeans भी इस मुद्दे से ग्रस्त है और केवल समाधान करने के लिए या तो कर रहे हैं:

  1. आवेदन पुनः लोड
  2. के एक जोड़े के बाद
  3. पुनः आरंभ आईडीई इतनी बार आपके आवेदन को फिर से लोड नहीं
  4. एक अलग आईडीई कि ऐसा नहीं हो सकता है का उपयोग (शायद Eclipse?)
1

मेरी ली पर एक समान स्मृति समस्या थी नक्स डेबियन।

यहाँ यह कैसे तय करने के लिए है:

  1. रन नीचे या फाइल करने के लिए में रूट के रूप में
  2. प्रकार crontab -e
  3. पुस्तक एक टर्मिनल
  4. लॉग और टाइप * * * * * sync; echo 3 > /proc/sys/vm/drop_caches

यह जादू लाइन हर मिनट सभी अप्रयुक्त राम को मंजूरी दे दी। इसने अप्रयुक्त स्मृति को हटा दिया नेटबीन उत्पादन कर रहा था (किसी भी अन्य स्मृति उपभोग करने वाले कार्यक्रमों सहित)।

यह ओएस की तरह अधिकांश यूनिक्स पर काम करना चाहिए।

संबंधित मुद्दे

 संबंधित मुद्दे