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


91

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

निष्पक्ष होने के लिए केवल मैंने बहुत लंबे समय तक जीसी ठहराव देखा है, एक वर्कस्टेशन की तुलना में बहुत अधिक है। मेरे प्रश्न को स्पष्ट करने के लिए; G1 सैकड़ों GB में प्रवेश करने के लिए प्रवेश द्वार खोल देगा? टीबी?


15
हालाँकि इसे अधिक विशेष रूप से रीफ़्रैश किया जा सकता है, यह एक भयानक प्रश्न नहीं है। मैं वास्तव में चाहता हूं कि जब मतदान बंद हो जाए तो लोगों को खुद को "सवाल नहीं" से बेहतर समझाना पड़ा।
बिल के

मैंने बंद करने के लिए मतदान नहीं किया था, लेकिन मैं चाहता था कि ओपी ने वर्तमान जीसी के साथ अपनी पकड़ का विस्तार करने के लिए अधिक उद्देश्यपूर्ण काम किया था। इसके अलावा, "जावा" एक भाषा है, जबकि वह एक कार्यान्वयन की बात कर रहा है, और मुझे नहीं पता कि "उत्पादन में जी 1 को लागू करना" का अर्थ है, विशेष रूप से शेष प्रश्न के भविष्य के तनाव के साथ। यदि यह जावा 7 में होने जा रहा है, तो निश्चित रूप से किसी ने भी इसका उपयोग नहीं किया है?
पास्कल क्यूक

6
@ पास्कल जी 1 जेडडीके 6 अपडेट के बाद से जेडीके में एक प्रायोगिक सुविधा उपलब्ध है। "उत्पादन में जी 1 को लागू करने से" मुझे लगता है कि वह वास्तव में इसका उपयोग करने का मतलब है, यह आंकड़ा करना मुश्किल नहीं है। और जब मैं मानता हूं कि G1 JDK 7 का हिस्सा है, जावा नहीं, तो Google पर Java 7 की खोज JDK 7 होमपेज पर लौटती है क्योंकि यह पहला परिणाम है, और दोनों शब्दों का अक्सर एक दूसरे के साथ उपयोग किया जाता है। @ बन्जू मैं वर्तमान JDK पर G1 के साथ प्राप्त परिणामों पर भरोसा नहीं करूंगा क्योंकि यह प्रयोगात्मक है, कई चीजें अब से आधिकारिक रिलीज़ में बदल सकती हैं।
teto

2
ऐसा लगता है कि अपडेट 1,2 सहित JDK 7 और डिफ़ॉल्ट रूप से G1 gc का उपयोग नहीं करता है। आप इसे jinfo -flag UseG1GC pid
George

जवाबों:


34

ऐसा लगता है कि G1 का बिंदु छोटे विराम समय के लिए है, यहां तक ​​कि उस बिंदु तक जहां यह अधिकतम ठहराव समय लक्ष्य निर्दिष्ट करने की क्षमता है।

कचरा संग्रह केवल एक सरल नहीं है "अरे, यह पूर्ण है, चलो सब कुछ एक बार में स्थानांतरित करें और शुरू करें" किसी भी अधिक सौदे करें - यह काल्पनिक रूप से जटिल, बहु-स्तरीय, पृष्ठभूमि थ्रेडेड सिस्टम है। यह बिना किसी रुकावट के पृष्ठभूमि में इसका अधिकांश रखरखाव कर सकता है, और यह रनटाइम के दौरान सिस्टम के अपेक्षित पैटर्न के ज्ञान का उपयोग करने में मदद करता है - जैसे कि अधिकांश वस्तुओं को बनाने के तुरंत बाद मर जाना, आदि।

मैं कहूंगा कि जीसी पॉज़ टाइम में सुधार जारी रहेगा, खराब नहीं होगा, भविष्य के रिलीज के साथ।

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

