Java Virtual Machine (JVM) এর মধ্যে Garbage Collection (GC) হল একটি অটোমেটেড প্রক্রিয়া যা মেমরি ব্যবস্থাপনা করে। এটি মেমরির অপ্রয়োজনীয় অংশ মুক্ত করার মাধ্যমে অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করে। JVM এর Garbage Collection প্রক্রিয়া প্রাথমিকভাবে Generational Garbage Collection নামে পরিচিত, যেখানে মেমরি চারটি প্রধান অঞ্চলে ভাগ করা হয়: Young Generation, Old Generation, Permanent Generation, এবং Metaspace। এখানে, আমরা Young Generation এবং Old Generation এর ভূমিকা এবং কার্যপদ্ধতি নিয়ে আলোচনা করব।
Generational Garbage Collection:
Generational Garbage Collection ধারণা অনুযায়ী, JVM heap memory দুটি প্রধান অংশে ভাগ করা হয়:
- Young Generation
- Old Generation
এটি একটি দক্ষ কৌশল, কারণ এটি কম সময়ের মধ্যে অবজেক্টের গতি অনুযায়ী মেমরি ফ্রিগমেন্টেশন কমিয়ে আনতে সহায়তা করে।
1. Young Generation:
Young Generation হল JVM heap এর সেই অংশ যেখানে নতুন অবজেক্ট তৈরি হয়। যখন কোনো নতুন অবজেক্ট তৈরি করা হয়, তখন এটি প্রথমে Young Generation এ রাখা হয়। এর মধ্যে তিনটি সেকশন থাকে:
- Eden Space: এই স্থানেই নতুন অবজেক্ট প্রথমে তৈরি হয়।
- Survivor Space (S0 and S1): কিছু অবজেক্ট যখন Young Generation এর গার্বেজ কালেকশন প্রক্রিয়ার মাধ্যমে বাঁচে, তখন সেগুলো Survivor Space এ চলে যায়।
Young Generation-এ অবজেক্টগুলি সাধারণত ছোট সময়ের জন্য থাকে, কারণ এই অবজেক্টগুলির মধ্যে বেশিরভাগই খুব দ্রুত মুছে যায়। JVM এই অংশে Minor GC বা Young GC পরিচালনা করে, যেখানে শুধুমাত্র Young Generation মুছে ফেলা হয় এবং Old Generation অপরিবর্তিত থাকে।
Young Generation GC (Minor GC):
- Minor GC তখন ঘটে যখন Young Generation পূর্ণ হয়ে যায়। এটি শুধুমাত্র Young Generation এর অপ্রয়োজনীয় অবজেক্টগুলো পরিষ্কার করে।
- এই GC প্রক্রিয়া দ্রুত ঘটে কারণ Young Generation ছোট আকারে থাকে এবং কম সময় ধরে অবজেক্টগুলো থাকে।
2. Old Generation:
Old Generation হল সেই অংশ যেখানে দীর্ঘস্থায়ী অবজেক্টগুলি চলে যায়, যারা Young Generation-এর GC পেরিয়ে টিকে থাকে। এই অবজেক্টগুলো সাধারণত দীর্ঘ সময় ধরে মেমরিতে থাকে এবং তাদের মুছে ফেলা খুব কম হয়।
যেহেতু Old Generation এর অবজেক্টগুলি দীর্ঘস্থায়ী হয়, সুতরাং যখন এখানে মেমরি পূর্ণ হয়ে যায়, তখন Major GC (বা Full GC) চালানো হয়। এই GC প্রক্রিয়া ধীর হতে পারে, কারণ এটি Young Generation এবং Old Generation উভয়কেই পরিষ্কার করে এবং এর ফলে সিস্টেমের পারফরম্যান্স প্রভাবিত হতে পারে।
Old Generation GC (Major GC or Full GC):
- Major GC ঘটে যখন Old Generation পূর্ণ হয়ে যায়। এই প্রক্রিয়ায় সমস্ত heap (Young এবং Old Generation) পরিষ্কার করা হয়।
- এটি Minor GC এর চেয়ে অনেক ধীর এবং পারফরম্যান্সে প্রভাব ফেলতে পারে, কারণ এতে পুরো heap মেমরি স্ক্যান করতে হয়।
Young Generation এবং Old Generation এর মধ্যে পার্থক্য:
| Feature | Young Generation | Old Generation |
|---|---|---|
| Purpose | নতুন অবজেক্ট তৈরি করা। | দীর্ঘস্থায়ী অবজেক্ট সংরক্ষণ। |
| Size | ছোট, কম মেমরি ব্যবহার করে। | বড়, দীর্ঘস্থায়ী অবজেক্টদের জন্য বড় মেমরি প্রয়োজন। |
| GC Type | Minor GC (Young GC) | Major GC (Full GC) |
| Collection Frequency | খুব দ্রুত, প্রায়ই ঘটে। | কম ঘন ঘন, বড় আকারের GC। |
| Efficiency | খুব দ্রুত এবং কম সময় নেয়ার মতো। | ধীর এবং সিস্টেম পারফরম্যান্সে প্রভাব ফেলতে পারে। |
| Process | শুধুমাত্র Young Generation ক্লিয়ার করা হয়। | Young এবং Old Generation উভয়কেই ক্লিয়ার করা হয়। |
Generational Garbage Collection এর সুবিধা:
- Performance Optimization: Young Generation দ্রুত পরিষ্কার হওয়ার জন্য কম সময় নেয় এবং সাধারণত নতুন অবজেক্টগুলির জন্য অনেক বেশি ব্যবহৃত হয়। এটি মেমরি ব্যবস্থাপনায় উন্নতি ঘটায়।
- Reduced Full GC Frequency: Old Generation-এর জন্য Full GC কম ঘটে, কারণ এটি খুব কম সময়ে প্রয়োজনীয় অবজেক্টগুলো পরিষ্কার করে।
- Improved Heap Management: Heap memory-কে দুইটি ভিন্ন অংশে ভাগ করার ফলে, JVM এর মেমরি ব্যবস্থাপনা আরও কার্যকরী হয়। মেমরি ম্যানেজমেন্ট সহজ ও দ্রুত হয়, এবং Minor GC দ্রুত সম্পন্ন হয়।
Garbage Collection Flow:
- Minor GC: যখন Young Generation পূর্ণ হয়ে যায়, তখন এটি Minor GC চালায়। এতে শুধুমাত্র Young Generation পরিষ্কার হয়।
- Major GC (Full GC): যখন Old Generation পূর্ণ হয়, তখন Full GC চালানো হয়, যেখানে Young Generation এবং Old Generation উভয়ই পরিষ্কার করা হয়।
JVM Garbage Collection Types:
- Serial GC: একক থ্রেড ব্যবহার করে GC কাজ সম্পন্ন করে।
- Parallel GC: একাধিক থ্রেড ব্যবহার করে GC কাজ সম্পন্ন করে, যা উন্নত পারফরম্যান্স প্রদান করে।
- Concurrent Mark-Sweep (CMS) GC: Old Generation এর জন্য এটি অনেক কম স্টপ-দ্য-ওয়ার্ল্ড টাইম ব্যবহার করে।
- G1 GC: এটি Garbage First GC হিসেবে পরিচিত এবং বড় অ্যাপ্লিকেশনগুলির জন্য উন্নত পারফরম্যান্স প্রদান করে।
Generational Garbage Collection একটি খুবই শক্তিশালী এবং দক্ষ মেমরি ম্যানেজমেন্ট কৌশল, যা Young Generation এবং Old Generation দুটি ভাগে বিভক্ত থাকে। Young Generation-এ দ্রুত মেমরি সংগ্রহ করা হয়, এবং যখন অবজেক্টগুলো দীর্ঘস্থায়ী হয়, তখন সেগুলো Old Generation-এ স্থানান্তরিত হয়। Minor GC এবং Major GC এর মাধ্যমে মেমরি ব্যবস্থাপনা করা হয়, যার ফলে Java অ্যাপ্লিকেশনগুলির পারফরম্যান্স উন্নত হয় এবং মেমরি ব্যবহারের দক্ষতা বাড়ে।
Read more