java जावा 7(जेडीके 7) कचरा संग्रह और दस्तावेज जी 1 पर




garbage-collection java-7 (7)

1. जी 7 जावा 7 में डिफ़ॉल्ट कलेक्टर है (...)

इस जावा 5 पेज पर नियम अभी भी जावा 7 (और AFAIK, जावा 8) में लागू है:

सर्वर वीएम चलाने वाले server-class मशीनों पर, कचरा कलेक्टर (जीसी) पिछले सीरियल कलेक्टर (-XX: + UseSerialGC) से समानांतर संग्राहक (-XX: + UseParallelGC) में बदल गया है।

लेकिन यह भी विचार करें:

  • 64-बिट JVMs क्लाइंट वीएम के साथ नहीं आते हैं, इसलिए हमेशा "सर्वर क्लास" होते हैं
  • जावा 7 के बाद, -XX: + UseParallelGC (चाहे सेट या निहित) का उपयोग करके अतिरिक्त रूप से तात्पर्य है-XX: + UseParallelOldGC (यानी स्पष्ट रूप से अक्षम होने तक)

उदाहरण के लिए, यदि आप Windows x64 पर चलते हैं ...

  • जावा 7 64-बिट, आपको डिफ़ॉल्ट रूप से समांतर जीसी (युवा और पुरानी पीढ़ी दोनों के लिए) मिलता है।
  • जावा 8 32-बिट, आपको डिफ़ॉल्ट रूप से सीरियल जीसी (दोनों पीढ़ियों के लिए) मिलता है

1. (...) मैं जी 1 कैसे सक्रिय करूं?

जावा 7 के रूप में, बस -XX:+UseG1GC । शायद ब्याज की भी http://docs.oracle.com/javase/7/docs/technotes/guides/vm/G1.html आप चाहें:

सीएमएस या समानांतर कचरा कलेक्टर के साथ आज चल रहे अनुप्रयोगों को जी 1 में स्विच करने का लाभ होगा यदि आवेदन में निम्नलिखित में से एक या अधिक लक्षण हैं।

  • जावा ढेर का 50% से अधिक लाइव डेटा पर कब्जा कर लिया गया है।
  • ऑब्जेक्ट आवंटन दर या पदोन्नति की दर में काफी भिन्नता है।
  • अवांछित लंबे कचरा संग्रह या compaction विराम (0.5 से 1 सेकंड से अधिक)

2. जावा 7 में जी 1 की क्या वैकल्पिक सेटिंग्स है?

मैंने स्वयं जी 1 का उपयोग नहीं किया है, लेकिन मैं इकट्ठा करता हूं कि यह समानांतर "थ्रुपुट / एर्गोनोमिक" झंडे का पालन करता है जो अन्य समांतर संग्राहकों को ट्यून करने के लिए उपयोग किया जाता है। समांतर जीसी के साथ अपने अनुभव में, -XX:GCTimeRatio अपेक्षित स्पीड-मेमोरी -XX:GCTimeRatio प्रदान करने में महत्वपूर्ण भूमिका -XX:GCTimeRatio है। YMMV।

जी 1-विशिष्ट विकल्प यहां सूचीबद्ध here

3. जावा 7 में (...) सीएमएस या समांतर संग्राहक में परिवर्तन हुए थे?

पता नहीं, http://docs.oracle.com/javase/7/docs/technotes/guides/vm/G1.html

जी 1 को समवर्ती मार्क-स्वीप कलेक्टर (सीएमएस) के लिए दीर्घकालिक प्रतिस्थापन के रूप में नियोजित किया गया है।

4. जावा 7 में कचरा संग्रह पर मुझे अच्छा दस्तावेज कहां मिल सकता है?

यह खोजने के लिए दर्द हो सकता है, है ना? शायद मुझे मिला सबसे अच्छा "हब" पृष्ठ यह है:

http://www.oracle.com/technetwork/java/javase/tech/index-jsp-140228.html

कुछ गहरी पढ़ने की आवश्यकता होती है, लेकिन अगर आपको कुछ ट्यूनिंग करने की ज़रूरत है तो उस समय के लायक है। विशेष रूप से अंतर्दृष्टि है: कचरा कलेक्टर Ergonomics