री-रीडिंग में यह मेरे साथ हुआ कि मैं दैनिक जावा का उपयोग करता हूं - एक्लिप्स, एज़्यूरस, और मेरे द्वारा विकसित किए गए ऐप, और जब से मैंने पॉज़ देखा, यह एक लंबा समय रहा। महत्वपूर्ण ठहराव नहीं है, लेकिन मेरा मतलब है कि कोई भी ठहराव।

मैंने देखा है जब मैं विंडोज़ एक्सप्लोरर (या कभी-कभी) पर राइट-क्लिक करता हूं, जब मैं कुछ यूएसबी हार्डवेयर को हुक करता हूं, लेकिन जावा के साथ --- कोई भी नहीं।

जीसी अभी भी किसी के साथ एक मुद्दा है?


सहमत - जीसी ठहराव को देखने का एकमात्र मौका है जब मैंने या तो जानबूझकर या गलती से उन्हें बड़े पैमाने पर समानांतर कचरा बनाने वाले कोड के साथ उकसाया है .....
मिकेरे

28
हां, जीसी अभी भी एक मुद्दा है, जब आप बड़े ढेर (> 16 जीबी) से निपटना शुरू करते हैं, खासकर बड़ी कार्यकाल वाली पीढ़ियों के साथ।
अल्केमिस्ट

2
@-कीमियागर वाह, मैंने आपकी टिप्पणी को कुछ समय गुजरने में देखा है और इसने मुझे चौंका दिया है कि आपने 16 जीबी कहा है !! हालांकि मुझे पूरा यकीन है कि आप सही हैं कि इससे भारी देरी हो सकती है, मैं यह जांचना चाहता हूं कि आपने सभी स्वैपिंग को अक्षम कर दिया है। एक बड़े मेमोरी सिस्टम पर, जावा की कोई भी स्वैपिंग आपके सिस्टम को पूरी तरह से मार देगी (क्योंकि जीसी बहुत स्वैप-अनफ्रेंडली है)। मुझे यकीन है कि आप पहले से ही ऐसा कर चुके हैं, लेकिन मैं सिर्फ इसका उल्लेख करना चाहता था - क्योंकि यह इतना बड़ा अंतर लाएगा। मैंने कभी पीसी को इतने राम के साथ नहीं देखा है - आपके पास कितना है? 32g?
बिल के

8
हाँ, GCs सेवाओं के लिए समस्याग्रस्त हैं क्योंकि वे TP99.9 (और उच्चतर) सीमाओं को बेहतर बनाने के लिए बहुत कठिन हैं। विशेष रूप से "पुरानी पीढ़ी" जीसी मौत के जाल हो सकते हैं जो कई सेकंड के लिए जेवीएम (और सेवा) को फ्रीज करते हैं; और ऐसी सेवाओं के लिए जो आम तौर पर एकल-अंक (या कम दोहरे अंक) मिलि सेकंड में अनुरोधों की सेवा करती हैं, यह समस्याग्रस्त है। इसके लायक यह है कि अमेज़ॅन की सरल कतार सेवा द्वारा उपयोग किए जाने वाले बैकएंड स्टोरेज के साथ एक व्यावहारिक समस्या थी (यह AWS आंतरिक के रूप में विवरण के टन में नहीं जा सकता है)।
स्टैक्मैन मैन

21
GC के बारे में कष्टप्रद बात यह है कि Azul ने वर्षों पहले एक सरल GC एल्गोरिथ्म (Azul C4) का आविष्कार किया था जो प्रोसेसर मेमोरी हार्डवेयर का बहुत ही चतुर उपयोग करके आसानी से सैकड़ों गीगाबाइट के साथ किसी भी ध्यान देने योग्य ठहराव समय का सामना कर सकता है। लेकिन यह किसी को पता नहीं है और इसे जल्द ही प्रमुख जावा संस्करणों में लागू नहीं किया जाएगा क्योंकि इसे ऑपरेटिंग सिस्टम द्वारा कुछ समर्थन की आवश्यकता है। जब तक लोग एल्गोरिथम के बारे में नहीं जानते हैं और ऑपरेटिंग सिस्टम विक्रेताओं पर दबाव डालते हैं, तब तक ऑपरेटिंग सिस्टम विक्रेता कुछ भी नहीं करेंगे। देखें azulsystems.com/zing/pgc , मैनेक्रंटटाइम . org
हंस-पीटर स्टॉर्र

