"আবারো স্বাগতম!"

"এখন আমি আপনাকে আরও একটি বিস্ময়কর জিনিস সম্পর্কে বলতে যাচ্ছি: দুর্বল রেফারেন্স ।"

"এটি প্রায় সফ্টরেফারেন্সের মতো দেখায়:"

উদাহরণ
// Create a Cat object
Cat cat = new Cat();

// Create a weak reference to a Cat object
WeakReference<Cat> catRef = new WeakReference<Cat>(cat);

// Now only the catRef weak reference points at the object
cat = null;

// Now the ordinary cat variable also references the object
cat = catRef.get();

// Clear the weak reference
catRef.clear();

"একটি দুর্বল রেফারেন্স আরেকটি বিশেষ বৈশিষ্ট্য আছে।"

"যদি কোনো বস্তুর সাধারণ রেফারেন্স বা নরম রেফারেন্স না থাকে, তবে শুধুমাত্র দুর্বল রেফারেন্স থাকে, তাহলে বস্তুটি জীবিত, কিন্তু পরবর্তী আবর্জনা সংগ্রহে এটি ধ্বংস হয়ে যাবে।"

"আপনি আবার বলতে পারেন? এই রেফারেন্সের মধ্যে পার্থক্য কি?"

"শুধুমাত্র একটি সফ্ট রেফারেন্স দ্বারা মৃত্যু থেকে রাখা একটি বস্তু আপনার পছন্দ মতো অনেক আবর্জনা সংগ্রহে বেঁচে থাকতে পারে এবং অপর্যাপ্ত স্মৃতি না থাকলে সম্ভবত ধ্বংস হয়ে যাবে।"

"শুধুমাত্র একটি দুর্বল রেফারেন্স দ্বারা মৃত্যুর হাত থেকে রাখা একটি বস্তু পরবর্তী আবর্জনা সংগ্রহে বেঁচে থাকবে না৷ কিন্তু এটি না হওয়া পর্যন্ত, আপনি WeakReference- এ get() পদ্ধতিতে কল করে বস্তুটি পেতে পারেন এবং তারপরে এর পদ্ধতিগুলিকে কল করুন বা এটির সাথে অন্য কিছু করুন৷ "

"যদি বস্তুটিকে একটি SoftReference এবং একটি WeakReference উভয় দ্বারা উল্লেখ করা হয়?"

"এটি সহজ। যদি অন্তত একটি নিয়মিত রেফারেন্স একটি বস্তুর দিকে নির্দেশ করে, তবে এটি জীবিত হিসাবে বিবেচিত হয়। যাইহোক, এই ধরনের রেফারেন্সকে একটি শক্তিশালী রেফারেন্স বলা হয়।"

"যদি কোন নিয়মিত রেফারেন্স একটি বস্তুর দিকে নির্দেশ করে না, কিন্তু একটি SoftReference করে, তাহলে এটি নরমভাবে পৌঁছানো যায়।"

"যদি কোন নিয়মিত রেফারেন্স বা সফ্ট রেফারেন্স একটি বস্তুর দিকে নির্দেশ না করে, কিন্তু একটি দুর্বল রেফারেন্স করে, তাহলে এটি দুর্বলভাবে পৌঁছানো যায়।"

"এটি সম্পর্কে চিন্তা করুন। একটি SoftReference বস্তুটিকে মুছে ফেলা থেকে রক্ষা করে এবং নিশ্চিত করে যে বস্তুটি কেবলমাত্র অপর্যাপ্ত মেমরি থাকলেই মুছে ফেলা হবে। একটি দুর্বল রেফারেন্স পরবর্তী আবর্জনা সংগ্রহ পর্যন্ত অবজেক্টটিকে ধরে রাখে। একটি SoftReference মুছে ফেলার জন্য বৃহত্তর প্রতিরোধের প্রস্তাব দেয়।"

"আহ. আমি মনে করি আমি বুঝতে পেরেছি।"

"দারুণ, তারপরে আমি আপনাকে দুর্বল রেফারেন্স - উইকহ্যাশম্যাপ সম্পর্কিত আরেকটি আকর্ষণীয় বিষয় সম্পর্কে বলব।"

"গম্ভীর শোনাচ্ছে!"

"এবং তারপর কিছু! একটি WeakHashMap হল একটি HashMap যার কীগুলি দুর্বল রেফারেন্স (WeakReferences)।"

"অর্থাৎ, আপনি এমন একটি হ্যাশম্যাপে বস্তু যোগ করুন এবং তাদের সাথে কাজ করুন। স্বাভাবিকভাবে ব্যবসা করুন।"