जावा 7 अभी कुछ समय से बाहर रहा है, लेकिन मुझे कचरा कलेक्टरों , विशेष रूप से नए जी 1 कलेक्टर की कॉन्फ़िगरेशन पर कोई अच्छा संसाधन नहीं मिल रहा है।

मेरे सवाल:

  1. क्या जी 1 जावा 7 में डिफ़ॉल्ट कलेक्टर है और यदि नहीं तो मैं जी 1 को कैसे सक्रिय करूं?
  2. जावा 7 में जी 1 की वैकल्पिक सेटिंग्स क्या हैं?
  3. जावा 7 में सीएमएस या समांतर कलेक्टर जैसे अन्य कलेक्टरों में किए गए कोई बदलाव थे?
  4. जावा 7 में कचरा संग्रह पर मुझे अच्छा दस्तावेज कहां मिल सकता है?

हां, जी 1 जावा 1.7 जेवीएम में नया मानक कचरा कलेक्टर है।

Here आप नए कचरा कलेक्टर का उपयोग और कॉन्फ़िगर करने के तरीके के बारे में बहुत सारी जानकारी प्राप्त कर सकते हैं:

जी 1 जी 1 का उपयोग अभी भी प्रयोगात्मक माना जाता है और निम्नलिखित दो पैरामीटर के साथ सक्षम किया जा सकता है:

-XX: + अनलॉक एक्सपेरिमेंटमैंटिव ओपन्स -XX: + यूज जी 1 जीसी

जीसी विराम समय लक्ष्य सेट करने के लिए, निम्न पैरामीटर का उपयोग करें:

-XX: MaxGCPauseMillis = 50 (50ms के विराम समय लक्ष्य के लिए)

जी 1 के साथ, एक समय अंतराल निर्दिष्ट किया जा सकता है जिसके दौरान जीसी विराम उपर्युक्त समय से अधिक नहीं रहना चाहिए:

-XX: GCPauseIntervalMillis = 200 (200ms के विराम अंतराल लक्ष्य के लिए)

ध्यान दें कि उपर्युक्त दो विकल्प लक्ष्य का प्रतिनिधित्व करते हैं, वादे या गारंटी नहीं। वे कुछ स्थितियों में अच्छी तरह से काम कर सकते हैं लेकिन दूसरों में नहीं, और जीसी हमेशा उनका पालन करने में सक्षम नहीं हो सकता है।

वैकल्पिक रूप से, युवा पीढ़ी के आकार को खाली करने के लिए स्पष्ट रूप से निर्दिष्ट किया जा सकता है विराम समय:

-XX: + G1YoungGenSize = 512m (512 मेगाबाइट युवा पीढ़ी के लिए)

जी 1 जीवित रिक्त स्थान के बराबर भी उपयोग करता है, जो स्वाभाविक रूप से, (संभावित रूप से गैर-संगत) क्षेत्रों का एक सेट है। उनके आकार को सामान्य पैरामीटर के साथ निर्दिष्ट किया जा सकता है (उदाहरण के लिए, -XX: SurvivorRatio = 6)।

अंत में, जी 1 को अपनी पूरी क्षमता पर चलाने के लिए, इन दो पैरामीटर को सेट करने का प्रयास करें जो वर्तमान में डिफ़ॉल्ट रूप से अक्षम हैं क्योंकि वे दुर्लभ दौड़ की स्थिति को उजागर कर सकते हैं:

-XX: + G1ParallelRSetUpdatingEnabled -XX: + G1ParallelRSetScanningEnabled

ध्यान देने योग्य एक और बात यह है कि जी 1 अन्य हॉटस्पॉट जीसी की तुलना में बहुत वर्बोज़ है जब -XX: + प्रिंटजीसीडीईटीई सेट है। ऐसा इसलिए है क्योंकि यह प्रति-जीसी-थ्रेड समय और अन्य जानकारी प्रिंटिंग और परेशानी-शूटिंग में बहुत उपयोगी है। यदि आप एक संक्षिप्त संक्षिप्त जीसी लॉग चाहते हैं, तो कृपया -verbosegc का उपयोग करने के लिए स्विच करें (हालांकि यह अनुशंसा की जाती है कि अधिक विस्तृत जीसी लॉग प्राप्त किया जाए)।

मुझे this आलेख भी जी 1 के शिष्टाचार को समझने में बहुत उपयोगी पाया है।

