Java তে Memory Management কিভাবে কাজ করে?

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

482

Java তে Memory Management একটি গুরুত্বপূর্ণ প্রক্রিয়া, যা স্বয়ংক্রিয়ভাবে পরিচালিত হয় এবং Java Virtual Machine (JVM) এর মাধ্যমে পরিচালিত হয়। JVM ডাইনামিকভাবে মেমরি বরাদ্দ করে এবং অব্যবহৃত মেমরি মুক্ত (garbage collection) করে। Java তে মেমরি ম্যানেজমেন্টের মূল লক্ষ্য হলো দক্ষতার সাথে মেমরি ব্যবহার নিশ্চিত করা এবং মেমরি লিক প্রতিরোধ করা।

Java তে মেমরি ব্যবস্থাপনা প্রধানত দুইটি প্রক্রিয়ার মাধ্যমে সম্পন্ন হয়:

  1. Memory Allocation (মেমরি বরাদ্দ)
  2. Garbage Collection (অপ্রয়োজনীয় মেমরি মুক্ত করা)

1. Memory Allocation (মেমরি বরাদ্দ):

Java তে মেমরি সাধারণত দুইটি জায়গায় বরাদ্দ করা হয়:

  • Stack Memory: স্থানীয় ভেরিয়েবল এবং মেথড কলের জন্য মেমরি বরাদ্দ করে।
  • Heap Memory: অবজেক্ট এবং ডাটা স্ট্রাকচার গুলি সংরক্ষণ করার জন্য মেমরি বরাদ্দ করে।

Stack Memory:

  • Stack মেমরি ব্যবহৃত হয় মেথড কল করার জন্য এবং মেথডের মধ্যে স্থানীয় ভেরিয়েবল রাখা হয়।
  • প্রতিটি মেথড কলের জন্য একটি নতুন ফ্রেম তৈরি হয় এবং কাজ শেষে সেই ফ্রেম মুছে ফেলা হয় (LIFO: Last In First Out)।
  • Stack মেমরি দ্রুত কিন্তু সীমিত। এতে শুধুমাত্র মেথডের স্থানীয় ভেরিয়েবল এবং প্রসেসিংয়ের জন্য প্রয়োজনীয় ডেটা থাকে।

উদাহরণ:

public void method1() {
    int a = 10;  // 'a' is stored in stack memory
}

Heap Memory:

  • Heap মেমরি ব্যবহৃত হয় অবজেক্ট এবং ক্লাসের ডেটা স্টোর করতে।
  • Java তে যখন কোনো নতুন অবজেক্ট তৈরি করা হয়, তখন সেই অবজেক্টের জন্য মেমরি heap তে বরাদ্দ হয়।
  • Heap মেমরি তুলনামূলকভাবে ধীর এবং বড় মাপের মেমরি যা ডাইনামিকভাবে পরিবর্তনশীল হয়।
  • Garbage Collector (GC) heap মেমরি নিয়ন্ত্রণ করে এবং অব্যবহৃত অবজেক্টগুলি মুক্ত করে।

উদাহরণ:

public class Example {
    public void createObject() {
        Example obj = new Example();  // 'obj' is stored in heap memory
    }
}

2. Garbage Collection (গারবেজ কালেকশন):

Garbage Collection (GC) হল একটি প্রক্রিয়া যা Java তে স্বয়ংক্রিয়ভাবে পরিচালিত হয় এবং এর মাধ্যমে heap মেমরির অব্যবহৃত, আর ব্যবহারযোগ্য না থাকা অবজেক্টগুলি মুক্ত করা হয়। GC Java তে মেমরি লিক প্রতিরোধে সাহায্য করে।

Garbage Collection এর কাজ:

  • Unreachable Objects: যখন একটি অবজেক্ট আর কোনো রেফারেন্স দ্বারা অ্যাক্সেস করা যায় না, তখন সেটি unreachable হয়ে যায় এবং পরবর্তীতে garbage হিসেবে চিহ্নিত হয়।
  • Heap Memory Cleanup: Garbage Collector অব্যবহৃত অবজেক্টগুলিকে heap মেমরি থেকে সরিয়ে ফেলে, যাতে মেমরি পুনরায় ব্যবহারযোগ্য হয়।