58

मैं एक भारी आवेदन के साथ इसका परीक्षण कर रहा हूं: किसी भी समय उपयोग में 20-50GB के साथ, ढेर करने के लिए आवंटित 60-70GB। इन प्रकार के अनुप्रयोगों के साथ, यह कहने के लिए एक ख़ामोश है कि आपका लाभ भिन्न हो सकता है। मैं लिनक्स पर JDK 1.6_22 चला रहा हूं। छोटे संस्करण महत्वपूर्ण हैं - लगभग 1.6_20 से पहले, G1 में बग थे जो यादृच्छिक NullPointerException का कारण बने।

मैंने पाया है कि आप इसे अधिकतर समय देने वाले ठहराव के लक्ष्य को ध्यान में रखते हुए बहुत अच्छे हैं। डिफ़ॉल्ट 100ms (0.1 सेकंड) का ठहराव प्रतीत होता है, और मैं इसे आधा करने के लिए कह रहा हूं (-XX: MaxGCPauseMillis = 50)। हालाँकि, एक बार जब यह मेमोरी पर वास्तव में कम हो जाता है, तो यह पूरी तरह से दुनिया का कचरा संग्रहण करता है। 65GB के साथ, यह 30 सेकंड और 2 मिनट के बीच लेता है। (सीपीयू की संख्या में शायद कोई फर्क नहीं पड़ता है; यह शायद बस की गति से सीमित है।)

सीएमएस के साथ तुलना में (जो डिफ़ॉल्ट सर्वर जीसी नहीं है, लेकिन यह वेब सर्वर और अन्य वास्तविक समय के अनुप्रयोगों के लिए होना चाहिए), ठेठ ठहराव बहुत अधिक अनुमानित हैं और इसे बहुत कम किया जा सकता है। अब तक मैं विशाल ठहराव के लिए सीएमएस के साथ बेहतर भाग्य रहा हूं, लेकिन यह यादृच्छिक हो सकता है; मैं उन्हें हर 24 घंटे में केवल कुछ बार देख रहा हूं। मुझे यकीन नहीं है कि इस समय मेरे उत्पादन वातावरण में कौन सा अधिक उपयुक्त होगा, लेकिन शायद जी 1। यदि ओरेकल इसे ट्यून करता रहता है, तो मुझे संदेह है कि G1 अंततः स्पष्ट विजेता होगा।

यदि आपको मौजूदा कचरा संग्राहकों से कोई समस्या नहीं है, तो अभी G1 पर विचार करने का कोई कारण नहीं है। यदि आप एक कम विलंबता अनुप्रयोग, जैसे GUI अनुप्रयोग चला रहे हैं, तो G1 संभवतः सही विकल्प है, MaxGCPauseMillis के साथ वास्तव में कम सेट है। यदि आप बैच-मोड एप्लिकेशन चला रहे हैं, तो G1 आपको कुछ भी नहीं खरीदता है।


14

हालांकि मैंने उत्पादन में जी 1 का परीक्षण नहीं किया है, मैंने सोचा कि मैं टिप्पणी करूंगा कि जीसी "विनम्र" बिना ढेर के मामलों के लिए पहले से ही समस्याग्रस्त हैं। विशेष रूप से बस, कहते हैं, 2 या 4 गीगा के साथ सेवाओं को जीसी द्वारा गंभीर रूप से प्रभावित किया जा सकता है। युवा पीढ़ी जीसी आमतौर पर समस्याग्रस्त नहीं होते हैं क्योंकि वे एकल-अंक मिलीसेकंड (या अधिकांश दोहरे अंकों) में समाप्त होते हैं। लेकिन पुरानी पीढ़ी के संग्रह बहुत अधिक समस्याग्रस्त हैं क्योंकि वे 1-गीग या उससे अधिक के पुराने-जीन आकार के साथ कई सेकंड लेते हैं।

