2010-11-01 16 views
7
  1. क्या वर्तमान में का उपयोग करने के लिए कोई तरीका है मेरे जावा एप्लिकेशन के भीतर स्थायी पीढ़ी (पर्मोजेन) का आकार? मैं बाहरी प्रोफाइलिंग टूल जैसे VisualVM का उपयोग नहीं कर सकता।जावा एप्लिकेशन के भीतर पर्मजेन का आकार कैसे निर्धारित करें (यानी प्रोग्रामेटिक रूप से)?

  2. पर्मजेन में जावा क्लास की मेमोरी खपत का अनुमान भी बेहतर होगा। क्या यह बाइटकोड फ़ाइल के आकार के लगभग आनुपातिक है?

उत्तर

9

आप जेएमके के साथ आने वाले मेमोरीएमएक्सबीन का उपयोग कर सकते हैं। लेकिन मुझे नहीं लगता कि एक चल रहे आवेदन के भीतर से permgen उपयोग पर सवाल पूछने का एक तरीका है। डॉक्स MemoryMXBean के बारे में डॉक्स।

+0

धन्यवाद! उस जवाब ने मुझे बहुत मदद की। जैसे ही मेरे पास पर्याप्त प्रतिष्ठा है, मैं आपके उत्तर को उपयोगी वोट दूंगा! :) – s106mo

0

पर्मजेन के आकार में आपकी कक्षा फ़ाइलों के आकार से कोई लेना देना नहीं है। सूर्य के अनुसार परमजेन का डिफ़ॉल्ट आकार 64 एमबी है। आप इसे स्पष्ट रूप से सेट कर सकते हैं आप इसे बढ़ाने के लिए चाहते हैं का उपयोग कर:

-XX:PermSize=164m 
अपने जावा कमांड लाइन या स्टार्टअप स्क्रिप्ट में

। बाहरी उपकरण पर भरोसा किए बिना यह भी पता चल सकता है कि यह कैसे सेट किया गया है।

संपादित करें:

यह लेख पढ़ें निर्धारित करने के लिए लगभग कितनी PermGen वर्तमान में प्रोग्राम के रूप में किया जा रहा है (यानी कोई बाहरी उपकरण):

http://frankkieviet.blogspot.com/2006/10/how-to-fix-dreaded-permgen-space.html

+0

* अधिकतम * आकार जरूरी करने के लिए कुछ भी नहीं है मुद्रित करने के लिए किसी भी फाइल के आकार के साथ करो। लेकिन स्टीफन वर्तमान (उपयोग किए गए) आकार की तलाश में है, अधिकतम आकार नहीं। –

+0

http://blogs.sun.com/jonthecollector/entry/presenting_the_permanent_generation के अनुसार, उदा। कक्षा विधियों के बाइटकोड पर पर्मजेन के आकार पर प्रभाव पड़ता है! – s106mo

+0

मैंने अधिकतम आकार निर्दिष्ट नहीं किया है। अधिकतम परम आकार के लिए ध्वज MaxPermSize –

2

आप Visual GC प्लगइन के साथ JDK से jvisualvm उपकरण का उपयोग कर सकते हैं PermGen सहित सभी जेवीएम ढेर क्षेत्रों की निगरानी करने के लिए।

2

यदि आप विंडोज़ पर नहीं हैं, तो आप jmap को आजमा सकते हैं जो जेडीके के साथ भेज दिया जाता है।

+0

दुर्भाग्यवश, मुझे इसे विंडोज पर करना है ... वैसे भी धन्यवाद! – s106mo

1

आप jmap आदेश का उपयोग कर सकते हैं:

jmap [विकल्प]

jmap [विकल्प] (एक कोर फाइल करने के लिए कनेक्ट करने के लिए)

(प्रक्रिया चलाने के लिए कनेक्ट करने के लिए) jmap [विकल्प] [server_id @] (रिमोट डीबग सर्वर से कनेक्ट करने के लिए)

-heap:जहां विकल्पों में से एक है जावा ढेर सारांश मुद्रित करने के लिए

-permstat: स्थायी पीढ़ी आँकड़े

+0

आपके उत्तर के लिए धन्यवाद, हालांकि मेरे प्रश्न का निर्णायक बिंदु यह था कि मैं अपने आवेदन के भीतर स्मृति खपत को मापना चाहता था (यानी प्रोग्रामेटिक रूप से) ... तो मेमोरीएमएक्सबीन जाने का सही तरीका है – s106mo

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

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