बीच अंतर -XX: + UseParallelGC और -XX: + UseParNewGC


83

वे युवा पीढ़ी के कचरा संग्रह के लिए एल्गोरिदम हैं।

दूसरा एक (UseParNewGC) समवर्ती दसवीं पीढ़ी के कचरा संग्रह ( जावा समवर्ती और समानांतर जीसी देखें ) के साथ स्वचालित रूप से सक्रिय हो जाता है , लेकिन, क्या दो समानांतर एल्गोरिदम के बीच अंतर है?

जवाबों:


119

बहुत खोज करने के बाद, मैंने पाया सबसे अच्छा स्पष्टीकरण महीने के प्रश्न में जावा प्रदर्शन ट्यूनिंग वेबसाइट से है : 1.4.1 कचरा संग्रह एल्गोरिदम, 29 जनवरी, 2003

युवा पीढ़ी कचरा संग्रह एल्गोरिदम

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

समानांतर नकल कलेक्टर (-XX का उपयोग कर सक्रिय: + UseParNewGC)। मूल प्रतिलिपि संग्राहक की तरह, यह एक स्टॉप-द-वर्ल्ड कलेक्टर है। हालाँकि यह कलेक्टर कई थ्रेड्स पर नकल संग्रह को समानांतर करता है, जो मल्टी-सीपीयू मशीनों के लिए मूल सिंगल-थ्रेड कॉपी कलेक्टर की तुलना में अधिक कुशल है (हालांकि सिंगल-सीपीयू मशीनों के लिए नहीं)। यह एल्गोरिथ्म मूल रूप से एकल-थ्रेडेड कॉपी कलेक्टर की तुलना में उपलब्ध सीपीयू की संख्या के बराबर कारक द्वारा युवा पीढ़ी के संग्रह को संभावित रूप से गति देता है।

समानांतर मांजना कलेक्टर (-XX का उपयोग कर सक्रिय: UseParallelGC)। यह पिछले समानांतर कॉपी कलेक्टर की तरह है, लेकिन एल्गोरिथ्म मल्टी-सीपीयू मशीनों पर गीगाबाइट हीप्स (10 जीबी से अधिक) के लिए ट्यून किया गया है। यह संग्रह एल्गोरिथ्म ठहराव को कम करते हुए थ्रूपुट को अधिकतम करने के लिए डिज़ाइन किया गया है। इसमें एक वैकल्पिक अनुकूली ट्यूनिंग नीति है जो स्वचालित रूप से हीप स्पेस का आकार बदलेगी। यदि आप इस कलेक्टर का उपयोग करते हैं, तो आप केवल पुरानी पीढ़ी में मूल मार्क-स्वीप कलेक्टर का उपयोग कर सकते हैं (यानी नई पुरानी पीढ़ी के समवर्ती कलेक्टर इस युवा पीढ़ी के कलेक्टर के साथ काम नहीं कर सकते हैं)।

इस जानकारी से, यह मुख्य अंतर लगता है (सीएमएस सहयोग के अलावा) यह है कि UseParallelGC, एर्गोनॉमिक्स का समर्थन करता है जबकि UseParNewGC नहीं करता है।


3
थोड़ा और अधिक अप टू डेट लिंक fastj.com/articles/oraclecollectors1.shtml
phunehehe

@ लिंक के लिए धन्यवाद! यह बहुत मददगार है।
द स्टूडेंट सोल

21

समानांतर जीसी

  • XX: + UseParallelGC स्कैवेंज़ के लिए समानांतर कचरा संग्रह का उपयोग करें। (1.4.1 में प्रस्तुत किया गया)
  • XX: + UseParallelOldGC पूर्ण संग्रह के लिए समानांतर कचरा संग्रह का उपयोग करें। इस विकल्प को स्वचालित रूप से सेट करना -XX: + UseParallelGC। (5.0 अद्यतन 6 में प्रस्तुत किया गया)

UseParNewGC

UseParNewGC समवर्ती कलेक्टर (यानी -XX: + UseConcMarkSweepGC कमांड लाइन पर प्रयोग किया जाता है, तो समवर्ती कलेक्टर के साथ युवा पीढ़ी की नकल करने वाले कलेक्टर के समानांतर संस्करण का उपयोग किया जाता है। ध्वज का उपयोग तब होता है, जब यह अन्यथा कमांड लाइन पर स्पष्ट रूप से सेट न हो। )।

