সফট রেফারেন্স (Soft References) أكসর মেমরি-সেনসিটিভ ক্যাশ (memory-sensitive caches) বাস্তবায়ন করতে ব্যবহৃত হয়। জাভাতে সফট রেফারেন্সের একটি উদাহরণ দেখি:
উদাহরণ
import java.lang.ref.SoftReference;
class Demo{
public void display_msg(){
System.out.println("Hello there");
}
}
public class Demo_example{
public static void main(String[] args){
Demo my_instance = new Demo();
my_instance.display_msg();
SoftReference my_softref = new SoftReference(my_instance);
my_instance = null;
my_instance = my_softref.get();
my_instance.display_msg();
}
}
আউটপুট
Hello there Hello there
Demo নামে একটি ক্লাস আছে যাতে 'display_msg' নামে একটি ফাংশন আছে, যা প্রাসঙ্গিক মেসেজ প্রদর্শন করে। 'Demo_example' নামে আর একটি ক্লাস ডিফাইন করা হয়েছে যেটিতে main ফাংশন আছে। এখানে Demo ক্লাসের একটি ইনস্ট্যান্স তৈরি করা হয়, এবং এই ইনস্ট্যান্সের ওপর 'display_msg' ফাংশন কল করা হয়। Demo ক্লাসের জন্য একটি SoftReference ইনস্ট্যান্স তৈরি করা হয়, এবং ইনস্ট্যান্সকে null এসাইন করা হয়। এই সফট রেফারেন্স অবজেক্টের ওপর 'get' ফাংশন কল করা হয়, এবং পূর্বের ইনস্ট্যান্সে এসাইন করা হয়। এই ইনস্ট্যান্সের ওপর 'display_msg' ফাংশন কল করা হয়। কনসোলে প্রাসঙ্গিক মেসেজ প্রদর্শিত হয়।
ফ্যান্টম রেফারেন্স (Phantom References) أكসর প্রি-মর্টেম ক্লিনআপ (pre-mortem cleanup) অ্যাকশন শিডিউল করার জন্য ব্যবহৃত হয়, যা জাভা ফাইনালাইজেশন মেকানিজম (finalization mechanism) চেয়ে বেশি ফ্লেক্সিবল।
এখন ফ্যান্টম রেফারেন্সের একটি উদাহরণ দেখি:
উদাহরণ
import java.lang.ref.*;
class Demo{
public void display_msg(){
System.out.println("Hello there");
}
}
public class Demo_example{
public static void main(String[] args){
Demo my_instance = new Demo();
my_instance.display_msg();
ReferenceQueue refQueue = new ReferenceQueue();
PhantomReference phantomRef = null;
phantomRef = new PhantomReference(my_instance, refQueue);
my_instance = null;
my_instance = phantomRef.get();
my_instance.display_msg();
}
}
আউটপুট
Hello there Exception in thread "main" java.lang.NullPointerException at Demo_example.main(Demo_example.java:22)
Demo নামে একটি ক্লাস আছে যাতে 'display_msg' নামে একটি ফাংশন আছে যা একটি প্রাসঙ্গিক মেসেজ প্রদর্শন করে। 'Demo_example' নামে আর একটি ক্লাস ডিফাইন করা হয়েছে যেটিতে main ফাংশন আছে। এই ফাংশনে Demo ক্লাসের ইনস্ট্যান্স থাকে, এবং এই ইনস্ট্যান্সের ওপর 'display_msg' ফাংশন কল করা হয়। তারপর, একটি ReferenceQueue ইনস্ট্যান্স তৈরি করা হয়। আরেকটি PhantomReference ইনস্ট্যান্স তৈরি করা হয় এবং 'null'-এ এসাইন করা হয়। তারপর, পূর্বের ইনস্ট্যান্সকে null-এ এসাইন করা হয়, এবং এর ওপর 'display_msg' ফাংশন কল করা হয়। কনসোলে প্রাসঙ্গিক আউটপুট প্রদর্শিত হয়।