ডেটা কীভাবে গারবেজ কালেক্ট (garbage collected) হয় তার উপর ভিত্তি করে রেফারেন্সের চারটি ভিন্ন প্রকার রয়েছে:
- স্ট্রং রেফারেন্স (Strong references)
- উইক রেফারেন্স (Weak references)
- সফট রেফারেন্স (Soft references)
- ফ্যান্টম রেফারেন্স (Phantom references)
স্ট্রং রেফারেন্স (Strong Reference)
এটি রেফারেন্স অবজেক্টের ডিফল্ট টাইপ। যেসব অবজেক্টের সক্রিয় স্ট্রং রেফারেন্স থাকে সেগুলো গারবেজ কালেক্টেড হতে পারে না। এটি শুধু তখন সম্ভব যখন স্ট্রং রেফারেন্স করা ভেরিয়েবলটি null-কে পয়েন্ট করে। একটি উদাহরণ দেখি:
উদাহরণ
class Demo {
// Some functionality
}
public class Demo_example{
public static void main(String[] args){
Demo my_inst = new Demo();
my_inst = null;
}
}
উইক রেফারেন্স (Weak Reference)
এগুলো রেফারেন্স অবজেক্টের ডিফল্ট ক্লাস নয়, তাই এক্সপ্লিসিটলি স্পেসিফাই করতে হয়। এটি সাধারণত WeakHashMap-এ ব্যবহার হয়, যাতে এন্ট্রি অবজেক্টগুলো রেফারেন্স করা যায়। এমন উইক রেফারেন্সগুলো জাভা ভার্চুয়াল মেশিন (JVM) দিয়ে গারবেজ কালেকশনের জন্য মার্ক করা হয়। такие রেফারেন্স 'java.lang.ref.WeakReference' ক্লাস ব্যবহার করে তৈরি করা হয়।
একটি উদাহরণ দেখি:
উদাহরণ
import java.lang.ref.WeakReference;
class Demo{
public void display_msg(){
System.out.println("Hello");
}
}
public class Demo_sample{
public static void main(String[] args){
Demo inst = new Demo();
inst.display_msg();
WeakReference my_weak_ref = new WeakReference(inst);
inst = null;
inst = my_weak_ref.get();
inst.display_msg();
}
}
আউটপুট
Hello Hello
Demo নামে একটি ক্লাস আছে যাতে 'display_msg' নামে একটি ফাংশন আছে। এই ফাংশন একটি প্রাসঙ্গিক মেসেজ প্রদর্শন করে। 'Demo_sample' নামে আর একটি ক্লাসে main ফাংশন ডিফাইন করা হয়েছে, এবং Demo ক্লাসের একটি ইনস্ট্যান্স তৈরি করা হয়। ইনস্ট্যান্সের ওপর 'display_msg' ফাংশন কল করা হয়। Demo ক্লাসের জন্য একটি WeakReference তৈরি করা হয়, এবং Demo ইনস্ট্যান্সকে null-এ এসাইন করা হয়, এবং আবার ফাংশন কল করা হয়। কনসোলে প্রাসঙ্গিক আউটপুট প্রদর্শিত হয়।