शायद समझने का सबसे आसान तरीका एलेक्सी रागज़िन द्वारा किए गए कचरा संग्रह एल्गोरिदम का संयोजन था

निष्कर्ष:

  1. लागू करें -XX: + UseParallelGC जब आपको केवल YOUNG पीढ़ी पर समानांतर संग्रह विधि की आवश्यकता हो , ( लेकिन फिर भी) धारावाहिक-चिह्न-स्वीप विधि का उपयोग करें OLD पीढ़ी संग्रह के रूप में करें
  2. लागू करें -XX: + UseParallelOldGC जब आपको YOUNG पीढ़ी (स्वचालित रूप से सेट -XX: + UseParallelGC) पर समानांतर संग्रह विधि की आवश्यकता होती है और OLD पीढ़ी संग्रह
  3. लागू करें -XX: + UseParNewGC & -XX: + UseConcMarkSweepGC जब आपको YOUNG पीढ़ी पर समानांतर संग्रह विधि की आवश्यकता होती है और आपके संग्रह के रूप में CMS विधि की आवश्यकता होती है OLD पीढ़ी की मेमोरी
  4. आप -XX: + UseParbridGC or -XX: + UseParallelOldGC with -XX: + UseConcMarkSweepGC एक साथ लागू नहीं कर सकते, इसीलिए आपकी आवश्यकता -XX: + UseParNewGC को CMS के साथ जोड़ा जाना चाहिए अन्यथा -XX: + UseSerialGC स्पष्ट रूप से OR -XX: - UseParNewGC यदि आप युवा पीढ़ी के खिलाफ धारावाहिक विधि का उपयोग करना चाहते हैं

होना ही चाहिए -XX:-UseParallelGC
मिनस मीना

नोट: निष्कर्ष # 1 अब सही नहीं है। आवेदन -XX:+UseParallelGCकरने से आधुनिक जेवीएम के लिए युवा और पुराने जीसी दोनों के लिए समानांतर जीसी का उपयोग होता है। देखें bugs.openjdk.java.net/browse/...
turbanoff

15

UseParNewGC को आमतौर पर "समानांतर युवा पीढ़ी कलेक्टर" के रूप में जाना जाता है, जो सभी प्रकार के समानांतर कचरा कलेक्टर (-XX: + UseParallelGC) के समान है, सिवाय इसके कि इसके अधिक परिष्कारित और अपवित्र। साथ ही इसका उपयोग "समवर्ती कम ठहराव कलेक्टर" के साथ किया जा सकता है।

अधिक जानकारी के लिए जावा GC FAQ देखें , प्रश्न 22।

ध्यान दें कि UseParNewGC के साथ कुछ ज्ञात बग हैं


8
क्या आप जानते हैं कि कौन से ज्ञात कीड़े या कौन से जेवीएम संस्करण हैं?
fglez

4

का उपयोग करते हुए -XX: + -PPNNGCGC के साथ -XX का उपयोग करें: + UseConcMarkSweepGC, जब -XX: + UseParallelGC की तुलना में माइनर जीसी के लिए उच्च ठहराव समय का कारण होगा।

ऐसा इसलिए है क्योंकि यंग से ओल्ड जेनरेशन तक की वस्तुओं के प्रचार के लिए इस ऑब्जेक्ट का पता खोजने के लिए एक बेस्ट-फिट एल्गोरिदम (पुरानी पीढ़ी के विखंडन के कारण) को चलाने की आवश्यकता होगी।
-XX का उपयोग करते समय ऐसे एल्गोरिथ्म को चलाने की आवश्यकता नहीं होती है: + UseParallelGC, जैसा कि + UseParallelGC को केवल मार्कैंड कॉमपैक्ट कलेक्टर के साथ कॉन्फ़िगर किया जा सकता है, जिस स्थिति में कोई विखंडन नहीं होता है।


यह वास्तव में अच्छी अंतर्दृष्टि है। क्या आपने इसकी पुष्टि के लिए कोई परीक्षण किया?
22 अप्रैल को
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.