Garbage Collection এর বিভিন্ন প্রকার:

  1. Minor Garbage Collection:
    • এটি Young Generation এর মধ্যে ঘটে, যেখানে নতুন অবজেক্টগুলি তৈরি হয়। এই প্রক্রিয়ায় সাময়িকভাবে অবজেক্ট মুক্ত করা হয়, যাতে নতুন অবজেক্টের জন্য জায়গা পাওয়া যায়।
  2. Major Garbage Collection:
    • এটি Old Generation এর মধ্যে ঘটে এবং পুরনো অবজেক্ট মুক্ত করার প্রক্রিয়া। এখানে, ডোমেইন পরিস্কার করার জন্য সমস্ত heap মেমরি পুনঃরুদ্ধার করা হয়।
  3. Full Garbage Collection:
    • এটি সমস্ত heap মেমরি পরিষ্কার করে এবং এর মাধ্যমে পুরনো এবং নতুন উভয় ধরনের অবজেক্ট মুক্ত করা হয়। এটি অনেক সময় নেয় এবং system performance কমিয়ে দিতে পারে।

Garbage Collection Trigger:

  • JVM Garbage Collection স্বয়ংক্রিয়ভাবে ট্রিগার করে, যখন heap মেমরি প্রায় পূর্ণ হয়ে যায় বা জাভা রানটাইম মনে করে যে কোন অবজেক্ট আর প্রয়োজন নেই।
  • System.gc() মেথড ব্যবহার করে explicit garbage collection ট্রিগার করা সম্ভব, তবে এটি কখন কার্যকর হবে তা JVM এর উপর নির্ভর করে।
public class Example {
    public void createObject() {
        Example obj = new Example();  // This object will be eligible for GC after use
    }
    
    public static void main(String[] args) {
        Example obj1 = new Example();
        obj1 = null;  // obj1 is eligible for garbage collection
        System.gc();  // Request garbage collection (not guaranteed)
    }
}

Memory Management এর অন্যান্য ধারণা:

  1. Object Finalization:
    • যখন একটি অবজেক্ট GC দ্বারা মুক্ত করা হয়, তখন finalize() মেথড কল হতে পারে (এটি GC আগে ডেকে থাকে)। এটি অবজেক্টটি মুছে ফেলার আগে কিছু ক্লিন-আপ কাজ করতে ব্যবহৃত হয়।
    • তবে, finalize() মেথড এখন deprecated হতে চলেছে এবং এর ব্যবহার কমিয়ে দেয়া হয়েছে।
  2. Memory Leaks:
    • Java তে GC থাকলেও, মেমরি লিক হতে পারে যদি অবজেক্টের রেফারেন্স এখনও জীবিত থাকে (যদিও আর ব্যবহার করা হচ্ছে না)। এতে মেমরি কখনও মুক্ত হয় না।
    • মেমরি লিক প্রতিরোধের জন্য, অবজেক্টের রেফারেন্স মুক্ত করা গুরুত্বপূর্ণ।

Java Memory Management-এর Advantages:

  • Automatic Memory Management: Java তে Garbage Collection এর মাধ্যমে মেমরি ম্যানেজমেন্ট স্বয়ংক্রিয়ভাবে হয়, যার ফলে প্রোগ্রামারের মেমরি ব্যবস্থাপনার চাপ কমে যায়।
  • Reduced Memory Leaks: Garbage Collector মেমরি লিক কমাতে সাহায্য করে।
  • Memory Allocation and Deallocation: Java তে মেমরি স্বয়ংক্রিয়ভাবে বরাদ্দ এবং মুক্ত হয়, যার ফলে ম্যানুয়াল মেমরি ম্যানেজমেন্টের প্রয়োজন পড়ে না।

Java তে Memory Management একটি অত্যন্ত গুরুত্বপূর্ণ অংশ, যা Heap এবং Stack মেমরি বরাদ্দ, Garbage Collection, এবং Memory Cleanup এর মাধ্যমে স্বয়ংক্রিয়ভাবে পরিচালিত হয়। এই ব্যবস্থার মাধ্যমে Java প্রোগ্রামগুলি মেমরি লিক প্রতিরোধ করে এবং সিস্টেমের কার্যকারিতা বজায় রাখে।

Content added By
Promotion

Are you sure to start over?

Loading...