यहां तक ​​कि और भी जानकारी।


अंततः ओरेकल ने जावा 7 यू 4 में जी 1 आधिकारिक बनाया: http://www.oracle.com/technetwork/java/javase/7u4-relnotes-1575007.html

विवरण: http://docs.oracle.com/javase/7/docs/technotes/guides/vm/G1.html

कमांड लाइन विकल्प: http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#G1Options विकल्प

फिर भी, मुझे नहीं लगता कि यह जावा 7 में डिफ़ॉल्ट कलेक्टर है। सर्वर के लिए डिफ़ॉल्ट 6 समानांतर कलेक्टर जावा 6 जैसा है।


जेडीके 1.7.0_02 में कोई जी 1 डिफ़ॉल्ट कचरा कलेक्टर नहीं है। डिफ़ॉल्ट कचरा कलेक्टर मशीन की कक्षा पर निर्भर करता है। यदि मशीन सर्वर वर्ग का है तो डिफ़ॉल्ट कचरा कलेक्टर थ्रूपुट कलेक्टर है। यदि मशीन क्लाइंट क्लास का है तो डिफ़ॉल्ट कचरा कलेक्टर सीरियल कलेक्टर है।


Here (Wojtek द्वारा प्रदान किया गया लिंक) पर उपलब्ध दस्तावेज जानकारी के साथ एकमात्र आधिकारिक लिंक प्रतीत होता है लेकिन जानकारी ऐसा लगता है कि परीक्षण के कुछ हिस्सों में केवल कुछ झंडे उपलब्ध हैं, वे उत्पादन रिलीज में मौजूद नहीं हैं। ओरेकल से कुछ को जी 1 जीसी पर कुछ अद्यतन दस्तावेज प्रदान करना चाहिए।


जी 1 कचरा कलेक्टर जावा की स्थापना, संस्करण 1.7.0_01 में डिफ़ॉल्ट नहीं है। आप कुछ अतिरिक्त कमांड लाइन विकल्पों के साथ अपने आप को देखकर देख सकते हैं:

> java -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -version
-XX:InitialHeapSize=132304640 -XX:MaxHeapSize=2116874240 -XX:ParallelGCThreads=4 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java version "1.7.0_01"
Java(TM) SE Runtime Environment (build 1.7.0_01-b08)
Java HotSpot(TM) 64-Bit Server VM (build 21.1-b02, mixed mode)
Heap
 PSYoungGen      total 37696K, used 1293K [0x00000007d5eb0000, 0x00000007d88c0000, 0x0000000800000000)
  eden space 32320K, 4% used [0x00000007d5eb0000,0x00000007d5ff3408,0x00000007d7e40000)
  from space 5376K, 0% used [0x00000007d8380000,0x00000007d8380000,0x00000007d88c0000)
  to   space 5376K, 0% used [0x00000007d7e40000,0x00000007d7e40000,0x00000007d8380000)
 PSOldGen        total 86144K, used 0K [0x0000000781c00000, 0x0000000787020000, 0x00000007d5eb0000)
  object space 86144K, 0% used [0x0000000781c00000,0x0000000781c00000,0x0000000787020000)
 PSPermGen       total 21248K, used 2032K [0x000000077ca00000, 0x000000077dec0000, 0x0000000781c00000)
  object space 21248K, 9% used [0x000000077ca00000,0x000000077cbfc288,0x000000077dec0000)

जी 1 कलेक्टर को चालू करने के लिए आपको प्रयोगात्मक विकल्पों को सक्षम करने की आवश्यकता नहीं है, हालांकि:

> java -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseG1GC -version
-XX:InitialHeapSize=132304640 -XX:MaxHeapSize=2116874240 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation
java version "1.7.0_01"
Java(TM) SE Runtime Environment (build 1.7.0_01-b08)
Java HotSpot(TM) 64-Bit Server VM (build 21.1-b02, mixed mode)
Heap
 garbage-first heap   total 130048K, used 0K [0x000000077ca00000, 0x0000000784900000, 0x00000007fae00000)
  region size 1024K, 1 young (1024K), 0 survivors (0K)
 compacting perm gen  total 20480K, used 2032K [0x00000007fae00000, 0x00000007fc200000, 0x0000000800000000)
   the space 20480K,   9% used [0x00000007fae00000, 0x00000007faffc288, 0x00000007faffc400, 0x00000007fc200000)