अब: सिद्धांत में CMS बहुत मदद कर सकता है, क्योंकि यह अपने अधिकांश ऑपरेशन को समवर्ती रूप से चला सकता है। हालांकि, समय के साथ ऐसे मामले होंगे जहां यह ऐसा नहीं कर सकता है और "दुनिया को रोकना" संग्रह पर वापस गिरना होगा। और जब ऐसा होता है (बाद में, कहते हैं, 1 घंटा - अक्सर नहीं, लेकिन अभी भी अक्सर), ठीक है, अपने च **** टोपी पर पकड़। इसमें एक मिनट या अधिक समय लग सकता है। यह उन सेवाओं के लिए विशेष रूप से समस्याग्रस्त है जो अधिकतम विलंबता को सीमित करने की कोशिश करते हैं; यह कहने के बजाय, 25 मिलीसेकंड कि एक अनुरोध की सेवा के लिए अब दस सेकंड या उससे अधिक समय लगता है। अपमान करने वाले ग्राहकों के लिए चोट को जोड़ने के लिए, फिर अक्सर अनुरोध और पुन: प्रयास करने का समय निकल जाएगा, जिससे आगे की समस्याएं हो सकती हैं (उर्फ "बकवास तूफान")।

यह एक ऐसा क्षेत्र है जहां G1 से बहुत मदद मिलने की उम्मीद थी। मैंने एक बड़ी कंपनी के लिए काम किया जो भंडारण और संदेश प्रेषण के लिए क्लाउड सेवाएं प्रदान करता है; और हम सीएमएस का उपयोग नहीं कर सकते थे, हालांकि उस समय के समानांतर किस्मों की तुलना में बेहतर काम किया था, इसमें ये मंदी थी। तो लगभग एक घंटे के लिए चीजें अच्छी थीं; और फिर सामान पंखे से टकराया ... और क्योंकि सेवा क्लस्टर पर आधारित थी, जब एक नोड को परेशानी हुई, तो अन्य ने आम तौर पर अनुसरण किया (चूंकि जीसी-प्रेरित टाइमआउट के कारण अन्य नोड्स का मानना ​​था कि नोड दुर्घटनाग्रस्त हो गया था, जिससे पुन: मार्ग बन गए)।

मुझे नहीं लगता कि जीसी क्षुधा के लिए एक समस्या है, और शायद गैर-संकुल सेवाएँ भी कम अक्सर प्रभावित होती हैं। लेकिन अधिक से अधिक सिस्टम क्लस्टर (esp। NoSQL डेटा स्टोर के लिए धन्यवाद) और ढेर आकार बढ़ रहे हैं। ओल्डजेन जीसीएस सुपर-लीनियर रूप से हीप आकार से संबंधित हैं (जिसका अर्थ है कि जीसी समय से दोगुना अधिक है, लाइव डेटा सेट का आकार भी दोगुना है)।


13

अज़ुल के सीटीओ, गिल टेने, ने गारबेज कलेक्शन से जुड़ी समस्याओं का अच्छा अवलोकन किया है और अपने अंडरस्टैंडिंग जावा गारबेज कलेक्शन और व्हाट यू कैन डू डू इट इट प्रेजेंटेशन में विभिन्न समाधानों की समीक्षा की है , और इस लेख में अतिरिक्त विवरण दिया गया है: http: // www.infoq.com/articles/azul_gc_in_detail

हमारे ज़िंग जेवीएम में अज़ुल का सी 4 कचरा कलेक्टर समानांतर और समवर्ती दोनों है, और नई और पुरानी दोनों पीढ़ियों के लिए समान जीसी तंत्र का उपयोग करता है, दोनों मामलों में समवर्ती और कॉम्पैक्टिंग करता है। सबसे महत्वपूर्ण बात, C4 की दुनिया में कोई भी रोक नहीं है। सभी संकलन रनिंग एप्लिकेशन के साथ समवर्ती रूप से किए जाते हैं। हमारे पास ग्राहक बहुत बड़े (सैकड़ों GBytes) चल रहे हैं जो कि बदतर स्थिति के साथ GC 10 बार <10 msec का समय है, और आवेदन के आधार पर अक्सर 1-2 मिसे से कम होता है।

