8.1 ஜாவாவில் பலவீனமான குறிப்புகள்
ஜாவாவில் பல வகையான குறிப்புகள் உள்ளன.
வலுவான குறிப்பு உள்ளது - இவை நாம் ஒவ்வொரு நாளும் உருவாக்கும் பொதுவான இணைப்புகள்.
Object object = new Object();//created an object
object = null;//can now be garbage collected
மேலும் மூன்று "சிறப்பு" இணைப்புகள் உள்ளன - SoftReference, WeakReference, PhantomReference. உண்மையில், அனைத்து வகையான இணைப்புகளுக்கும் இடையே ஒரே ஒரு வித்தியாசம் உள்ளது - அவர்கள் குறிப்பிடும் பொருள்களுடன் GC இன் நடத்தை. ஒவ்வொரு இணைப்பு வகையின் பிரத்தியேகங்களையும் பின்னர் விரிவாக விவாதிப்போம், ஆனால் இப்போதைக்கு, பின்வரும் அறிவு போதுமானது:
- SoftReference என்பது ஒரு மென்மையான குறிப்பு, GC ஆனது ஒரு பொருளை மென்மையான குறிப்புகளின் சங்கிலி மூலம் மட்டுமே அணுக முடியும் என்று பார்த்தால், அது அதை நினைவகத்திலிருந்து அகற்றும். இருக்கலாம்.
- பலவீனமான குறிப்பு - ஒரு பலவீனமான குறிப்பு, ஒரு பொருளை பலவீனமான குறிப்புகளின் சங்கிலி மூலம் மட்டுமே அணுக முடியும் என்று GC கண்டால், அது அதை நினைவகத்திலிருந்து அகற்றும்.
- PhantomReference என்பது ஒரு பாண்டம் குறிப்பு, ஒரு பொருள் பாண்டம் குறிப்புகளின் சங்கிலி மூலம் மட்டுமே கிடைக்கும் என்று GC பார்த்தால், அது நினைவகத்திலிருந்து அதை அகற்றும். GC இன் பல ஓட்டங்களுக்குப் பிறகு.
இணைப்பு வகைகளுக்கு ஒரு குறிப்பிட்ட அளவு மென்மை உள்ளது என்றும் நீங்கள் கூறலாம்:
- வழக்கமான கடின இணைப்பு என்பது குறிப்பு வகையின் ஏதேனும் மாறியாகும். பயன்படுத்தப்படாமல் போகும் முன் குப்பை சேகரிப்பாளரால் சுத்தம் செய்யப்படவில்லை.
- மென்மையான குறிப்பு . ஆப்ஜெக்ட் அனைத்து நினைவகத்தையும் பயன்படுத்தாது - OutOfMemoryError ஏற்படும் முன் அது நீக்கப்படும் என்பது உறுதி. ஒருவேளை முன்னதாக, குப்பை சேகரிப்பாளரின் செயல்பாட்டைப் பொறுத்து.
- பலவீனமான குறிப்பு . பலவீனமான மென்மையானது. பொருள் அகற்றப்படுவதைத் தடுக்காது; குப்பை சேகரிப்பவர் அத்தகைய குறிப்புகளை புறக்கணிக்கிறார்.
- பாண்டம் குறிப்பு . ஒரு பொருளின் "இறப்பு" செயலாக்கத்திற்குப் பயன்படுத்தப்படுகிறது: குப்பை சேகரிக்கப்படும் வரை பொருள் இறுதி செய்யப்பட்ட பிறகு கிடைக்கும்.
வித்தியாசம் என்ன என்பது இன்னும் தெளிவாகத் தெரியவில்லை என்றால், கவலைப்பட வேண்டாம், விரைவில் எல்லாம் சரியாகிவிடும். விவரங்கள் விவரங்களில் உள்ளன, மேலும் விவரங்கள் தொடரும்.
8.2 ஜாவாவில் பலவீனமான குறிப்பு மற்றும் மென்மையான குறிப்பு
முதலில், ஜாவாவில் WeakReference மற்றும் SoftReference இடையே உள்ள வித்தியாசத்தைப் பார்ப்போம் .
சுருக்கமாக, குப்பை சேகரிப்பான் ஒரு பொருளை பலவீனமான குறிப்புகள் மட்டுமே சுட்டிக்காட்டினால் அதன் நினைவகத்தை விடுவிக்கும். பொருள் SoftReferences மூலம் சுட்டிக்காட்டப்பட்டால், JVM க்கு நினைவகம் மிகவும் தேவைப்படும்போது நினைவகம் ஒதுக்கப்படும்.
இது சில சந்தர்ப்பங்களில் வலுவான குறிப்பை விட SoftReference க்கு ஒரு திட்டவட்டமான நன்மையை அளிக்கிறது . எடுத்துக்காட்டாக, பயன்பாட்டு தற்காலிக சேமிப்பை செயல்படுத்த SoftReference பயன்படுத்தப்படுகிறது, எனவே JVM செய்யும் முதல் காரியம் SoftReferences மட்டும் சுட்டிக்காட்டும் பொருட்களை நீக்குவதாகும்.
கிளாஸ்லோடரின் குறிப்பைச் சேமிப்பது போன்ற மெட்டாடேட்டாவைச் சேமிப்பதற்கு பலவீனமான குறிப்பு சிறந்தது . எந்த வகுப்பும் ஏற்றப்படவில்லை என்றால், நீங்கள் கிளாஸ்லோடரைப் பார்க்கக்கூடாது. இதனால்தான் பலவீனமான குறிப்பு, குப்பை சேகரிப்பவர் கிளாஸ்லோடரில் கடைசியாக வலுவான குறிப்பு அகற்றப்பட்டவுடன் அதன் வேலையைச் செய்வதை சாத்தியமாக்குகிறது.
ஜாவாவில் பலவீனமான குறிப்பு உதாரணம்:
// some object
Student student = new Student();
// weak reference to it
WeakReference weakStudent = new WeakReference(student);
// now the Student object can be garbage collected
student = null;
ஜாவாவில் SoftReference உதாரணம்:
// some object
Student student = new Student();
// weak reference to it
SoftReference softStudent = new SoftReference(student)
// now the Student object can be garbage collected
// but this will only happen if the JVM has a strong need for memory
student = null;
ஜாவாவில் 8.3 PhantomReference
PhantomReference நிகழ்வானது WeakReference மற்றும் SoftReference எடுத்துக்காட்டுகளைப் போலவே உருவாக்கப்பட்டுள்ளது, ஆனால் அது அரிதாகவே பயன்படுத்தப்படுகிறது.
பொருளில் வலுவான (வலுவான), பலவீனமான (பலவீனமான குறிப்பு) அல்லது மென்மையான (SoftReference) குறிப்புகள் இல்லாவிட்டால், ஒரு PhantomReference என்பது குப்பைகளை சேகரிக்கலாம்.
நீங்கள் இது போன்ற ஒரு மறைமுக குறிப்பு பொருளை உருவாக்கலாம்:
PhantomReference myObjectRef = new PhantomReference(MyObject);
PhantomReference ஐ finalize() அர்த்தமில்லாத சூழ்நிலைகளில் பயன்படுத்தலாம். இந்த குறிப்பு வகை மற்ற வகைகளிலிருந்து வேறுபட்டது, ஏனெனில் இது ஒரு பொருளை அணுகுவதற்கு வடிவமைக்கப்படவில்லை. பொருள் ஏற்கனவே இறுதி செய்யப்பட்டுள்ளது மற்றும் குப்பை சேகரிப்பான் அதன் நினைவகத்தை மீட்டெடுக்க தயாராக உள்ளது என்பதற்கான சமிக்ஞையாகும்.
இதைச் செய்ய, குப்பை சேகரிப்பாளர் அதை மேலும் செயலாக்க ஒரு சிறப்பு குறிப்பு வரிசையில் வைக்கிறார். ReferenceQueue என்பது இலவச நினைவகத்தில் பொருள் குறிப்புகள் வைக்கப்படும் இடம்.
பாண்டம் குறிப்புகள் ஒரு பொருள் நினைவகத்திலிருந்து அகற்றப்பட்டதை அறிய ஒரு பாதுகாப்பான வழியாகும். எடுத்துக்காட்டாக, பெரிய படங்களைக் கையாளும் பயன்பாட்டைக் கவனியுங்கள். குப்பை சேகரிப்புக்குத் தயாராக இருக்கும் நினைவகத்தில் ஏற்கனவே இருக்கும் ஒரு படத்தை நினைவகத்தில் ஏற்ற வேண்டும் என்று வைத்துக்கொள்வோம். இந்த வழக்கில், புதிய படத்தை நினைவகத்தில் ஏற்றுவதற்கு முன்பு குப்பை சேகரிப்பான் பழைய படத்தைக் கொல்லும் வரை காத்திருக்க விரும்புகிறோம்.
இங்கே PhantomReference ஒரு நெகிழ்வான மற்றும் பாதுகாப்பான தேர்வாகும். பழைய படப் பொருள் அழிக்கப்பட்ட பிறகு பழைய படத்தின் குறிப்பு ReferenceQueue க்கு அனுப்பப்படும். இந்த இணைப்பைப் பெற்றவுடன், புதிய படத்தை நினைவகத்தில் ஏற்றலாம்.