No shared spaces configured.

मुझे नहीं पता कि आप कहां से कोई अच्छा दस्तावेज पा सकते हैं।


  1. क्या जी 1 जावा 7 में डिफ़ॉल्ट कलेक्टर है और यदि नहीं तो मैं जी 1 को कैसे सक्रिय करूं?

जी 1 जावा 7 में डिफ़ॉल्ट कलेक्टर नहीं है। -XX:+UseG1GC को सक्षम करेगा

  1. जावा 7 में जी 1 की वैकल्पिक सेटिंग्स क्या हैं?

वहां कई हैं। पूरी जानकारी के लिए इस oracle.com/technetwork/articles/java/g1gc-1984535.html आलेख पर नज़र डालें।

जी 1 जीसी एक अनुकूली कचरा कलेक्टर है जो डिफॉल्ट के साथ है जो इसे बिना किसी संशोधन के कुशलतापूर्वक काम करने में सक्षम बनाता है।

इस कारण से, महत्वपूर्ण पैरामीटर को कस्टमाइज़ करें

-XX:MaxGCPauseMillis
-XX:G1HeapRegionSize
-XX:ParallelGCThreads
-XX:ConcGCThreads

और सभी अन्य पैरामीटर को डिफ़ॉल्ट मान पर छोड़ दें

यहां महत्वपूर्ण विकल्पों और उनके डिफ़ॉल्ट मानों की एक सूची दी गई है। यह सूची नवीनतम जावा हॉटस्पॉट वीएम पर लागू होती है, 24 बिल्ड करें। आप जेवीएम कमांड लाइन पर जी 1 जीसी सेटिंग्स को अनुकूलित और ट्यून कर सकते हैं।

महत्वपूर्ण डिफ़ॉल्ट:

-XX:G1HeapRegionSize=n

एक जी 1 क्षेत्र के आकार सेट करता है। मूल्य दो की शक्ति होगी और 1 एमबी से 32 एमबी तक हो सकती है। लक्ष्य न्यूनतम जावा हीप आकार के आधार पर लगभग 2048 क्षेत्रों का होना है।

-XX:MaxGCPauseMillis=200

वांछित अधिकतम विराम समय के लिए एक लक्ष्य मूल्य सेट करता है। डिफ़ॉल्ट मान 200 मिलीसेकंड है। निर्दिष्ट मान आपके ढेर आकार के अनुकूल नहीं है।

-XX:G1NewSizePercent=5

युवा पीढ़ी के आकार के लिए न्यूनतम के रूप में उपयोग करने के लिए ढेर के प्रतिशत को सेट करता है। डिफ़ॉल्ट मान आपके जावा ढेर का 5 प्रतिशत है।

-XX:G1MaxNewSizePercent=60

युवा पीढ़ी के आकार के लिए अधिकतम के रूप में उपयोग करने के लिए ढेर आकार का प्रतिशत सेट करता है। डिफ़ॉल्ट मान आपके जावा ढेर का 60 प्रतिशत है।

-XX:ParallelGCThreads=n

एसटीडब्ल्यू कार्यकर्ता धागे के मूल्य सेट करता है। लॉजिकल प्रोसेसर की संख्या में एन के मान सेट करता है। एन का मान 8 के मान तक लॉजिकल प्रोसेसर की संख्या के समान है।

यदि आठ से अधिक लॉजिकल प्रोसेसर हैं, तो लॉजिकल प्रोसेसर के लगभग 5/8 तक एन का मान निर्धारित करता है। यह ज्यादातर मामलों में काम करता है जो बड़े एसपीएआरसी सिस्टम को छोड़कर जहां एन का मूल्य तार्किक प्रोसेसर के लगभग 5/16 हो सकता है।

-XX:ConcGCThreads=n

समांतर अंकन धागे की संख्या सेट करता है। समांतर कचरा संग्रह धागे (समानांतर GCThreads) की संख्या के लगभग 1/4 तक n सेट करता है।

-XX:InitiatingHeapOccupancyPercent=45

जावा हीप अधिभोग थ्रेसहोल्ड सेट करता है जो एक अंकन चक्र को ट्रिगर करता है। संपूर्ण अधिग्रहण पूरे जावा ढेर का 45 प्रतिशत है।

