2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
कचरासंग्रहकः कचरासंग्रहणस्य एल्गोरिदमस्य विशिष्टं कार्यान्वयनम् अस्ति . यतः कचरासंग्रहकः युवा पीढीयां पुरातनपीढीयां च विभक्तः अस्ति, G1 इत्यस्य अतिरिक्तं (यत् नूतनपीढीं पुरातनपीढीं च नियन्त्रयितुं शक्नोति),नवीनपीढीयाः पुरातनपीढीयाः च कचरासंग्रहकर्तृणां उपयोगः हॉटस्पॉट्-आवश्यकतानुसारं युग्मरूपेण अवश्यं करणीयः ।(भवता JDK संस्करणस्य अनुसारं तत्सम्बद्धं संयोजनं चिन्वितुं आवश्यकम्)
विशिष्टः संयोगसम्बन्धः यथा ।
JVM अन्तर्निहितस्रोतसङ्केते, केषुचित् विशेषेषु सन्दर्भेषु, CMS पुनःप्रयोगकः Serial Old पुनःप्रयोगकर्तारं आह्वयिष्यति ।
भवन्तः प्रत्यक्षतया द्रष्टुं न शक्नुवन्ति यत् किं कचरासंग्रहकं प्रयुक्तं भवति, केवलं अल्गोरिदम् आधारेण एव अनुमानं कर्तुं शक्नुवन्ति ।
धारावाहिकः कयुवा पीढी के एकसूत्रधारी धारावाहिक संग्रहकचरासंग्रहकः ।
एकस्मिन् CPU प्रोसेसरे उत्तमं थ्रूपुट्
बहु-CPU इत्यस्य अन्तर्गतं थ्रूपुट् अन्येषां कचरासंग्रहकर्तृणां इव उत्तमः नास्ति (एक-सूत्रयुक्तः, केवलं एकस्य CPU इत्यस्य उपयोगेन यदि राशौ अत्यधिकं भवति तर्हि उपयोक्तृ-सूत्रं दीर्घकालं प्रतीक्षते
जावा मध्ये लिखिताः क्लायन्ट् प्रोग्रामाः अथवा सीमितहार्डवेयरविन्यासयुक्ताः परिदृश्याः (बहुः CPU कोराः न)
-XX: UseSerialGC
: नवीनपीढी पुरातनपीढी च क्रमाङ्कसंग्रहकस्य उपयोगं कुर्वन्ति।
SerialOld इति Serial garbage collector इत्यस्य पुरातनपीढीयाः संस्करणम् अस्ति, यस्य उपयोगेनएक-सूत्रधारी धारावाहिक संग्रह
एकस्मिन् CPU प्रोसेसरे उत्तमं थ्रूपुट्
बहु-CPU इत्यस्य अन्तर्गतं थ्रूपुट् अन्येषां कचरासंग्रहकर्तृणां इव उत्तमः नास्ति यदि राशौ अत्यधिकं भवति तर्हि उपयोक्तृसूत्रं दीर्घकालं प्रतीक्षते ।
Serial garbage collector इत्यनेन सह उपयुज्यते, अथवा CMS विशेषप्रकरणेषु
-XX: UseSerialGC
: नवीनपीढी पुरातनपीढी च क्रमाङ्कसंग्रहकस्य उपयोगं कुर्वन्ति।
ParNew कचरासंग्रहकः मूलतः अस्तिबहुविध-सीपीयू-अन्तर्गत-सीरियलस्य अनुकूलनम्, कचरासंग्रहणार्थं बहुसूत्रीकरणस्य उपयोगः
-XX: UseParNewGC
: नूतनपीढी ParNew संग्राहकस्य उपयोगं करोति, पुरातनपीढी च क्रमाङ्कसंग्रहकस्य उपयोगं करोति ।CMS कचरासंग्रहकः प्रणाल्याः विरामसमये (STW न्यूनीकर्तुं उपयोक्तृअनुभवं अनुकूलितुं च) केन्द्रीक्रियते,उपयोक्तृसूत्राणि कचरासंग्रहणसूत्राणि च कतिपयेषु चरणेषु एकत्रैव निष्पादयितुं अनुमन्यताम्, उपयोक्तृसूत्राणां प्रतीक्षासमयं न्यूनीकरोति ।
1. स्मृतिविखण्डनसमस्या
2. अवनतिसमस्या (केषुचित् विशिष्टेषु सन्दर्भेषु, एतत् SerialOld इत्यादिषु एकसूत्रयुक्ते संग्राहके क्षीणं भविष्यति)
3. प्लवमानकचरासमस्या (पुनःप्रयोगप्रक्रियायां केचन कचराः पुनःप्रयोगः कर्तुं न शक्यन्ते)
बृहत्-स्तरीय-अन्तर्जाल-प्रणालीषु परिदृश्यानि यत्र उपयोक्तारः बृहत्-मात्रायां आँकडानां उच्च-आवृत्तिः च अनुरोधयन्ति, यथा आदेश-अन्तरफलकम्, उत्पाद-अन्तरफलकम् इत्यादयः
XX: UseConcMarkSweepGC
, भवन्तः क्रमशः युवानां पीढीयाः, पुरातनपीढीयाः च संग्राहकाः सेट् कर्तुं शक्नुवन्ति ।
नोटः- 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 करिष्यतिस्वयमेव ढेरस्मृति आकारं समायोजयन्तु (नवीनपीढी, पुरातनपीढी स्मृति आकारः, प्रचार-दहलीजं समायोजयन्तु)。
Parallel Scavenge अधिकतमविरामसमयस्य, थ्रूपुटस्य च मैनुअल् सेटिंग् इत्यस्य अनुमतिं ददाति । Oracle अधिकारिणः अनुशंसन्ति यत् एतत् संयोजनं उपयुज्य अधिकतमं ढेरस्मृतिं न सेट् कर्तव्या कचरासंग्रहकः अधिकतमविरामसमयस्य, थ्रूपुटस्य च आधारेण स्वयमेव स्मृतिआकारं समायोजयिष्यति ।
-XX:MaxGCPauseMillis=n
प्रत्येकस्य कचरासङ्ग्रहस्य अधिकतमं विराममिलिसेकेण्ड् सेट् कुर्वन्तु-XX:GCTimeRatio=n
थ्रूपुटं n (उपयोक्तृसूत्रनिष्पादनसमयः = n/(n 1)) इति सेट् कुर्वन्तु ।-XX: UseAdaptiveSizePolicy
सेटिङ्ग् इत्यनेन कचरासंग्रहकं स्वयमेव थ्रूपुट् इत्यस्य आधारेण तथा अधिकतमविराममिलिसेकेण्ड् इत्यस्य आधारेण स्मृतिआकारं समायोजयितुं शक्यते (Oracle अनुशंसति यत् PS संयोजनस्य उपयोगं कुर्वन्, ढेरस्मृतेः अधिकतमं मूल्यं न सेट् कुर्वन्तु तथा च कचरासंग्रहकं स्वयमेव समायोजितुं ददातु ) ९.नोटः- अधिकतमविरामसमयस्य, थ्रूपुटस्य च सूचकद्वयं विग्रहे स्तः कचरासंग्रहकः अधिकतमविरामसमयं पूरयितुं सर्वोत्तमप्रयत्नः करिष्यति (कदाचित् अतीव लघु सेट् भवति तथा च पूरयितुं न शक्यते, तथा च सेट् अधिकतमविरामसमयः अतिक्रान्तः भविष्यति) , थ्रूपुटस्य त्यागं कुर्वन्।यदि भवान् अधिकतमं विरामसमयं, थ्रूपुटं च एकस्मिन् समये सेट् कर्तुम् इच्छति तर्हि तान् अधिकं समन्वितं कर्तुं अधिकानि परीक्षणानि कर्तव्यानि ।
Parallel Old इति पुरातनपीढीयाः संस्करणं Parallel Scavenge संग्राहकस्य कृते डिजाइनं कृतम् अस्ति, यत्र बहु-धागायुक्तं समवर्ती संग्रहस्य उपयोगः भवति ।
JDK8 पूर्वनिर्धारितरूपेण अस्य पुनःप्रयोगकस्य उपयोगाय मापदण्डान् सेट् करोति ।
पैरामीटर् : १.-XX: UseParallelGC
वा-XX: UseParallelOldGC
Parallel 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