"যতক্ষণ পর্যন্ত আপনি একটি WeakHashMap এ যে বস্তুগুলি সংরক্ষণ করেন সেগুলিতে কী হিসাবে নিয়মিত (শক্তিশালী বা নরম) রেফারেন্স থাকে, এই বস্তুগুলি জীবিত থাকবে।"

"কিন্তু ধরুন পুরো অ্যাপ্লিকেশনটিতে এই বস্তুর আর কোনো রেফারেন্স নেই। যা তাদের মৃত্যু থেকে বিরত রাখে তা হল WeakHashMap-এর ভিতরে কয়েকটি দুর্বল রেফারেন্স। পরবর্তী আবর্জনা সংগ্রহের পরে, এই ধরনের বস্তুগুলি WeakHashMap থেকে অদৃশ্য হয়ে যাবে। যেন তারা সেখানে ছিল না।"

"আমি নিশ্চিত নই যে আমি বুঝতে পেরেছি।"

"আপনি একটি WeakHashMap-এ বস্তুর জোড়া সঞ্চয় করেন: একটি কী এবং একটি মান৷ কিন্তু WeakHashMap কীগুলিকে সরাসরি উল্লেখ করে না, বরং WeakReferences এর মাধ্যমে৷ তাই, যখন কী হিসাবে ব্যবহৃত বস্তুগুলি দুর্বলভাবে পৌঁছানো যায়, তখন সেগুলি পরবর্তী সময়ে ধ্বংস হয়ে যায়৷ আবর্জনা সংগ্রহ। এবং ফলস্বরূপ, তাদের মানগুলিও WeakHashMap থেকে স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়।"

"কিছু নির্দিষ্ট বস্তু সম্পর্কে অতিরিক্ত তথ্য সঞ্চয় করার জন্য একটি WeakHashMap ব্যবহার করা খুবই সুবিধাজনক।"

"প্রথমত, তথ্য অ্যাক্সেস করা খুব সহজ যদি আপনি বস্তুটিকে নিজেই কী হিসাবে ব্যবহার করেন।"

"দ্বিতীয়, যদি বস্তুটি ধ্বংস হয়ে যায়, এটি হ্যাশম্যাপ থেকে সমস্ত সংশ্লিষ্ট ডেটা সহ অদৃশ্য হয়ে যায়।"

"উদাহরণ স্বরূপ:

উদাহরণ
// Create an object to store additional information about the user
WeakHashMap<User, StatisticInfo> userStatistics = new WeakHashMap<User, StatisticInfo>();

// Put information about the user into userStatistics
User user = session.getUser();
userStatistics.put(user, new StatisticInfo ());

// Get information about the user from userStatistics
User user = session.getUser();
StatisticInfo statistics = userStatistics.get(user);

// Remove any information about the user from userStatistics
User user = session.getUser();
userStatistics.remove(user);
  1. "একটি দুর্বল হ্যাশম্যাপের ভিতরে, কীগুলি দুর্বল রেফারেন্স হিসাবে সংরক্ষণ করা হয়।"
  2. "ব্যবহারকারী বস্তুটি আবর্জনা সংগ্রহকারীর দ্বারা ধ্বংস হওয়ার সাথে সাথে, অপসারণ(ব্যবহারকারী) পদ্ধতিটিকে অন্তর্নিহিতভাবে WeakHashMap-এর ভিতরে বলা হয় এবং ব্যবহারকারী অবজেক্টের সাথে সম্পর্কিত যেকোন তথ্য WeakHashMap থেকে স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়।"

"এটি একটি শক্তিশালী টুলের মত দেখাচ্ছে। আমি এটি কোথায় ব্যবহার করতে পারি?"

"এটি পরিস্থিতির উপর নির্ভর করে। ধরুন আপনার প্রোগ্রামে একটি থ্রেড আছে যেটি কিছু কাজের কাজ ট্র্যাক করে, বস্তু দ্বারা প্রতিনিধিত্ব করে এবং একটি লগে সেগুলি সম্পর্কে তথ্য লেখে। এই থ্রেডটি একটি দুর্বল হ্যাশম্যাপে নিরীক্ষণ করা বস্তু সংরক্ষণ করতে পারে। যত তাড়াতাড়ি যেহেতু বস্তুর প্রয়োজন নেই, আবর্জনা সংগ্রাহক সেগুলিকে মুছে দেয় এবং সেগুলির উল্লেখগুলিও WeakHashMap থেকে স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়।"

"আকর্ষণীয় শোনাচ্ছে। আমার মনে হচ্ছে আমি এখনও এমন কোন গুরুতর জাভা প্রোগ্রাম লিখিনি যা এই ধরনের শক্তিশালী মেকানিজমের সুবিধা নেয়। কিন্তু আমি এটির দিকে কাজ করব। অনেক ধন্যবাদ, এলি, এমন একটি আকর্ষণীয় পাঠের জন্য।"