-XX:G1MixedGCLiveThresholdPercent=65

एक पुराने क्षेत्र के लिए अधिग्रहण सीमा को एक मिश्रित कचरा संग्रहण चक्र में शामिल करने के लिए सेट करता है। डिफ़ॉल्ट अधिभोग 65 प्रतिशत है

-XX:G1HeapWastePercent=10

उस ढेर के प्रतिशत को सेट करता है जिसे आप बर्बाद करना चाहते हैं। जावा हॉटस्पॉट वीएम मिश्रित कचरा संग्रहण चक्र शुरू नहीं करता है जब पुनः प्राप्त करने योग्य प्रतिशत ढेर अपशिष्ट प्रतिशत से कम है

-XX:G1MixedGCCountTarget=8

अधिकांश G1MixedGCLIveThresholdPercent लाइव डेटा के साथ पुराने क्षेत्रों को एकत्रित करने के लिए अंकन चक्र के बाद मिश्रित कचरा संग्रह की लक्षित संख्या सेट करता है। डिफ़ॉल्ट 8 मिश्रित कचरा संग्रह है

-XX:G1OldCSetRegionThresholdPercent=10

मिश्रित कचरा संग्रहण चक्र के दौरान एकत्र किए जाने वाले पुराने क्षेत्रों की संख्या पर ऊपरी सीमा निर्धारित करता है। जावा ढेर का डिफ़ॉल्ट 10 प्रतिशत है

-XX:G1ReservePercent=10

मुक्त रखने के लिए आरक्षित मेमोरी के प्रतिशत को सेट करता है ताकि स्पेस ओवरफ्लो के जोखिम को कम किया जा सके। डिफ़ॉल्ट 10 प्रतिशत है। जब आप प्रतिशत को बढ़ाते या घटाते हैं, तो उसी राशि से कुल जावा ढेर को समायोजित करना सुनिश्चित करें।

आपने कई G1GC पैरामीटर को फिर से कॉन्फ़िगर किया है, यदि आप उपरोक्त दस्तावेज़ पृष्ठ का पालन करते हैं तो इसकी आवश्यकता नहीं है। कृपया उपरोक्त अनुशंसाओं के साथ विशेष रूप से समानांतर जीसीटीएचएचडी और कॉन्सजीसीटीएचडी पर जांच करें, जो आपके सीपीयू कोर पर आधारित हैं। गैर-आवश्यक पैरामीटर की पुन: कॉन्फ़िगरेशन निकालें।

ओरेकल से oracle.com/technetwork/articles/java/g1gc-1984535.html :

जब आप जी 1 जीसी का मूल्यांकन और सुदृढ़ीकरण करते हैं, तो निम्नलिखित सिफारिशों को ध्यान में रखें:

  1. युवा जनरेशन आकार : -Xmn विकल्प या किसी भी या अन्य संबंधित विकल्प जैसे -XX:NewRatio साथ युवा पीढ़ी के आकार को स्पष्ट रूप से सेट करने से बचें। युवा पीढ़ी के आकार को ठीक करना लक्ष्य विराम-समय लक्ष्य को ओवरराइड करता है

  2. समय लक्ष्य रोकें: जब आप किसी कचरा संग्रह का मूल्यांकन या ट्यून करते हैं, तो थ्रूपुट व्यापार-बंद बनाम हमेशा एक विलंबता होती है। जी 1 जीसी वर्दी विराम के साथ एक वृद्धिशील कचरा कलेक्टर है, लेकिन एप्लिकेशन थ्रेड पर भी अधिक ओवरहेड है। जी 1 जीसी के लिए थ्रूपुट लक्ष्य 90 प्रतिशत आवेदन समय और 10 प्रतिशत कचरा संग्रहण समय है

  1. जावा 7 में सीएमएस या समांतर कलेक्टर जैसे अन्य कलेक्टरों में किए गए कोई बदलाव थे?

जावा 7 के साथ कुछ बदलाव हैं। इस article

  1. जावा 7 में कचरा संग्रह पर मुझे अच्छा दस्तावेज कहां मिल सकता है?

gc और संबंधित एसई प्रश्न के बारे में ओरेकल दस्तावेज पृष्ठ का संदर्भ लें:

उत्पादन में जावा जी 1 कचरा संग्रह





g1gc