CodeGym /Java Course /মডিউল 3 /জাভাতে জাঙ্ক লিঙ্ক

জাভাতে জাঙ্ক লিঙ্ক

মডিউল 3
লেভেল 18 , পাঠ 7
বিদ্যমান

8.1 জাভাতে দুর্বল রেফারেন্স

জাভাতে বিভিন্ন ধরণের রেফারেন্স রয়েছে।

StrongReference আছে - এইগুলি হল সবচেয়ে সাধারণ লিঙ্ক যা আমরা প্রতিদিন তৈরি করি।

Object object = new Object();//created an object
object = null;//can now be garbage collected

এবং তিনটি "বিশেষ" ধরনের লিঙ্ক রয়েছে - SoftReference, WeakReference, PhantomReference। প্রকৃতপক্ষে, সমস্ত ধরণের লিঙ্কগুলির মধ্যে শুধুমাত্র একটি পার্থক্য রয়েছে - তারা যে বস্তুগুলি উল্লেখ করে তার সাথে জিসির আচরণ। আমরা পরবর্তীতে আরও বিস্তারিতভাবে প্রতিটি লিঙ্কের প্রকারের সুনির্দিষ্ট বিষয়ে আলোচনা করব, কিন্তু আপাতত, নিম্নলিখিত জ্ঞানই যথেষ্ট হবে:

  • SoftReference হল একটি নরম রেফারেন্স, যদি GC দেখে যে একটি বস্তু শুধুমাত্র নরম রেফারেন্সের একটি চেইনের মাধ্যমে অ্যাক্সেসযোগ্য, তাহলে এটি মেমরি থেকে মুছে ফেলবে। হতে পারে.
  • দুর্বল রেফারেন্স - একটি দুর্বল রেফারেন্স, যদি জিসি দেখে যে একটি বস্তু শুধুমাত্র দুর্বল রেফারেন্সের একটি চেইনের মাধ্যমে অ্যাক্সেসযোগ্য, তাহলে এটি মেমরি থেকে মুছে ফেলবে।
  • ফ্যান্টম রেফারেন্স হল একটি ফ্যান্টম রেফারেন্স, যদি জিসি দেখে যে একটি বস্তু শুধুমাত্র ফ্যান্টম রেফারেন্সের একটি চেইনের মাধ্যমে উপলব্ধ, তাহলে এটি এটিকে মেমরি থেকে সরিয়ে দেবে। বেশ কিছু রানের পর জিসি।

আপনি এটিও বলতে পারেন যে লিঙ্কের ধরনগুলির একটি নির্দিষ্ট মাত্রার নরমতা রয়েছে:

  • একটি নিয়মিত হার্ড লিঙ্ক একটি রেফারেন্স ধরনের যে কোনো পরিবর্তনশীল. এটি অব্যবহৃত হওয়ার আগে আবর্জনা সংগ্রহকারী দ্বারা পরিষ্কার করা হয় না।
  • সফট রেফারেন্স । বস্তুটি সমস্ত মেমরি ব্যবহার করার কারণ হবে না - এটি একটি OutOfMemoryError হওয়ার আগে মুছে ফেলার গ্যারান্টি দেওয়া হয়। হয়তো আগে, আবর্জনা সংগ্রহকারী বাস্তবায়নের উপর নির্ভর করে।
  • দুর্বল রেফারেন্স । দুর্বল নরম। বস্তুর নিষ্পত্তি হতে বাধা দেয় না; আবর্জনা সংগ্রহকারী এই ধরনের উল্লেখ উপেক্ষা করে।
  • ফ্যান্টম রেফারেন্স । একটি বস্তুর "মৃত্যু" প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়: বস্তুটি আবর্জনা সংগ্রহ না হওয়া পর্যন্ত চূড়ান্তকরণের পরে উপলব্ধ।

পার্থক্য কী তা যদি এখনও পরিষ্কার না হয় তবে চিন্তা করবেন না, শীঘ্রই সবকিছু ঠিক হয়ে যাবে। বিস্তারিত বিবরণ আছে, এবং বিস্তারিত অনুসরণ করা হবে.

8.2 জাভাতে দুর্বল রেফারেন্স এবং সফট রেফারেন্স

প্রথমে, আসুন জাভাতে WeakReference এবং SoftReference এর মধ্যে পার্থক্য দেখি ।

সংক্ষেপে, আবর্জনা সংগ্রাহক একটি বস্তুর স্মৃতি মুক্ত করবে যদি শুধুমাত্র দুর্বল রেফারেন্স এটি নির্দেশ করে। যদি বস্তুটিকে SoftReferences দ্বারা নির্দেশ করা হয়, তাহলে JVM-এর মেমরির খুব প্রয়োজন হলে মেমরি ডিলোকেট করা হয়।

এটি কিছু ক্ষেত্রে স্ট্রং রেফারেন্সের তুলনায় SoftReference- এর একটি নির্দিষ্ট সুবিধা দেয় । উদাহরণস্বরূপ, একটি অ্যাপ্লিকেশন ক্যাশে প্রয়োগ করতে SoftReference ব্যবহার করা হয়, তাই JVM প্রথম জিনিসটি মুছে ফেলবে যেগুলি শুধুমাত্র SoftReferences নির্দেশ করে।

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

জাভাতে দুর্বল রেফারেন্স উদাহরণ:

// 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;

জাভাতে সফট রেফারেন্স উদাহরণ:

// 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 উদাহরণটি WeakReference এবং SoftReference উদাহরণগুলির মতো একইভাবে তৈরি করা হয়েছে, তবে এটি খুব কমই ব্যবহৃত হয়।

একটি ফ্যান্টম রেফারেন্স আবর্জনা সংগ্রহ করা যেতে পারে যদি বস্তুতে শক্তিশালী (শক্তিশালী), দুর্বল (দুর্বল রেফারেন্স) বা নরম (সফ্টরেফারেন্স) উল্লেখ না থাকে।

আপনি এই মত একটি ফ্যান্টম রেফারেন্স বস্তু তৈরি করতে পারেন:

PhantomReference myObjectRef = new PhantomReference(MyObject);

PhantomReference এমন পরিস্থিতিতে ব্যবহার করা যেতে পারে যেখানে finalize() এর কোনো মানে হয় না। এই রেফারেন্স টাইপ অন্য ধরনের থেকে আলাদা কারণ এটি কোনো বস্তু অ্যাক্সেস করার জন্য ডিজাইন করা হয়নি। এটি একটি সংকেত যে বস্তুটি ইতিমধ্যে চূড়ান্ত করা হয়েছে এবং আবর্জনা সংগ্রহকারী তার স্মৃতি পুনরুদ্ধার করতে প্রস্তুত।

এটি করার জন্য, আবর্জনা সংগ্রহকারী এটিকে আরও প্রক্রিয়াকরণের জন্য একটি বিশেষ রেফারেন্স কিউতে রাখে। ReferenceQueue যেখানে অবজেক্ট রেফারেন্স ফ্রি মেমরিতে রাখা হয়।

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

এখানে PhantomReference একটি নমনীয় এবং নিরাপদ পছন্দ। পুরানো ইমেজ অবজেক্টটি ধ্বংস হয়ে যাওয়ার পরে পুরানো ছবির রেফারেন্স রেফারেন্স কিউতে পাঠানো হবে। একবার আমাদের কাছে এই লিঙ্কটি থাকলে, আমরা নতুন ছবিটি মেমরিতে লোড করতে পারি।

3
Опрос
Working with memory in Java,  18 уровень,  7 лекция
недоступен
Working with memory in Java
Working with memory in Java
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION