CodeGym /Java Blog /சீரற்ற /குப்பை சேகரிப்பவர் பற்றி மேலும்
John Squirrels
நிலை 41
San Francisco

குப்பை சேகரிப்பவர் பற்றி மேலும்

சீரற்ற குழுவில் வெளியிடப்பட்டது
வணக்கம்! கடந்த பாடத்தில், ஜாவாவின் உள்ளமைக்கப்பட்ட குப்பை சேகரிப்பாளருடன் நாங்கள் முதலில் பழகினோம், அது எவ்வாறு செயல்படுகிறது என்பது பற்றிய தோராயமான யோசனையைப் பெற்றோம். உங்கள் நிரல் இயங்கும் போது இது பின்னணியில் வேலை செய்கிறது, பின்னர் நீக்கப்படும் தேவையற்ற பொருட்களை சேகரிக்கிறது. இதனால், இது எதிர்காலத்தில் புதிய பொருட்களை உருவாக்க பயன்படும் நினைவகத்தை விடுவிக்கிறது.
குப்பை சேகரிப்பவர் பற்றி மேலும் - 1
இந்த பாடத்தில், அது எவ்வாறு செயல்படுகிறது என்பதை விரிவாகப் பேசுவோம். உதாரணமாக, ஒரு பொருள் எப்படி, எப்போது தேவையற்றதாகிறது? குப்பை சேகரிப்பவர் எப்படி கண்டுபிடிப்பார்? இன்றைய பாடத்தின் போது நாம் பதிலளிப்போம் இவை கேள்விகள் :) பாடம் மேலோட்டமாக இருக்கும்: இந்த விஷயத்தை நீங்கள் மனப்பாடம் செய்ய வேண்டியதில்லை. நினைவகம் மற்றும் குப்பை சேகரிப்பான் எவ்வாறு செயல்படுகின்றன என்பதைப் பற்றிய உங்கள் பார்வையை விரிவுபடுத்துவதே முக்கிய நோக்கமாகும், எனவே படித்துவிட்டு உங்களுக்காக புதியதைக் கண்டறியவும் :) போகலாம்! நீங்கள் நினைவில் கொள்ள வேண்டிய முதல் விஷயம் என்னவென்றால், குப்பை சேகரிப்பான் உங்கள் திட்டத்துடன் இணையாக செயல்படுகிறது. இது உங்கள் திட்டத்தின் ஒரு பகுதி அல்ல. இது தனித்தனியாக இயங்குகிறது (கடைசி பாடத்தில், இதை ஒரு ரோபோ வெற்றிட கிளீனருடன் ஒப்பிட்டோம்) ஆனால் அது எப்போதும் அப்படி இருக்காது. குப்பை சேகரிப்பு உங்கள் நிரலின் அதே நூலில் நிகழ்த்தப்பட்டது. சில அட்டவணையில் (சில நிமிடங்களுக்கு ஒருமுறை), குப்பை சேகரிப்பாளர் திட்டத்தில் தேவையற்ற பொருள்கள் உள்ளதா எனச் சரிபார்ப்பார். பிரச்சனை என்னவென்றால், இந்த சோதனை மற்றும் குப்பை சேகரிப்பின் போது நிரல் செயலிழந்துவிடும் (செயல்படுத்தாது). நீங்கள் உங்கள் அலுவலகத்தில் உட்கார்ந்து வேலை செய்கிறீர்கள் என்று கற்பனை செய்து பாருங்கள். ஆனால் துப்புரவுப் பெண் தரையைக் கழுவ உள்ளே வருகிறார். அவர் உங்களை உங்கள் கணினியிலிருந்து 5 நிமிடங்களுக்கு விரட்டுகிறார், அவள் சுத்தம் செய்து முடிக்கும் வரை நீங்கள் காத்திருக்கிறீர்கள். இந்த நேரத்தில், நீங்கள் வேலை செய்ய முடியாது. குப்பை சேகரிப்பு எப்படி வேலை செய்கிறது என்பது பற்றியது :) இந்த வழிமுறை பின்னர் மாற்றப்பட்டது, இப்போது குப்பை சேகரிப்பான் பின்னணியில் இயங்குகிறது, திட்டத்தின் வேலையைத் தடுக்காது. குறிப்புகள் இல்லாதபோது ஒரு பொருள் இறந்துவிடும் என்பதை நீங்கள் ஏற்கனவே அறிவீர்கள். உண்மையில்,குப்பை சேகரிப்பவர் பொருள் குறிப்புகளை எண்ணுவதில்லை . முதலில், இதற்கு நீண்ட நேரம் ஆகலாம். இரண்டாவதாக, இது மிகவும் பயனுள்ளதாக இல்லை. எல்லாவற்றிற்கும் மேலாக, பொருள்கள் ஒன்றையொன்று குறிக்கலாம்! குப்பை சேகரிப்பவர் பற்றி மேலும் - 23 பொருள்கள் ஒன்றையொன்று குறிக்கும் ஒரு உதாரணத்தை படம் காட்டுகிறது, ஆனால் வேறு யாரும் அவற்றைக் குறிப்பிடவில்லை. வேறு வார்த்தைகளில் கூறுவதானால், மீதமுள்ள நிரலுக்கு அவை தேவையில்லை. குப்பை சேகரிப்பவர் வெறுமனே குறிப்புகளை எண்ணினால், இந்த 3 பொருள்கள் சேகரிக்கப்படாது மற்றும் நினைவகம் விடுவிக்கப்படாது (அவற்றின் குறிப்புகள் உள்ளன!). இதை நாம் ஒரு விண்கலத்துடன் ஒப்பிடலாம். விமானத்தின் போது, ​​விண்வெளி வீரர்கள் பழுதுபார்க்க கிடைக்கும் உதிரி பாகங்களின் பட்டியலை சரிபார்க்க முடிவு செய்கிறார்கள். மற்றவற்றுடன், அவர்கள் ஒரு சாதாரண காரில் இருந்து ஒரு ஸ்டீயரிங் மற்றும் பெடல்களைக் கண்டுபிடிக்கின்றனர். வெளிப்படையாக, அவை இங்கே தேவையில்லை மற்றும் தேவையில்லாமல் இடத்தை எடுத்துக்கொள்கின்றன (இந்த இரண்டு பகுதிகளும் ஒன்றோடொன்று தொடர்புடையவை மற்றும் சில செயல்பாடுகளைக் கொண்டிருந்தாலும்). ஆனால் விண்கலத்தின் உள்ளே, அவை அப்புறப்படுத்தப்பட வேண்டிய பயனற்ற குப்பைகள். அதன்படி, ஜாவாவில், குறிப்பு எண்ணிக்கையின் அடிப்படையில் குப்பை சேகரிக்க முடிவு செய்யப்பட்டது,அடையக்கூடிய மற்றும் அடைய முடியாத . ஒரு பொருள் அடையக்கூடியதா என்பதை எவ்வாறு தீர்மானிப்பது? இது எல்லாம் வெறுமனே புத்திசாலித்தனம். ஒரு பொருள் மற்றொரு அடையக்கூடிய பொருளால் குறிப்பிடப்பட்டால் அது அடையக்கூடியது. இவ்வாறு, நாம் "அடையக்கூடிய சங்கிலி" பெறுகிறோம். நிரல் தொடங்கும் போது இது தொடங்குகிறது மற்றும் நிரலின் காலத்திற்கு தொடர்கிறது. இது போல் தெரிகிறது: குப்பை சேகரிப்பவர் பற்றி மேலும் - 3 படத்தில் உள்ள அம்பு எங்கள் நிரலின் இயங்கக்கூடிய குறியீட்டைக் குறிக்கிறது. குறியீடு (உதாரணமாக, main()முறை) பொருள்களுக்கான குறிப்புகளை உருவாக்குகிறது. இந்தப் பொருள்கள் மற்ற பொருள்களைக் குறிக்கலாம், அந்தப் பொருள்கள் இன்னும் சிலவற்றைக் குறிக்கலாம். இது ஒரு குறிப்பு சங்கிலியை உருவாக்குகிறது. ஒரு பொருளில் இருந்து "ரூட் ரெஃபரன்ஸ்" (இயக்கக்கூடிய குறியீட்டில் நேரடியாக உருவாக்கப்பட்ட ஒன்று) வரையிலான சங்கிலியை நீங்கள் கண்டுபிடிக்க முடிந்தால், அது அடையக்கூடியதாகக் கருதப்படுகிறது. அத்தகைய பொருட்கள் படத்தில் கருப்பு நிறத்தில் குறிக்கப்பட்டுள்ளன. ஆனால் இந்தச் சங்கிலியிலிருந்து பொருள் வெளியேறினால், ஒரு பொருளை அடைய முடியாது, அதாவது தற்போது செயல்படுத்தப்படும் குறியீட்டில் உள்ள மாறிகள் எதுவும் அதைக் குறிப்பிடவில்லை, மேலும் அதை "குறிப்பு சங்கிலி" மூலம் அடைய முடியாது. எங்கள் திட்டத்தில், இதுபோன்ற இரண்டு பொருள்கள் சிவப்பு நிறத்தில் குறிக்கப்பட்டுள்ளன. இந்த "சிவப்பு" பொருள்கள் ஒன்றுக்கொன்று குறிப்புகளைக் கொண்டுள்ளன என்பதை நினைவில் கொள்க. ஆனால் நாம் முன்பே கூறியது போல், ஜாவாவின் நவீன குப்பை சேகரிப்பான் குறிப்புகளை எண்ணுவதில்லை. ஒரு பொருள் அடையக்கூடியதா அல்லது அடைய முடியாததா என்பதை இது தீர்மானிக்கிறது. இதன் விளைவாக, அது படத்தில் உள்ள இரண்டு சிவப்பு பொருட்களை கைப்பற்றும். இப்போது ஆரம்பம் முதல் இறுதி வரை முழு செயல்முறையையும் பார்ப்போம். அவ்வாறு செய்யும்போது, ​​ஜாவாவில் நினைவகம் எவ்வாறு அமைக்கப்பட்டுள்ளது என்பதையும் பார்ப்போம் :) அனைத்து ஜாவா பொருட்களும் குவியல் எனப்படும் நினைவகத்தின் ஒரு சிறப்புப் பகுதியில் சேமிக்கப்படுகின்றன . அன்றாட மொழியில், குவியல் என்பது பொதுவாக ஒரு மலைப் பொருளாகும், அங்கு எல்லாம் ஒன்றுக்கொன்று கலந்திருக்கும். ஆனால் ஜாவாவில் குவியல் அப்படி இல்லை. அதன் அமைப்பு மிகவும் தர்க்கரீதியானது மற்றும் நியாயமானது. ஒரு கட்டத்தில், ஜாவா புரோகிராமர்கள் தங்கள் அனைத்து பொருட்களையும் இரண்டு வகைகளாகப் பிரிக்கலாம் என்று கண்டறிந்தனர்: எளிய பொருள்கள் மற்றும் "நீண்ட காலப் பொருள்கள்". "நீண்ட காலம் வாழும் பொருள்கள்" பல சுற்று குப்பை சேகரிப்பில் இருந்து தப்பிய பொருள்கள். அவர்கள் பொதுவாக நிரல் முடியும் வரை வாழ்கிறார்கள். முடிவில், அனைத்து பொருட்களும் சேமிக்கப்படும் முழு குவியல், பல பகுதிகளாக பிரிக்கப்பட்டது. முதல் பகுதிக்கு அழகான பெயர் உண்டு: ஈடன்(விவிலிய "கார்டன் ஆஃப் ஏடன்" என்பதிலிருந்து). இந்த பெயர் பொருத்தமானது, ஏனென்றால் பொருட்கள் உருவாக்கப்பட்ட பிறகு இங்குதான் முடிவடையும். இது நினைவகத்தின் ஒரு பகுதியாகும், அங்கு நாம் புதிய முக்கிய சொல்லைப் பயன்படுத்தும் போது புதிய பொருள்கள் உருவாக்கப்படுகின்றன. நிறைய பொருள்கள் உருவாக்கப்படலாம். இந்தப் பகுதியில் இடம் இல்லாமல் போகும் போது, ​​ஆரம்ப "வேகமான" குப்பை சேகரிப்பு தொடங்குகிறது. குப்பை அள்ளுபவர் மிகவும் புத்திசாலி என்றே சொல்ல வேண்டும். குவியலில் அதிக குப்பை இருக்கிறதா அல்லது அதிக உயிருள்ள பொருள்கள் உள்ளதா என்பதன் அடிப்படையில் இது ஒரு அல்காரிதத்தை தேர்வு செய்கிறது. ஏறக்குறைய அனைத்து பொருட்களும் குப்பையாக இருந்தால், சேகரிப்பான் உயிருள்ள பொருட்களைக் குறிக்கும் மற்றும் நினைவகத்தின் மற்றொரு பகுதிக்கு நகர்த்துகிறது. பின்னர் தற்போதைய பகுதி முற்றிலும் அழிக்கப்படுகிறது. நிறைய குப்பைகள் இல்லாமலும், குவியல் பெரும்பாலும் உயிருள்ள பொருட்களாக இருந்தால், சேகரிப்பாளர் குப்பைகளைக் குறியிட்டு, அதை அகற்றி, மற்ற பொருட்களை ஒன்றாகக் கட்டுகிறார். நாங்கள் சொன்னோம்"உயிர் வாழும் இடம் . ஒரு உயிர்வாழும் இடம் , இதையொட்டி, தலைமுறைகளாக பிரிக்கப்பட்டுள்ளது . ஒவ்வொரு பொருளும் ஒரு குறிப்பிட்ட தலைமுறையைச் சேர்ந்தது, அது எத்தனை சுற்று குப்பை சேகரிப்பில் இருந்து தப்பித்தது என்பதைப் பொறுத்து. ஒரு பொருள் ஒரு சுற்று குப்பை சேகரிப்பில் இருந்து தப்பியிருந்தால், அது "தலைமுறை 1" இல் உள்ளது; 5 என்றால், "தலைமுறை 5". ஈடன் மற்றும் உயிர்வாழும் இடம் ஆகியவை இணைந்து இளம் தலைமுறை என்று அழைக்கப்படும் ஒரு பகுதியை உருவாக்குகின்றன . இளம் தலைமுறைக்கு கூடுதலாக, குவியல் பழைய தலைமுறை என்று அழைக்கப்படும் மற்றொரு நினைவக பகுதியைக் கொண்டுள்ளது. இது துல்லியமாக, குப்பை சேகரிப்பில் பல சுற்றுகளில் இருந்து தப்பிய நீண்டகால பொருட்கள் முடிவடையும் பகுதி. மற்ற எல்லாவற்றிலிருந்தும் தனித்தனியாக வைத்திருப்பதில் நன்மைகள் உள்ளன. முழு குப்பை சேகரிப்பு பழைய தலைமுறை நிரம்பியிருக்கும் போது மட்டுமே செய்யப்படுகிறது, அதாவது நிரலில் பல நீண்டகால பொருட்கள் உள்ளன, போதுமான நினைவகம் இல்லை. இந்த செயல்முறை நினைவகத்தின் ஒன்றுக்கு மேற்பட்ட பகுதிகளை உள்ளடக்கியது. பொதுவாக, இது ஜாவா இயந்திரத்தால் உருவாக்கப்பட்ட அனைத்து பொருட்களையும் உள்ளடக்கியது. இயற்கையாகவே, இது அதிக நேரத்தையும் வளங்களையும் எடுக்கும். இது துல்லியமாக நீண்ட கால பொருட்களை தனித்தனியாக சேமிக்க முடிவு செய்யப்பட்டது. மற்ற பகுதிகளில் இடம் இல்லாமல் போகும் போது "விரைவு குப்பை சேகரிப்பு" மேற்கொள்ளப்படுகிறது. இது ஒரே ஒரு பகுதியை மட்டுமே உள்ளடக்கியது, இது வேகமாகவும் திறமையாகவும் செய்கிறது. இறுதியாக, நீண்ட காலம் வாழும் பொருள்களுக்கான பகுதி கூட முழுமையாக நிரப்பப்படும் போது, முழு குப்பை சேகரிப்பு தூண்டப்படுகிறது. எனவே, சேகரிப்பாளர் "கனமான" கருவியைத் தவிர்க்க முடியாதபோது மட்டுமே பயன்படுத்துகிறார். குவியல் அமைப்பு மற்றும் குப்பை சேகரிப்பின் காட்சிப் பிரதிநிதித்துவம் இதோ: குப்பை சேகரிப்பவர் பற்றி மேலும் - 4
கருத்துக்கள்
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION