प्रौद्योगिकी साझेदारी

[JVM Basics] जावा कचरा संग्राहकस्य परिचयः

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

कचरा संग्राहकः (कचरा संग्रहण एल्गोरिदम् कार्यान्वयनम्) २.

कचरासंग्रहकः कचरासंग्रहणस्य एल्गोरिदमस्य विशिष्टं कार्यान्वयनम् अस्ति . यतः कचरासंग्रहकः युवा पीढीयां पुरातनपीढीयां च विभक्तः अस्ति, G1 इत्यस्य अतिरिक्तं (यत् नूतनपीढीं पुरातनपीढीं च नियन्त्रयितुं शक्नोति),नवीनपीढीयाः पुरातनपीढीयाः च कचरासंग्रहकर्तृणां उपयोगः हॉटस्पॉट्-आवश्यकतानुसारं युग्मरूपेण अवश्यं करणीयः ।(भवता JDK संस्करणस्य अनुसारं तत्सम्बद्धं संयोजनं चिन्वितुं आवश्यकम्)

विशिष्टः संयोगसम्बन्धः यथा ।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

JVM अन्तर्निहितस्रोतसङ्केते, केषुचित् विशेषेषु सन्दर्भेषु, CMS पुनःप्रयोगकः Serial Old पुनःप्रयोगकर्तारं आह्वयिष्यति ।

अर्थाः प्रयुक्तं कचरासंग्रहकं पश्यन्ति

भवन्तः प्रत्यक्षतया द्रष्टुं न शक्नुवन्ति यत् किं कचरासंग्रहकं प्रयुक्तं भवति, केवलं अल्गोरिदम् आधारेण एव अनुमानं कर्तुं शक्नुवन्ति ।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

युवा पीढ़ी-श्रृंखला कचरा संग्राहक

धारावाहिकः कयुवा पीढी के एकसूत्रधारी धारावाहिक संग्रहकचरासंग्रहकः ।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

पुनःप्रयोगः युगाः एल्गोरिदम् च

  • युवा पीढी
  • प्रतिकृति एल्गोरिदम

लाभ

एकस्मिन् CPU प्रोसेसरे उत्तमं थ्रूपुट्

अभावः