CMS और G1 के साथ समस्या यह है कि कुछ बिंदु पर जावा हीप मेमोरी को कॉम्पैक्ट किया जाना चाहिए, और उन दोनों कचरा संग्रहकर्ताओं ने कंपटीशन करने के लिए दुनिया / STW (यानी एप्लिकेशन को रोकें) को रोक दिया। इसलिए जब सीएमएस और जी 1 एसटीडब्ल्यू को बाहर निकाल सकते हैं, तो वे उन्हें खत्म नहीं करते हैं। अज़ुल का C4, हालांकि, STW ठहराव को पूरी तरह से समाप्त कर देता है और इसीलिए Zing में इतने कम GC पॉज़ भी विशालकाय ढेर के आकार के लिए हैं।

और पहले के उत्तर में दिए गए एक बयान को ठीक करने के लिए, ज़िंग को ऑपरेटिंग सिस्टम में किसी भी बदलाव की आवश्यकता नहीं है। यह किसी अन्य JVM की तरह ही अनम्यूट लिनक्स डिस्ट्रोस पर चलता है।


3
मुझे आश्चर्य है कि अज़ुल के सी 4 ने आपको क्या कहा और सूर्य या ओरेकल क्यों नहीं कर पाए। क्या कुछ बड़ा रहस्य है या यह कुछ तरह का व्यापार है?
जॉर्ज

5
अज़ुल की C4 में बहुत ही अनोखी तकनीक है, जिसका उद्गम अज़ुल के हार्डवेयर कंप्यूट उपकरणों (जो कि एंटरप्राइज़ जावा ऐप चलाने के लिए निर्मित विशेष प्रोसेसर का उपयोग करता है) और लिनक्स चलाने वाले नियमित x86 सर्वरों पर चलाने के लिए किया गया है। हर दूसरे एंटरप्राइज़-क्लास कचरा संग्राहक (चाहे ओरेकल या आईबीएम से) किसी बिंदु पर स्टॉप-द-वर्ल्ड पॉज़ करना चाहिए - अज़ुल के सी 4 की अनूठी विशेषता यह है कि यह कभी भी इन समस्याग्रस्त एसटीडब्ल्यू को रोक नहीं पाता है। यदि आप उत्सुक हैं, तो C4 कलेक्टर के अन्वेषकों ने एक पत्र प्रकाशित किया कि यह कैसे काम करता है: dl.acm.org/citation.cfm?id=1064988
स्कॉट सेलर्स

स्कॉट, मैंने यहां पढ़ा। blog.mikemccandless.com/2012/07/… कि अज़ुल एक कर्नेल मॉड्यूल को शिप करता है जो जेवीएम उपयोग के लिए मेमोरी आवंटित करता है। क्या यह सच नहीं है? यदि सही है, तो कर्नेल संशोधन का बहुत नहीं, लेकिन फिर भी एक संशोधन।
डैन प्रिट्स

4
जॉर्ज, दो शब्द: पेटेंट संरक्षित। दान, जब आप ज़िंग खरीदते हैं, तो आप जो कुछ भी भुगतान कर रहे हैं उसका एक हिस्सा उनके लोगों को आपके आवेदन के लिए ट्यून कर रहा है - और जिसमें समग्र सिस्टम मेमोरी उपयोग आवंटित करना शामिल है। कर्नेल मॉड्यूल खुद को रोकता है एक मेमोरी ब्लॉक को लिखता है जो कचरा एकत्र किया जा रहा है। यह गुप्त चटनी है जो इसे "रुकावट" बनाती है: थ्रेड्स केवल पॉज़ करते हैं यदि वे उन ब्लॉकों में से एक को लिखने की कोशिश करते हैं, और फिर केवल उस ब्लॉक को कॉम्पैक्ट करने के लिए पर्याप्त लंबे समय तक।
डेविड लेपिक

