Garbage Collection কি এবং এর প্রক্রিয়া কী?

Java Memory Management এবং Garbage Collection - জাভা ইন্টারভিউ প্রশ্ন (Java Interview Questions) - Java Technologies

666

Garbage Collection (GC) হল একটি স্বয়ংক্রিয় প্রক্রিয়া যা Java Virtual Machine (JVM) দ্বারা ব্যবহৃত হয়, যেখানে অপ্রয়োজনীয় বা আর ব্যবহৃত না হওয়া অবজেক্টগুলি মেমরি থেকে সরিয়ে দেওয়া হয়, যাতে সিস্টেমের মেমরি ব্যবস্থাপনা কার্যকরী হয়। Java-এ Garbage Collection এর মূল উদ্দেশ্য হল মেমরি লিক (memory leak) রোধ করা এবং সিস্টেমের পারফরম্যান্স উন্নত করা।

Garbage Collection এর মাধ্যমে, Java ডেভেলপারদের ম্যানুয়ালি মেমরি ম্যানেজমেন্ট (যেমন free() বা delete() ব্যবহার) করতে হয় না, কারণ এটি JVM দ্বারা স্বয়ংক্রিয়ভাবে পরিচালিত হয়। এটি heap memory-এ অবস্থিত অবজেক্টগুলির জন্য কাজ করে, যেগুলি আর রেফারেন্স করা হচ্ছে না (অথবা তাদের আর ব্যবহার করা হবে না)।


Garbage Collection প্রক্রিয়া কী?

Garbage Collection প্রক্রিয়াটি JVM-এ কিছু নির্দিষ্ট স্টেপ অনুসরণ করে কাজ করে:

  1. মেমরি বরাদ্দ:
    • JVM একটি heap memory এলাকা বরাদ্দ করে যেখানে সমস্ত অবজেক্ট সংরক্ষিত থাকে।
    • যখন নতুন অবজেক্ট তৈরি করা হয়, তখন JVM সেই অবজেক্টের জন্য heap memory থেকে জায়গা বরাদ্দ করে।
  2. Reachability Analysis:
    • GC মূলত অবজেক্টগুলির reachability (অর্থাৎ, কোনো অবজেক্টকে ব্যবহার করা হচ্ছে কিনা) চেক করে। যদি কোনো অবজেক্টকে আর কোনো রেফারেন্স পয়েন্ট (variable, object) দ্বারা অ্যাক্সেস করা না যায়, তাহলে সেই অবজেক্টটি unreachable হয়ে পড়ে এবং এটি মেমরি থেকে সরানো যায়।
    • Java-এর রেফারেন্স গ্রাফ ব্যবহার করে reachable এবং unreachable অবজেক্ট চিহ্নিত করা হয়।
  3. Mark and Sweep Algorithm: Garbage Collection-এর মূল অংশ হল Mark and Sweep অ্যালগরিদম:
    • Mark Phase:
      • GC প্রথমে heap memory-এ সমস্ত অবজেক্ট চিহ্নিত করে যা এখনও অ্যাক্সেসযোগ্য (reachable) এবং ব্যবহৃত হতে পারে। এই অবজেক্টগুলিকে "marked" হিসেবে চিহ্নিত করা হয়।
    • Sweep Phase:
      • পরবর্তীতে, GC সকল অবজেক্ট পরীক্ষা করে যা "marked" হয়নি, এবং সেই অবজেক্টগুলোকে মেমরি থেকে সরিয়ে দেয়।
    • এই প্রক্রিয়া অব্যাহত থাকে যতক্ষণ না heap memory-এর সমস্ত অপ্রয়োজনীয় অবজেক্ট মুছে ফেলা হয়।
  4. Compact Phase (Optional):
    • যদি heap memory-এ ফাঁকা জায়গা থাকে (fragmentation), তবে compact phase মেমরি পুনঃব্যবহারযোগ্য (reclaimable) করে এবং অবজেক্টগুলোকে একটি কনটিগিউয়াস (contiguous) ব্লকে স্থানান্তরিত করে।
    • এটি মূলত heap memory-এর অবজেক্টদের মাঝে খালি স্থান পূর্ণ করার জন্য করা হয়, যাতে নতুন অবজেক্টের জন্য যথেষ্ট জায়গা পাওয়া যায়।

Garbage Collection-এর বিভিন্ন ধরনের অ্যালগরিদম:

Java-এ GC-র বিভিন্ন ধরনের অ্যালগরিদম রয়েছে, যা মেমরি ব্যবস্থাপনা এবং পারফরম্যান্সের উপর নির্ভর করে বেছে নেওয়া হয়। কিছু সাধারণ অ্যালগরিদম হলো:

  1. Serial Garbage Collector:
    • এটি একক থ্রেড ব্যবহার করে এবং ছোট অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত। এটি GC পরিচালনা করার জন্য একক থ্রেড ব্যবহার করে এবং সাধারণত CPU-intensive হয়।
    • -XX:+UseSerialGC
  2. Parallel Garbage Collector (Throughput Collector):
    • এটি একাধিক থ্রেড ব্যবহার করে garbage collection প্রক্রিয়াকে দ্রুত করতে সক্ষম। বড় অ্যাপ্লিকেশন এবং মাল্টি-কোর প্রসেসর ব্যবহারকারী সিস্টেমের জন্য এটি উপযুক্ত।
    • -XX:+UseParallelGC
  3. Concurrent Mark-Sweep (CMS) Garbage Collector:
    • এটি low-latency প্রক্রিয়া প্রস্তাব করে, যেখানে গ্যার্বেজ কালেকশন থ্রেডের সঙ্গে অ্যাপ্লিকেশন থ্রেডগুলি সমান্তরালভাবে কাজ করতে থাকে। এটি কম দেরিতে গ্যার্বেজ কালেকশন পরিচালনা করে।
    • -XX:+UseConcMarkSweepGC
  4. G1 Garbage Collector:
    • G1 (Garbage First) একটি উন্নত garbage collector, যা ছোট ছোট স্মৃতি এলাকা (regions) ব্যবহার করে মেমরি সংগ্রহ করা হয় এবং এটি দীর্ঘ সময়ের জন্য সর্বোত্তম পারফরম্যান্স দেয়।
    • -XX:+UseG1GC

Garbage Collection কিভাবে কাজ করে (Steps):

  1. Object Creation:
    • ক্লাসের অবজেক্ট তৈরি করার সাথে সাথে, অবজেক্ট heap memory-তে সংরক্ষণ করা হয়।
  2. Reference Deletion:
    • যখন একটি অবজেক্টের সব রেফারেন্স নষ্ট হয়ে যায় (অথবা null হয়ে যায়), তখন সেই অবজেক্ট "unreachable" হয়ে পড়ে।
  3. Mark Phase:
    • GC এই অবজেক্টগুলোকে চিহ্নিত করে যেগুলো এখনও reachable (অর্থাৎ যেগুলো এখনও ব্যবহৃত হতে পারে)।
  4. Sweep Phase:
    • GC অবজেক্টগুলোকে মুছে দেয় যা unreachable এবং ব্যবহৃত হচ্ছে না।
  5. Memory Compaction:
    • শেষে, যদি memory fragmentation থাকে, তাহলে অবজেক্টগুলো পুনঃসংগঠিত (compact) করা হয়।

Garbage Collection এর সুবিধা:

  1. Memory Management:
    • GC ম্যানুয়ালি মেমরি ম্যানেজমেন্ট থেকে মুক্তি দেয়, ডেভেলপারদের কাজ সহজ করে দেয়।
  2. Automatic Resource Management:
    • GC স্বয়ংক্রিয়ভাবে মেমরি থেকে অপ্রয়োজনীয় অবজেক্ট সরিয়ে দেয়, যা মেমরি লিক থেকে মুক্তি দেয়।
  3. System Stability:
    • Garbage Collection সিস্টেমের স্থিতিশীলতা নিশ্চিত করে কারণ এটি প্রয়োজনে অপ্রয়োজনীয় অবজেক্ট সরিয়ে মেমরি মুক্ত করে।

Garbage Collection-এ কিছু চ্যালেঞ্জ:

  1. Performance Impact:
    • Garbage Collection প্রক্রিয়াটি CPU-intensive হতে পারে, বিশেষ করে যখন বড় পরিমাণ মেমরি ব্যবহৃত হয়।
  2. Stop-the-World Pause:
    • কিছু গার্বেজ কালেকশন অ্যালগরিদমে Stop-the-World পজ (থ্রেড থামানো) ঘটে, যা অ্যাপ্লিকেশন এর পারফরম্যান্সে প্রভাব ফেলতে পারে।
  3. Full GC:
    • Full GC ঘটলে, heap memory-এর সমস্ত অংশ স্ক্যান করতে সময় লাগে, যা প্রোগ্রামকে সাময়িকভাবে ধীর করতে পারে।

Java-তে Garbage Collection একটি গুরুত্বপূর্ণ প্রক্রিয়া যা স্বয়ংক্রিয়ভাবে মেমরি পরিচালনা এবং অপ্রয়োজনীয় অবজেক্ট মুছে ফেলার কাজ করে, যাতে সিস্টেমের পারফরম্যান্স এবং মেমরি ব্যবস্থাপনা উন্নত হয়। Java-র GC প্রক্রিয়াটি Mark and Sweep অ্যালগরিদম এবং বিভিন্ন garbage collection অ্যালগরিদমের মাধ্যমে কাজ করে।

Content added By
Promotion

Are you sure to start over?

Loading...