बहु-CPU इत्यस्य अन्तर्गतं थ्रूपुट् अन्येषां कचरासंग्रहकर्तृणां इव उत्तमः नास्ति (एक-सूत्रयुक्तः, केवलं एकस्य CPU इत्यस्य उपयोगेन यदि राशौ अत्यधिकं भवति तर्हि उपयोक्तृ-सूत्रं दीर्घकालं प्रतीक्षते

प्रयोज्य दृश्य

जावा मध्ये लिखिताः क्लायन्ट् प्रोग्रामाः अथवा सीमितहार्डवेयरविन्यासयुक्ताः परिदृश्याः (बहुः CPU कोराः न)

कथं प्रयोगः करणीयः

-XX: UseSerialGC: नवीनपीढी पुरातनपीढी च क्रमाङ्कसंग्रहकस्य उपयोगं कुर्वन्ति।

पुरातन पीढ़ी-Serialपुराण कचरा संग्राहक

SerialOld इति Serial garbage collector इत्यस्य पुरातनपीढीयाः संस्करणम् अस्ति, यस्य उपयोगेनएक-सूत्रधारी धारावाहिक संग्रह

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

पुनःप्रयोगः युगाः एल्गोरिदम् च

  • जरा
  • चिह्न-संयोजन एल्गोरिदम

लाभ

एकस्मिन् CPU प्रोसेसरे उत्तमं थ्रूपुट्

अभावः

बहु-CPU इत्यस्य अन्तर्गतं थ्रूपुट् अन्येषां कचरासंग्रहकर्तृणां इव उत्तमः नास्ति यदि राशौ अत्यधिकं भवति तर्हि उपयोक्तृसूत्रं दीर्घकालं प्रतीक्षते ।

प्रयोज्य दृश्य

Serial garbage collector इत्यनेन सह उपयुज्यते, अथवा CMS विशेषप्रकरणेषु

कथं प्रयोगः करणीयः

-XX: UseSerialGC: नवीनपीढी पुरातनपीढी च क्रमाङ्कसंग्रहकस्य उपयोगं कुर्वन्ति।

युवा जनरेशन-ParNew कचरा संग्राहक

ParNew कचरासंग्रहकः मूलतः अस्तिबहुविध-सीपीयू-अन्तर्गत-सीरियलस्य अनुकूलनम्, कचरासंग्रहणार्थं बहुसूत्रीकरणस्य उपयोगः

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

पुनःप्रयोगस्य आयुः एल्गोरिदम् च : १.

  • युवा पीढी
  • प्रतिकृति एल्गोरिदम

लाभ

  • बहु-CPU प्रोसेसर-अन्तर्गतं लघुविरामसमयः

अभावः

  • थ्रूपुट्, विरामसमयः च G1 इव उत्तमः नास्ति, अतः JDK9 इत्यस्य अनन्तरं न अनुशंसितम्

प्रयोज्य दृश्य

  • JDK8 तथा पूर्वसंस्करणेषु CMS पुरातनपीढीयाः कचरासंग्रहकर्तृणा सह मिलित्वा अस्य उपयोगः भवति ।

कथं प्रयोगः करणीयः

  • -XX: UseParNewGC: नूतनपीढी ParNew संग्राहकस्य उपयोगं करोति, पुरातनपीढी च क्रमाङ्कसंग्रहकस्य उपयोगं करोति ।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

पुरातन पीढी-CMS (Concurrent Mark Sweep) कचरा संग्राहक

CMS कचरासंग्रहकः प्रणाल्याः विरामसमये (STW न्यूनीकर्तुं उपयोक्तृअनुभवं अनुकूलितुं च) केन्द्रीक्रियते,उपयोक्तृसूत्राणि कचरासंग्रहणसूत्राणि च कतिपयेषु चरणेषु एकत्रैव निष्पादयितुं अनुमन्यताम्, उपयोक्तृसूत्राणां प्रतीक्षासमयं न्यूनीकरोति ।

पुनःप्रयोगः युगाः एल्गोरिदम् च

  • जरा
  • एल्गोरिदम् चिह्नं स्वीपं च कुर्वन्तु

लाभ

  • कचरासंग्रहणस्य कारणेन प्रणाल्याः विरामसमयः अल्पः भवति तथा च उपयोक्तृअनुभवः उत्तमः भवति ।

अभावः

1. स्मृतिविखण्डनसमस्या

2. अवनतिसमस्या (केषुचित् विशिष्टेषु सन्दर्भेषु, एतत् SerialOld इत्यादिषु एकसूत्रयुक्ते संग्राहके क्षीणं भविष्यति)

3. प्लवमानकचरासमस्या (पुनःप्रयोगप्रक्रियायां केचन कचराः पुनःप्रयोगः कर्तुं न शक्यन्ते)

प्रयोज्य दृश्य

बृहत्-स्तरीय-अन्तर्जाल-प्रणालीषु परिदृश्यानि यत्र उपयोक्तारः बृहत्-मात्रायां आँकडानां उच्च-आवृत्तिः च अनुरोधयन्ति, यथा आदेश-अन्तरफलकम्, उत्पाद-अन्तरफलकम् इत्यादयः

उपयुञ्जताम्‌

XX: UseConcMarkSweepGC, भवन्तः क्रमशः युवानां पीढीयाः, पुरातनपीढीयाः च संग्राहकाः सेट् कर्तुं शक्नुवन्ति ।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

CMS निष्पादनपदार्थाः

  1. प्रारम्भिकचिह्नीकरणं, अत्यल्पे काले चिह्नीकरणंयेषां वस्तूनाम् GC Roots प्रत्यक्षतया सम्बन्धं कर्तुं शक्नोति
  2. समवर्ती चिह्नं, २. सर्वाणि वस्तुनि चिह्नितव्यानि , उपयोक्तृसूत्रस्य विरामस्य आवश्यकता नास्ति । (यद्यपि समवर्ती चिह्नं उपयोक्तृसूत्रेण सह निष्पादितं भवति तथापि यदि समवर्ती चिह्नेन आकृष्टाः संसाधनाः अधिकाः सन्ति तर्हि उपयोक्तृसूत्रमपि प्रभावितं करिष्यति)
  3. टिप्पणी (समवर्ती), यतः समवर्ती चिह्नीकरणचरणस्य समये केचन वस्तूनि परिवर्तयिष्यन्ति, अतः दुर्लेबलिंगं भविष्यति (प्रयुक्तं वस्तु मूलतः जीवितम् आसीत्, परन्तु चिह्नीकरणानन्तरं, उपयोक्तृसूत्रेण तत् अव्यावहारिकं कृतम्, यस्य परिणामेण गलतलेबलिंग् अभवत्), लेबलिंग् गम्यते ( यतः समवर्ती अस्ति, केचन वस्तूनि अधुना एव उपयोक्तृसूत्रेण निर्मिताः भवेयुः, येन टैग्स्) अन्यपरिस्थितयः च गम्यन्ते, पुनः चिह्नितव्याः च
  4. समवर्ती सफाई, मृतवस्तूनाम् स्वच्छता, उपयोक्तृसूत्राणां विरामस्य आवश्यकता नास्ति ।

नोटः- STW केवलं प्रारम्भिकचिह्नीकरणस्य पुनः चिह्नीकरणस्य च चरणेषु एव दृश्यते।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

अभावः : १.

1. CMS कचरासंग्रहणस्य समाप्तेः अनन्तरं वस्तुनां आवंटनं न प्रभावितं कर्तुं बहुसंख्याकाः स्मृतिखण्डाः दृश्यन्ते ।CMS Full GC इत्यस्य समये विखण्डनं करिष्यति । . एतेन उपयोक्तृसूत्रस्य विरामः भविष्यति,भवान् -XX:CMSFullGCsBeforeCompaction=N पैरामीटर् (पूर्वनिर्धारितं 0) उपयोक्तुं शक्नोति यत् Full GC N वारं समायोजयितुं शक्नोति तत् क्रमबद्धुं पूर्वं ।

2. समवर्ती सफाईप्रक्रियायाः समये उत्पन्नं "प्लवमानं कचरा" सम्भालितुं असमर्थः, तथा च सम्पूर्णं कचरासंग्रहणं प्राप्तुं न शक्नोति (अस्मिन् स्वच्छताप्रक्रियायां उपयोक्तृसूत्रेण युगपत् कानिचन वस्तूनि निर्मिताः, परन्तु तेषां पुनः शीघ्रमेव उपयोगः न कृतः। एतानि वस्तूनि It is not अस्मिन् सफाईयां पुनः प्रयुक्तः अस्ति तथा च अग्रिमशुद्धिपर्यन्तं प्रतीक्षा कर्तव्या, अतः प्लवमानकचरः इति कथ्यते) ।

3. यदि पुरातनपीढीयां वस्तुनां आवंटनार्थं अपर्याप्तस्मृतिः अस्ति तर्हि CMS पुरातनपीढीं पुनःप्रयोगं कृत्वा Serial Old single-thread इति क्षीणं भविष्यति ।

समवर्तीसूत्राणां संख्या : १.

CMS मध्ये समवर्तीचरणं चालयति समये थ्रेड्-सङ्ख्या पारयितुं शक्यते-XX:ConcGCThreadsपैरामीटर् सेटिंग्, प्रणालीद्वारा गणितं, गणनासूत्रं भवति(-XX:ParallelGCThreads定义的线程数 3) / 4, ParallelGCThreads STW विरामस्य अनन्तरं समानान्तरसूत्राणां संख्या अस्ति

ParallelGCThreads प्रोसेसरकोरस्य संख्यायाः आधारेण निर्धारितं भवति:

1. यदा CPU कोरस्य संख्या 8 तः न्यूना भवति तदा ParallelGCThreads = CPU कोरस्य संख्या

2. अन्यथा ParallelGCThreads = 8 (CPU कोरस्य संख्या – 8)*5/8

मम सङ्गणके १२ तार्किकप्रोसेसराः सन्ति, अतः ParallelGCThreads = ८ (१२ - ८) * ५/८ = १०, ConcGCThreads = (-XX: ParallelGCThreads द्वारा परिभाषितस्य थ्रेड्-सङ्ख्या ३) / ४ = (१० ३) / ४ = ३

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

अन्ते भवान् एतत् चित्रं प्राप्तुं शक्नोति:

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

समवर्ती चिह्नीकरणं समवर्ती सफाई च चरणं त्रयाणां सूत्राणां उपयोगेन समानान्तरेण संसाधितं भविष्यति। पुनः चिह्नीकरणचरणं १० सूत्राणां उपयोगेन संसाधितं भविष्यति । यतः CPU कोरस्य संख्या सीमितं भवति, समवर्ती चरणः उपयोक्तृसूत्रनिष्पादनस्य कार्यक्षमतां प्रभावितं करिष्यति ।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

युवा पीढी-समानांतर मेहतर कचरा संग्राहक

समानान्तर स्कैवेन्ज इतिJDK8 पूर्वनिर्धारित युवा पीढी कचरा संग्राहक,बहुधापाठनम्समानान्तर संग्रहसिस्टम् थ्रूपुट् इत्यत्र ध्यानं दत्तव्यम् .थ्रूपुट् वर्धयितुं PS करिष्यतिस्वयमेव ढेरस्मृति आकारं समायोजयन्तु (नवीनपीढी, पुरातनपीढी स्मृति आकारः, प्रचार-दहलीजं समायोजयन्तु)

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

पुनःप्रयोगः युगाः एल्गोरिदम् च

  • युवा पीढी
  • प्रतिकृति एल्गोरिदम

लाभ

  • थ्रूपुट् उच्चं भवति, तथा च थ्रूपुट् नियन्त्रयितुं पैरामीटर्स् इत्यस्य मैनुअल् सेट् समर्थयति । थ्रूपुट् इत्यस्य उन्नयनार्थं वर्चुअल् मशीन् गतिशीलरूपेण राशेः मापदण्डान् समायोजयति (उपयोक्त्रेण केवलं थ्रूपुट् सेट् कर्तुं आवश्यकं भवति, तथा च अन्ये पैरामीटर्स् यथा मेमोरी आकारः सेट् कर्तुं आवश्यकता नास्ति)

अभावः

  • एकस्य विरामसमयस्य गारण्टी नास्ति, परन्तु STW समयं सेट् कर्तुं समर्थयति ।

प्रयोज्य दृश्य

  • पृष्ठभूमिकार्येषु उपयोक्तृपरस्परक्रियायाः आवश्यकता नास्ति तथा च बहुसंख्याकाः वस्तुनः जनयितुं प्रवृत्ताः भवन्ति ।यथा : बृहत् दत्तांशसंसाधनम्, बृहत् सञ्चिकानिर्यातः

सामान्य मापदण्ड

Parallel Scavenge अधिकतमविरामसमयस्य, थ्रूपुटस्य च मैनुअल् सेटिंग् इत्यस्य अनुमतिं ददाति । Oracle अधिकारिणः अनुशंसन्ति यत् एतत् संयोजनं उपयुज्य अधिकतमं ढेरस्मृतिं न सेट् कर्तव्या कचरासंग्रहकः अधिकतमविरामसमयस्य, थ्रूपुटस्य च आधारेण स्वयमेव स्मृतिआकारं समायोजयिष्यति ।

  • अधिकतमं विरामसमयः, २.-XX:MaxGCPauseMillis=n प्रत्येकस्य कचरासङ्ग्रहस्य अधिकतमं विराममिलिसेकेण्ड् सेट् कुर्वन्तु
  • थ्रूपुट्, ९.-XX:GCTimeRatio=n थ्रूपुटं n (उपयोक्तृसूत्रनिष्पादनसमयः = n/(n 1)) इति सेट् कुर्वन्तु ।
  • स्मृति आकारं स्वयमेव समायोजयन्तु, . -XX: UseAdaptiveSizePolicyसेटिङ्ग् इत्यनेन कचरासंग्रहकं स्वयमेव थ्रूपुट् इत्यस्य आधारेण तथा अधिकतमविराममिलिसेकेण्ड् इत्यस्य आधारेण स्मृतिआकारं समायोजयितुं शक्यते (Oracle अनुशंसति यत् PS संयोजनस्य उपयोगं कुर्वन्, ढेरस्मृतेः अधिकतमं मूल्यं न सेट् कुर्वन्तु तथा च कचरासंग्रहकं स्वयमेव समायोजितुं ददातु ) ९.

नोटः- अधिकतमविरामसमयस्य, थ्रूपुटस्य च सूचकद्वयं विग्रहे स्तः कचरासंग्रहकः अधिकतमविरामसमयं पूरयितुं सर्वोत्तमप्रयत्नः करिष्यति (कदाचित् अतीव लघु सेट् भवति तथा च पूरयितुं न शक्यते, तथा च सेट् अधिकतमविरामसमयः अतिक्रान्तः भविष्यति) , थ्रूपुटस्य त्यागं कुर्वन्।यदि भवान् अधिकतमं विरामसमयं, थ्रूपुटं च एकस्मिन् समये सेट् कर्तुम् इच्छति तर्हि तान् अधिकं समन्वितं कर्तुं अधिकानि परीक्षणानि कर्तव्यानि ।

पुरातन पीढ़ी-समानांतर पुराना कचरा संग्राहक

Parallel Old इति पुरातनपीढीयाः संस्करणं Parallel Scavenge संग्राहकस्य कृते डिजाइनं कृतम् अस्ति, यत्र बहु-धागायुक्तं समवर्ती संग्रहस्य उपयोगः भवति ।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

पुनःप्रयोगः युगाः एल्गोरिदम् च

  • जरा
  • चिह्न-संयोजन-एल्गोरिदम् (वास्तवतः चिह्न-सफाई-क्रमणम्)

लाभ

  • बहु-कोर-सीपीयू-अन्तर्गतं समवर्ती-सङ्ग्रहः अधिकं कुशलः भवति

अभावः

  • विरामसमयः अधिकः भविष्यति

प्रयोज्य दृश्य

  • Parallel Scavenge इत्यनेन सह उपयुज्यते

कथं प्रयोगः करणीयः

JDK8 पूर्वनिर्धारितरूपेण अस्य पुनःप्रयोगकस्य उपयोगाय मापदण्डान् सेट् करोति ।

पैरामीटर् : १.-XX: UseParallelGC वा-XX: UseParallelOldGCParallel Scavenge Parallel Old इति संयोजनस्य उपयोगं कर्तुं शक्नुवन्ति ।
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

परीक्षा

-XX: PrintFlagsFinal: कार्यक्रमस्य आरम्भे सर्वेषां विन्यासवस्तूनाम् अन्तिममूल्यानि मुद्रयितुं शक्नुवन्ति यत् स्वचालितसमायोजनकार्यं चालू अस्ति वा इति।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 垃圾回收器案例3
 */
//-XX: UseSerialGC -Xmn1g -Xmx16g -XX:SurvivorRatio=8  -XX: PrintGCDetails -verbose:gc -XX: PrintFlagsFinal
//-XX: UseParNewGC  -Xmn1g -Xmx16g -XX:SurvivorRatio=8  -XX: PrintGCDetails -verbose:gc
//-XX: UseConcMarkSweepGC
//-XX: UseG1GC   -Xmn8g -Xmx16g -XX:SurvivorRatio=8  -XX: PrintGCDetails -verbose:gc MaxGCPauseMillis
//-XX: PrintFlagsFinal  -XX:GCTimeRatio = 19  -XX:MaxGCPauseMillis=10 -XX: UseAdaptiveSizePolicy
public class GcDemo2 {

    public static void main(String[] args) throws IOException {
        int count = 0;
        List