13

हम पहले से ही लगभग दो वर्षों से G1GC का उपयोग कर रहे हैं। हमारे मिशन क्रिटिकल ट्रांजेक्शन प्रोसेसिंग सिस्टम में यह बहुत अच्छा है, और यह उच्च थ्रूपुट, कम पॉज़, कंसीडर और ऑप्टिमाइज़्ड हैवी मेमोरी मैनेजमेंट के लिए एक बेहतरीन सपोर्ट साबित हुआ है।

हम JVM सेटिंग्स का उपयोग कर रहे हैं:

-server -Xms512m -Xmx3076m -XX:NewRatio=50 -XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC -XX:+AggressiveOpts -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=400 -XX:GCPauseIntervalMillis=8000 -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime

अपडेट किया गया

-d64 -server -Xss4m -Xms1024m -Xmx4096m -XX:NewRatio=50 -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:-DisableExplicitGC -XX:+AggressiveOpts -Xnoclassgc -XX:+UseNUMA -XX:+UseFastAccessorMethods -XX:ReservedCodeCacheSize=48m -XX:+UseStringCache -XX:+UseStringDeduplication -XX:MaxGCPauseMillis=400 -XX:GCPauseIntervalMillis=8000

5
Java 8 में, आपको -XX सेट करने की आवश्यकता नहीं है: + UseCompressedOops या -XX: + DoEscapeAnalysis, बूथ डिफ़ॉल्ट रूप में हैं। देखें: docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
Mirko Ebert

8

जी 1 कलेक्टर पूर्ण संग्रह के प्रभाव को कम करता है। यदि आपके पास एक ऐसा एप्लिकेशन है जहां आपने पहले ही पूर्ण संग्रह की आवश्यकता कम कर दी है, तो समवर्ती मानचित्र स्वीप कलेक्टर उतना ही अच्छा है और मेरे अनुभव में छोटे संग्रह समय कम हैं।


"ध्यान दें कि G1 के उत्पादन उपयोग की अनुमति केवल उसी स्थान पर है जहां एक जावा समर्थन अनुबंध खरीदा गया है।", groups.google.com/forum/# ​​.topic / javaposse / Vm0a4H-QY54 , तो यह एक मिथक है या नहीं?
क्रिस्टोफ रूसो

1
@ChristopheRoussy मुझे नहीं पता कि क्या यह किसी भी अधिक सच है (या वास्तव में सबूत है कि यह कभी सच था) इसे -XX की आवश्यकता नहीं है: + अनलॉक कॉमर्शियल फीचर्स इसलिए मुझे संदेह है कि जी 1 को लाइसेंस की आवश्यकता नहीं है।
पीटर लॉरी

5

ऐसा लगता है कि G1 से शुरू होने वाला JDK7u4 आखिरकार आधिकारिक तौर पर समर्थित है, RN को JDK7u4 http://www.oracle.com/technetwork/java/javase/7u4-relnotes-1575007.html के लिए देखें

अभी भी बड़े JVM के लिए हमारे परीक्षण से CMS अभी भी G1 की तुलना में बेहतर काम करता है, लेकिन मुझे लगता है कि यह बेहतर रूप से विकसित होगा।


5

हाल ही में मुझे इससे स्थानांतरित कर दिया गया है

JDK 1.7.45 के साथ सर्वर पर 4 जी हीप और 8 कोर प्रोसेसर के साथ G1GC को CMS

(JDK 1.8.x G1GC 1.7 से अधिक पसंद किया जाता है, लेकिन कुछ सीमाओं के कारण, मुझे 1.7.45 संस्करण पर टिकना होगा)

मैंने मुख्य मापदंडों से नीचे कॉन्फ़िगर किया है और डिफ़ॉल्ट मानों के लिए अन्य सभी मापदंडों को रखा है।

-XX:G1HeapRegionSize=n, XX:MaxGCPauseMillis=m, -XX:ParallelGCThreads=n, 
-XX:ConcGCThreads=n apart from -Xms and -Xmx

