2013-07-03 6 views
5

मैं इस बुनियादी प्रोग्राम है जो कुछ नहीं बल्कि निवेश के लिए इंतजार कर वहाँ बैठते हैं करता है:जावा कोड कैश आकार क्यों बढ़ रहा है?

import java.io.*; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Basic { 
    public static void main(String[] args) throws Exception{ 
     try{ 
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
      String input; 
      input=br.readLine(); 
     }catch(IOException io){ 
      io.printStackTrace(); 
     } 
    } 
} 

और यह जब मैं चलाएँ:

codecache increasing:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15001 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false Basic 

मैं JConsole के माध्यम से कनेक्ट इस को देखने के लिए

क्या यह केवल इसलिए है क्योंकि मूल जावा बाइटकोड पहले संकलित किया जा रहा है? जब प्रक्रिया कुछ भी नहीं कर रही है तो कोडेकैच कैसे बढ़ सकता है?

और जब मैं इस संस्करण (जो Thread.sleep का उपयोग करता है):

codecache increasing

तो ... क्यों हो रहा है: मैं इस मिल

public class Basic { 
    public static void main(String[] args) throws Exception{ 
     while(true) { 
      Thread.sleep(5000); 
     } 
    } 
} 

?

पीएस

java version "1.6.0_37" 
Java(TM) SE Runtime Environment (build 1.6.0_37-b06) 
Java HotSpot(TM) Client VM (build 20.12-b01, mixed mode, sharing) 
+0

सिर्फ इसलिए कि 'मुख्य' धागा कुछ भी नहीं कर रहा है इसका मतलब यह नहीं है कि जेवीएम कुछ भी नहीं कर रहा है। जीसी शायद यह देखने के लिए जांच कर रहा है कि क्या इसे चलाने और थ्रेड की निगरानी करने की आवश्यकता है, इसलिए जेकनसोल काम कर सकता है। – Jeffrey

उत्तर

1

मुझे लगता है कि यह jconsole ही है कि समस्या का कारण है यह है: यह java -version का उत्पादन होता है। या अधिक सटीक, jmxremote सामग्री जो आपके JVM के अंदर क्या हो रहा है यह देखने के लिए jconsole की अनुमति देता है।

मेरी सलाह:

  • इसके बारे में चिंता मत करो। ऐसा लगता है कि यह लगभग स्थिर स्थिति तक पहुंच गया है।

  • यदि यह पर्याप्त नहीं है, तो jconsole बहुत लंबे समय तक चल रहा है और देखें कि स्मृति उपयोग वृद्धि पूरी तरह से बंद हो जाती है या नहीं।

  • यदि यह पर्याप्त नहीं है, तो आप इसे प्रोफ़ाइल करने का प्रयास कर सकते हैं ... हालांकि jmxremote कोड (स्रोत कोड के साथ या बिना) में छोटे संग्रहण रिसाव को ट्रैक करना चुनौतीपूर्ण हो सकता है।

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