यदि आप इन मापदंडों को ठीक करना चाहते हैं, तो इस ओरेकल लेख पर एक नज़र डालें ।

मुख्य अवलोकन:

  1. मेमोरी उपयोग C1 के साथ उच्च और चढ़ाव के विपरीत G1GC के अनुरूप है
  2. सीएमएस की तुलना में मैक्स जीसी पॉज का समय कम है
  3. CMS की तुलना में G1GC में कचरा संग्रहण में समय थोड़ा अधिक है।
  4. सीएमएस की तुलना में प्रमुख संग्रह की संख्या लगभग नगण्य है
  5. सीएमएस की तुलना में मामूली संग्रह की संख्या अधिक है

लेकिन फिर भी मुझे खुशी है कि मैक्स जीसी ठहराव का समय सीएमएस की तुलना में कम है। मैंने अधिकतम जीसी ठहराव समय 1.5 सेकंड के रूप में निर्धारित किया है और यह मूल्य अभी तक पार नहीं किया गया है।

संबंधित एसई प्रश्न:

जावा 7 (JDK 7) G1 पर कचरा संग्रहण और प्रलेखन


4

सीएमएस धीरे-धीरे अपमानित प्रदर्शन का कारण बन सकता है, भले ही आप इसे बिना किसी स्थिर वस्तुओं को जमा किए चला रहे हों। यह स्मृति विखंडन की वजह से है जो जी 1 माना जाता है।

G1 के बारे में केवल उपलब्ध समर्थन के साथ मिथक सिर्फ एक मिथक है। जेडीके पेज पर सन और अब ओरेकल ने इसे स्पष्ट किया है।


4

जी 1 जीसी बेहतर काम करने वाला है। लेकिन अगर सेटिंग -XX: MaxGCPauseMillis बहुत आक्रामक रूप से, कचरा भी धीरे-धीरे इकट्ठा किया जाएगा। और यही कारण है कि डेविड लेपिक के उदाहरण में पूर्ण जीसी ट्रिगर हुआ।


4

मैंने अभी अपने टेराकोटा बिग मेमोरी प्रोजेक्ट में G1 गारबेज कलेक्टर लागू किया है। विभिन्न प्रकार के कलेक्टरों पर काम करते समय G1 ने हमें 600ms प्रतिसाद से कम समय के साथ सर्वश्रेष्ठ परिणाम दिए।

आप परीक्षण के परिणाम प्राप्त कर सकते हैं (कुल 26) यहाँ

आशा करता हूँ की ये काम करेगा।


3

मैंने हाल ही में Twicsy के एक हिस्से को 128GB RAM वाले नए सर्वर में माइग्रेट किया है और 1.7 का उपयोग करने का निर्णय लिया है। मैंने सभी मेमोरी सेटिंग्स का उपयोग करना शुरू कर दिया, जैसा कि मैंने 1.6 के साथ उपयोग किया था (मेरे पास कई उदाहरण हैं जो विभिन्न चीजें कर रहे हैं, कहीं भी 500mb से 15GB तक, और अब 40GB के साथ एक नया) और वह बिल्कुल भी अच्छा काम नहीं करता है । 1.7 1.6 से अधिक ढेर का उपयोग करने लगता है, और मैंने पहले कुछ दिनों में बहुत सारे मुद्दों का अनुभव किया। मैं सौभाग्य से RAM के साथ काम करने के लिए भरपूर था और मेरी अधिकांश प्रक्रियाओं के लिए RAM को टक्कर देता था, लेकिन फिर भी कुछ समस्याएँ थीं। मेरा सामान्य एमओ 16 गीगावॉट के अधिकतम ढेर के साथ 16 मीटर के बहुत कम न्यूनतम आकार का उपयोग करना था, फिर वृद्धिशील जीसी चालू करें। इससे ठहराव कम से कम रहा। हालांकि अब यह काम नहीं करता है, और मुझे न्यूनतम आकार में वृद्धि करनी थी, जो मुझे ढेर में औसतन उपयोग करने की उम्मीद थी, और इसने बहुत अच्छा काम किया है। मेरे पास अभी भी वृद्धिशील जीसी चालू है, लेकिन मैं इसके बिना कोशिश करूंगा। अब जो कुछ भी नहीं है, और चीजें बहुत तेजी से चल रही हैं। इसलिए, मुझे लगता है कि कहानी की नैतिकता से आपकी मेमोरी सेटिंग्स के 1.6 से 1.7 तक पूरी तरह से अनुवाद करने की उम्मीद नहीं है।


2

G1 एप्लिकेशन को बहुत अधिक चुस्त बनाता है: एप्लिकेशन की लेटेंसी बढ़ेगी - ऐप को "सॉफ्ट-रियल-टाइम" नाम दिया जा सकता है। यह दो प्रकार के जीसी रन (छोटे नाबालिग वाले और एक बड़े पर टेनोर्ड जनरल) को समान आकार के छोटे लोगों को बदलने के द्वारा किया जाता है।

अधिक जानकारी के लिए इसे देखें: http://geekroom.de/java/java-expertise-g1-fur-java-7/


1

मैं जावा के साथ काम कर रहा हूं, छोटे और बड़े हीप के लिए, और जीसी और फुल जीसी का सवाल हर दिन दिखाई देता है, क्योंकि बाधाएं दूसरों की तुलना में अधिक सख्त हो सकती हैं: निश्चित वातावरण में, स्केवेंजर जीसी या पूर्ण जीसी के 0.1 सेकंड, मार बस fonctionnalité, और ठीक दानेदार विन्यास और क्षमता महत्वपूर्ण है (CMS, iCMS, अन्य ... लक्ष्य यहाँ लगभग वास्तविक समय उपचार के साथ सर्वोत्तम संभव प्रतिक्रिया समय है (यहाँ वास्तविक समय उपचार अक्सर 25 एमएस है) , इसलिए, मूल रूप से, GC ergonomy ans heuristique में किसी भी सुधार का स्वागत है!


1

मैं Java 8 पर G1GC का उपयोग करता हूं और Groovy (भी Java 8) के साथ, और मैं विभिन्न प्रकार के वर्कलोड कर रहा हूं, और G1GC इस तरह काम करता है:

  • स्मृति उपयोग बहुत कम है, उदाहरण के लिए डिफ़ॉल्ट जावा सेटिंग्स की तुलना में 500 एमबी के बजाय 100 एमबी

  • प्रतिक्रिया समय सुसंगत और बहुत कम है

  • सबसे खराब स्थिति में (ट्यूनिंग, सिंगल-थ्रेडेड एप्लिकेशन के बिना) G1GC का उपयोग करते समय डिफ़ॉल्ट सेटिंग्स और G1GC के बीच प्रदर्शन 20% मंदी है। यह बहुत अच्छा प्रतिक्रिया समय और कम स्मृति उपयोग पर विचार नहीं कर रहा है।

  • टॉम्कट से चलने पर जो बहु-थ्रेडेड होता है, समग्र प्रदर्शन 30% बेहतर होता है और मेमोरी का उपयोग बहुत कम होता है और साथ ही प्रतिक्रिया समय भी बहुत कम होता है।

कुल मिलाकर, जब वास्तव में विभिन्न कार्यभार का उपयोग करते हैं, तो बहु-थ्रेडेड अनुप्रयोगों के लिए G1GC जावा 8 के लिए बहुत अच्छा कलेक्टर है, और एकल-थ्रेडेड के लिए भी कुछ लाभ हैं।


0

यह हॉटस्पॉट जैसे जेवीएम के साथ फ्लोट पॉइंट गणना के लिए java8 w / G1GC का उपयोग करने का सुझाव नहीं दिया गया है। यह एप्लिकेशन अखंडता और सटीकता के लिए खतरनाक है।

https://bugs.openjdk.java.net/browse/JDK-8148175

JDK-8165766

JDK-8186112

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.