Java Technologies JVM এর Garbage Collectors এর ধরণ গাইড ও নোট

395

Garbage Collection (GC) হল একটি প্রক্রিয়া যা Java Virtual Machine (JVM)-এ ব্যবহৃত অপ্রয়োজনীয় অবজেক্টগুলো স্বয়ংক্রিয়ভাবে মুছে ফেলে, যা মেমরি ব্যবহারের অপচয় রোধ করে এবং প্রোগ্রামের পারফরম্যান্স উন্নত করতে সাহায্য করে। JVM এর Garbage Collectors মূলত মেমরি ম্যানেজমেন্টের দায়িত্ব পালন করে এবং heap memory থেকে অব্যবহৃত অবজেক্টগুলো সনাক্ত করে মুছে ফেলে। এই প্রক্রিয়া Java ডেভেলপারদের ম্যানুয়াল মেমরি ম্যানেজমেন্টের চাপ কমিয়ে দেয়।

Garbage Collection প্রক্রিয়া:

Garbage Collection-এর মূল লক্ষ্য হল heap memory-এর অপ্রয়োজনীয় অবজেক্টগুলো মুক্ত করা। যখন একটি অবজেক্ট আর ব্যবহার হয় না (অথবা আর রেফারেন্সড হয় না), তখন এটি garbage হিসেবে চিহ্নিত হয় এবং GC প্রক্রিয়া সেই অবজেক্টকে মুছে ফেলে।

JVM Garbage Collector Types:

JVM-এ বিভিন্ন ধরনের Garbage Collector আছে, এবং প্রতিটি Garbage Collector এর নিজস্ব কার্যকারিতা, সুবিধা এবং সীমাবদ্ধতা রয়েছে। এখানে কিছু গুরুত্বপূর্ণ Garbage Collector এর ধরণ আলোচনা করা হলো:

1. Serial Garbage Collector

  • Serial Garbage Collector হল JVM-এর একটি সিঙ্গল থ্রেডেড garbage collection প্রক্রিয়া যা young generation এবং old generation থেকে অবজেক্ট গুলি মুছে ফেলার জন্য একটি একক থ্রেড ব্যবহার করে।
  • এটি সাধারণত ছোট অ্যাপ্লিকেশনে ব্যবহৃত হয় যেখানে মেমরি প্রয়োজন কম এবং পারফরম্যান্স খুব বেশি গুরুত্বপূর্ণ নয়।

সুবিধা:

  • সহজ এবং কার্যকর।
  • ছোট অ্যাপ্লিকেশনের জন্য উপযুক্ত।

সীমাবদ্ধতা:

  • একসাথে একমাত্র থ্রেডে Garbage Collection সম্পন্ন হওয়ায় বড় সিস্টেমে এটি স্লো হতে পারে।
  • কোনো multithreading এর সুবিধা নেই, তাই এটি বড় প্রোগ্রামে সঠিকভাবে কাজ নাও করতে পারে।

কনফিগারেশন:

-XX:+UseSerialGC

2. Parallel Garbage Collector (Throughput Collector)

  • Parallel Garbage Collector হল একটি মাল্টি-থ্রেডেড গারবেজ কালেক্টর যা young generation-এ garbage collection করতে পারে, যাতে throughput বা পারফরম্যান্স উন্নত হয়। এটি garbage collection প্রক্রিয়া দ্রুত করতে একাধিক থ্রেড ব্যবহার করে।
  • এটি বড় অ্যাপ্লিকেশন এবং server-side applications-এ কার্যকর, যেখানে উচ্চ পারফরম্যান্স এবং minimal pauses প্রয়োজন।

সুবিধা:

  • পারফরম্যান্স উন্নত করে।
  • Throughput বাড়ায় (অর্থাৎ, কার্যকরভাবে CPU ব্যবহার করে).

সীমাবদ্ধতা:

  • pause times কিছুটা দীর্ঘ হতে পারে।
  • old generation গার্বেজ কালেকশন সাধারণত মাল্টিথ্রেডেড না হওয়ায় এর কার্যকারিতা কম হতে পারে।

কনফিগারেশন:

-XX:+UseParallelGC

3. Concurrent Mark-Sweep (CMS) Garbage Collector

  • CMS Garbage Collector হল একটি low-latency garbage collector, যা young generation এর পাশাপাশি old generation-এর অবজেক্টগুলোকে concurrently (বা সমান্তরালভাবে) ক্লিন করার চেষ্টা করে। CMS GC পারফরম্যান্সের জন্য বিশেষভাবে ডিজাইন করা, যাতে অ্যাপ্লিকেশন চলাকালীন প্রোগ্রামের থ্রেডকে কম বিরক্ত করা হয়।
  • এটি অনেক সময় ব্যবহৃত হয় এমন সিস্টেমে যেখানে pause time (garbage collection প্রক্রিয়ার জন্য থ্রেড থামানোর সময়) কম হওয়া উচিত।

সুবিধা:

  • দীর্ঘ থ্রেড থামানোর সময় কমায়।
  • low-latency প্রয়োগের জন্য উপযুক্ত (যেমন real-time অ্যাপ্লিকেশনস)।

সীমাবদ্ধতা:

  • পারফরম্যান্স কম হতে পারে যখন খুব বেশি মেমরি প্রয়োজন হয়।
  • garbage collection এর কিছু অংশ stop-the-world (JVM থ্রেড থামানো) মুছে ফেলার সময় নেয়, কিন্তু এটি অনেক ছোট সময় নেয়।

কনফিগারেশন:

-XX:+UseConcMarkSweepGC

4. G1 (Garbage First) Garbage Collector

  • G1 Garbage Collector হল একটি server-style garbage collector যা অত্যন্ত বড় heap সিস্টেমের জন্য ডিজাইন করা হয়েছে। এটি young generation এবং old generation-এর garbage collection কার্যক্রম কার্যকরভাবে পরিচালনা করতে সহায়তা করে। G1 GC প্রাথমিকভাবে predictability এবং pause time control এর দিকে মনোযোগ দেয়।
  • G1 GC বেশিরভাগ ক্ষেত্রে ব্যবহার করা হয় যখন খুব বড় heap মেমরি বা জটিল heap কনফিগারেশন প্রয়োজন হয়।

সুবিধা:

  • Pause time নিয়ন্ত্রণের সুবিধা।
  • বড় সিস্টেমের জন্য উপযুক্ত।
  • কম থ্রেড বিরতি (pause time) এবং কম বিলম্বিত ক্লিনিং।

সীমাবদ্ধতা:

  • G1 GC জটিল হতে পারে এবং যখন খুব ছোট heap থাকে তখন গতি অনেক কম হতে পারে।

কনফিগারেশন:

-XX:+UseG1GC

5. Z Garbage Collector (ZGC)

  • ZGC একটি নতুন এবং উদ্ভাবনী গার্বেজ কালেক্টর যা খুব কম latency প্রদান করে এবং বিশেষ করে large heap সিস্টেমের জন্য ডিজাইন করা হয়েছে। ZGC অনেক দ্রুত garbage collection সম্পন্ন করে এবং প্রোগ্রামের থ্রেড থামানোর সময়কে (pause times) অনেক কমিয়ে আনে।

সুবিধা:

  • অত্যন্ত কম pause time
  • বড় heap সিস্টেমে কাজ করতে সক্ষম।

সীমাবদ্ধতা:

  • কিছু ক্ষেত্রে ZGC সিস্টেমের সাথে উপযুক্ত নাও হতে পারে।

কনফিগারেশন:

-XX:+UseZGC

6. Shenandoah Garbage Collector

  • Shenandoah একটি low-latency গার্বেজ কালেক্টর যা বিশেষভাবে বড় heap সিস্টেমে এবং কম pause times এর জন্য ডিজাইন করা হয়েছে। এটি গার্বেজ কালেকশন কমপ্লিট করার সময় কম বিলম্ব নিশ্চিত করে এবং অ্যাপ্লিকেশন থ্রেডের চলাচল বাধাগ্রস্ত না হওয়ার চেষ্টা করে।

সুবিধা:

  • কম pause times
  • বড় heap সিস্টেমে উপযোগী।

সীমাবদ্ধতা:

  • সমস্ত প্ল্যাটফর্মে উপলব্ধ নয় এবং এটি তুলনামূলকভাবে নতুন।

কনফিগারেশন:

-XX:+UseShenandoahGC

Garbage Collector Comparison:

Garbage CollectorBest ForPause TimePerformanceUse Case
Serial GCSingle-threaded applicationsHighLowSmall applications
Parallel GCMulti-threaded applicationsModerateHighServer-side applications
CMS GCLow-latency applicationsLowModerateReal-time systems, low-latency applications
G1 GCLarge applications, large heapAdjustableHighLarge, complex applications
ZGCLarge heap, low latencyLowHighHigh-performance applications, large heap
Shenandoah GCLow-latency, large heapVery LowHighLow-latency applications, large heap

JVM এর Garbage Collectors বিভিন্ন ধরনের অ্যাপ্লিকেশনের জন্য উপযোগী। আপনি যেটি বেছে নিবেন তা নির্ভর করবে আপনার অ্যাপ্লিকেশনটির heap size, latency requirements, এবং performance needs এর ওপর। G1, ZGC, এবং Shenandoah আধুনিক এবং দক্ষ গার্বেজ কালেক্টর হিসেবে পরিচিত, যেখানে Parallel এবং CMS এখনও বেশ কিছু ক্ষেত্রে কার্যকরী হতে পারে।

Content added By

Serial Garbage Collector

284

Garbage Collection (GC) হল একটি প্রক্রিয়া যা JVM-এর মধ্যে মেমরি ব্যবস্থাপনায় সহায়তা করে, বিশেষ করে অব্যবহৃত অবজেক্টগুলির মেমরি মুক্ত করতে। Java Virtual Machine (JVM) এর বিভিন্ন ধরণের Garbage Collector রয়েছে, এবং তাদের মধ্যে একটি হল Serial Garbage Collector

Serial Garbage Collector:

Serial Garbage Collector হল একটি সিঙ্গেল-থ্রেডেড গার্বেজ কালেক্টর যা JVM এর মেমরি ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। এটি stop-the-world গার্বেজ কালেকশন প্রক্রিয়ায় কাজ করে, অর্থাৎ যখন গার্বেজ কালেকশন শুরু হয়, তখন JVM সম্পূর্ণ অ্যাপ্লিকেশন থামিয়ে দেয় এবং গার্বেজ কালেকশন প্রক্রিয়া সম্পূর্ণ না হওয়া পর্যন্ত অন্য কোনো কাজ করার সুযোগ পায় না।

Serial Garbage Collector এর কাজের প্রক্রিয়া:

  1. Stop-the-World Pause:
    • গার্বেজ কালেকশন চলাকালীন JVM এর সব থ্রেড থেমে থাকে, অর্থাৎ stop-the-world পজ চলে। এটি গার্বেজ কালেকশন এর মধ্যে সমস্ত মেমরি রেফারেন্স এবং অবজেক্ট চিহ্নিত করার সময় থ্রেডসমূহকে ব্লক করে।
  2. Single Threaded:
    • Serial Garbage Collector শুধুমাত্র একটি থ্রেড ব্যবহার করে গার্বেজ কালেকশন সম্পাদন করে, যা এক্সিকিউশনকে কিছুটা ধীর করে ফেলতে পারে। অন্যান্য গার্বেজ কালেক্টর যেমন Parallel বা CMS একাধিক থ্রেড ব্যবহার করে।
  3. Minor GC:
    • Serial GC সাধারণত Young Generation (এছাড়া Minor GC) এর মেমরি সংগ্রহ করে, যেখানে অধিকাংশ অবজেক্ট প্রথমে তৈরি হয়।
    • যখন Young Generation ভরে যায়, তখন এটি Minor GC শুরু করে, এবং অব্যবহৃত অবজেক্টগুলোকে মুছে ফেলে।
  4. Major GC (Full GC):
    • যখন Old Generation (বয়সী অবজেক্ট) এর মেমরি পূর্ণ হয়ে যায়, তখন Major GC বা Full GC শুরু হয়। এটি পুরনো অবজেক্টগুলির মধ্যে থেকে মেমরি খালি করে, কিন্তু এটি সময়সাপেক্ষ হতে পারে এবং বড় পারফরম্যান্স ওভারহেড সৃষ্টি করতে পারে।
  5. Heap Memory:
    • গার্বেজ কালেকশন Heap Memory (Young Generation, Old Generation) এর মধ্যে অব্যবহৃত অবজেক্ট মুছে ফেলে, যা পরবর্তীতে নতুন অবজেক্টের জন্য স্থান তৈরি করে।

Serial Garbage Collector এর বৈশিষ্ট্য:

  1. Single Threaded:
    • এটি শুধুমাত্র একটি থ্রেড দিয়ে গার্বেজ কালেকশন প্রক্রিয়া পরিচালনা করে, যার ফলে থ্রেডের কম সংখ্যক ব্যবহার হয়। তবে এতে stop-the-world পজ এবং দীর্ঘ অপেক্ষা সময় হতে পারে।
  2. Low Memory Overhead:
    • Serial Garbage Collector অন্যান্য মাল্টি-থ্রেডেড গার্বেজ কালেক্টর এর তুলনায় কম মেমরি ব্যবহার করে।
  3. Simple and Suitable for Small Applications:
    • ছোট অ্যাপ্লিকেশন বা একক থ্রেডেড পরিবেশে এটি উপযুক্ত। যেখানে বড় মেমরি ব্যবস্থাপনা এবং গার্বেজ কালেকশন প্যারালাল থ্রেড ব্যবহারের প্রয়োজন নেই, সেখানে এটি একটি ভাল পছন্দ হতে পারে।
  4. Stop-the-World Pause:
    • গার্বেজ কালেকশন প্রক্রিয়ায় থ্রেড থেমে থাকা অবস্থা তৈরি হয় (যা stop-the-world পজ নামে পরিচিত), এবং এই থামানো সময়টি কমপ্লেক্স অ্যাপ্লিকেশন বা রিয়েল-টাইম অ্যাপ্লিকেশনের জন্য একটি সমস্যা হতে পারে।
  5. Minor GC:
    • প্রধানত Young Generation মেমরি লোড করার জন্য ব্যবহার হয়, যেখানে নতুন অবজেক্ট তৈরি হয় এবং পরে ফেলে দেওয়া হয়।

Serial Garbage Collector কবে ব্যবহার করা উচিত:

  • Small Applications: ছোট বা ছোট-স্কেল অ্যাপ্লিকেশনগুলির জন্য এটি উপযুক্ত, যেখানে গার্বেজ কালেকশন প্রক্রিয়া কম সিস্টেম রিসোর্স ব্যবহার করতে পারে।
  • Single-Threaded Environments: যখন অ্যাপ্লিকেশনটি একক থ্রেডে চলে, এবং মাল্টি-থ্রেড গার্বেজ কালেকশনের জন্য অতিরিক্ত জটিলতার প্রয়োজন নেই।
  • Low-Memory Systems: সিস্টেম যেখানে মেমরি সীমিত, যেমন embedded systems, সেখানে এই গার্বেজ কালেক্টর ব্যবহার করা সুবিধাজনক।

Serial Garbage Collector এর সুবিধা ও অসুবিধা:

সুবিধা:

  1. কম মেমরি ব্যবহার: এটি কম মেমরি ব্যবহার করে, যা ছোট সিস্টেমে উপকারী হতে পারে।
  2. সহজ বাস্তবায়ন: Single-threaded হওয়ায় এটি সহজ এবং কম জটিল।
  3. কম লোড: এটি ছোট স্কেল অ্যাপ্লিকেশন এবং একক থ্রেডের পরিবেশে খুব কার্যকরী।

অসুবিধা:

  1. Performance Bottleneck: একক থ্রেড ব্যবহারের ফলে stop-the-world pause দীর্ঘ সময় ধরে চলতে পারে, যা বড় এবং মাল্টি-থ্রেডেড অ্যাপ্লিকেশনে পারফরম্যান্সের সমস্যা সৃষ্টি করতে পারে।
  2. Not Suitable for High-Throughput Applications: বড় অ্যাপ্লিকেশনগুলির জন্য, যেখানে উচ্চ throughput প্রয়োজন, সেখানে Parallel GC বা G1 GC আরো উপযুক্ত।

Serial Garbage Collector কনফিগারেশন:

JVM এ Serial Garbage Collector ব্যবহারের জন্য -XX:+UseSerialGC অপশন ব্যবহার করতে হয়।

java -XX:+UseSerialGC -jar MyApplication.jar

এটি JVM কে Serial Garbage Collector ব্যবহার করতে নির্দেশ দেয়, এবং ছোট স্কেল বা কম রিসোর্সযুক্ত অ্যাপ্লিকেশনগুলির জন্য এটি উপযুক্ত হতে পারে।

Serial Garbage Collector হল JVM এর একটি সাধারণ গার্বেজ কালেকশন পদ্ধতি, যা শুধুমাত্র একটি থ্রেড ব্যবহার করে মেমরি ম্যানেজমেন্ট সম্পাদন করে। এটি ছোট বা একক থ্রেডে চালানো অ্যাপ্লিকেশনের জন্য উপযুক্ত, যেখানে কম মেমরি ব্যবহার এবং কম জটিলতা প্রয়োজন। তবে বড় এবং মাল্টি-থ্রেডেড অ্যাপ্লিকেশনের জন্য, যেখানে গার্বেজ কালেকশন পারফরম্যান্স গুরুত্বপূর্ণ, সেখানে এটি কম কার্যকর হতে পারে এবং উন্নত গার্বেজ কালেক্টর যেমন Parallel GC বা G1 GC ব্যবহার করা উচিত।

Content added By

Parallel Garbage Collector

285

Garbage Collection (GC) হল Java Virtual Machine (JVM)-এর একটি গুরুত্বপূর্ণ কার্যক্রম যা অব্যবহৃত বা অপ্রয়োজনীয় অবজেক্টগুলিকে মুছে ফেলে মেমরি মুক্ত করে। Java এর Garbage Collection প্রক্রিয়া বিভিন্ন ধরনের সংগ্রাহক (garbage collectors) দ্বারা পরিচালিত হতে পারে, যার মধ্যে Parallel Garbage Collector একটি জনপ্রিয় এবং দক্ষ সংগ্রাহক।

Parallel Garbage Collector:

Parallel Garbage Collector (বা Throughput Collector) হল JVM এর একটি বিশেষ ধরনের garbage collector যা multithreaded কনফিগারেশন ব্যবহার করে। এর প্রধান উদ্দেশ্য হল garbage collection process দ্রুত করা এবং প্রোগ্রামের জন্য সেরা throughput প্রদান করা। Parallel Garbage Collector মূলত minor GC এবং major GC প্রক্রিয়ায় একাধিক থ্রেড ব্যবহার করে যা মেমরি পরিচালনা করতে সক্ষম। এটি সিঙ্গল থ্রেডের Garbage Collectors-এর তুলনায় অনেক দ্রুত কাজ করে, বিশেষত মাল্টি-প্রসেসর সিস্টেমে।

Parallel Garbage Collector এর প্রধান বৈশিষ্ট্য:

  1. Multithreaded Collection:
    • Parallel Garbage Collector একাধিক থ্রেড ব্যবহার করে garbage collection প্রক্রিয়া সম্পন্ন করে, যা সিঙ্গল থ্রেডের সংগ্রাহকের চেয়ে অনেক দ্রুত।
    • এটি প্রধানত minor GC (Young Generation) এর ক্ষেত্রে কার্যকর, যেখানে অবজেক্টগুলির মৃত্যুর হার বেশি থাকে এবং দ্রুত মেমরি ব্যবস্থাপনা প্রয়োজন।
  2. Throughput Maximization:
    • Parallel Garbage Collector-এর প্রধান লক্ষ্য হল throughput বাড়ানো, অর্থাৎ, কতটা সময় প্রোগ্রাম কার্যকরীভাবে কাজ করছে এবং কতটা সময় গার্বেজ কালেকশন হচ্ছে, তার মধ্যে পার্থক্য কমানো।
    • এটি কম সময়ের মধ্যে মেমরি পরিষ্কার করে, যার ফলে প্রোগ্রামটি বেশি সময় চালু থাকে এবং কম সময় ধরে garbage collection প্রক্রিয়া চলে।
  3. Stop-the-World Event:
    • Stop-the-World Event হল একটি পরিস্থিতি যেখানে JVM সিস্টেমের সমস্ত থ্রেড থামিয়ে garbage collection পরিচালনা করে। Parallel GC এমন একটি stop-the-world event তৈরি করে যা সমস্ত থ্রেডকে থামিয়ে দেয় এবং এই থ্রেডগুলো পুনরায় শুরু হওয়ার আগে garbage collection সম্পন্ন হয়।
    • যেহেতু এই প্রক্রিয়া অনেক দ্রুত কাজ করে, তাই থ্রেডগুলি খুব কম সময়ের জন্য থামায় থাকে।
  4. Young Generation and Old Generation Collection:
    • Parallel Garbage Collector প্রথমে Young Generation (যেখানে নতুন অবজেক্ট তৈরি হয়) পরিষ্কার করে। Young Generation এর গার্বেজ কালেকশনকে Minor GC বলা হয়।
    • এরপরে, যখন Old Generation (যেখানে দীর্ঘ সময় ধরে অবজেক্ট থাকে) পরিষ্কার করতে হয়, তখন Major GC বা Full GC করা হয়, যেটি থ্রেড দ্বারা পরিচালিত হয়।
  5. Tuning and Configuration:

    • Parallel Garbage Collector কনফিগারেশন এবং টিউনিং এর মাধ্যমে আরও ভাল পারফরম্যান্স অর্জন করা যেতে পারে। JVM এর বিভিন্ন ফ্ল্যাগ এবং প্যারামিটার ব্যবহার করে এটি কাস্টমাইজ করা যায়।

    উদাহরণস্বরূপ:

    • -XX:+UseParallelGC: এটি Parallel Garbage Collector ব্যবহার করতে নির্দেশ দেয়।
    • -XX:ParallelGCThreads=: এখানে <n> দিয়ে থ্রেডের সংখ্যা নির্ধারণ করা হয়, যা গার্বেজ কালেকশনের জন্য ব্যবহৃত হবে।

Parallel Garbage Collector কিভাবে কাজ করে?

Parallel GC এর কাজের প্রক্রিয়া নিম্নরূপ:

  1. Young Generation Collection (Minor GC):
    • যখন Young Generation এ অবজেক্টগুলি পূর্ণ হয়ে যায়, তখন Minor GC প্রক্রিয়া শুরু হয়।
    • এখানে JVM একাধিক থ্রেড ব্যবহার করে young generation কে পরিষ্কার করে এবং অবজেক্টগুলোকে Old Generation এ স্থানান্তরিত করে।
  2. Old Generation Collection (Major/Full GC):
    • যখন Old Generation পূর্ণ হয়, তখন Full GC শুরু হয়, যা Young Generation সহ Old Generation কে পরিষ্কার করে।
    • Full GC তে পারফরম্যান্স কম হতে পারে, কারণ এটি stop-the-world event এবং থ্রেড থামানোর সাথে যুক্ত।
  3. Mark-Sweep-Compact Algorithm:
    • Parallel Garbage Collector Mark-Sweep-Compact অ্যালগরিদম ব্যবহার করে। এটি তিনটি ধাপে কাজ করে:
      1. Mark: প্রথমে সমস্ত অবজেক্ট চিহ্নিত করা হয়, যা এখনও ব্যবহার হচ্ছে।
      2. Sweep: অচিহ্নিত অবজেক্টগুলি মুছে ফেলা হয়।
      3. Compact: অবশিষ্ট অবজেক্টগুলি একত্রিত করা হয়, যাতে মেমরি আরও কার্যকরভাবে ব্যবহৃত হয়।
  4. Parallel Threads:
    • Parallel GC ব্যবহার করে একাধিক থ্রেড যখন garbage collection সম্পাদন করে, তখন এটি কার্যকরভাবে কাজ করে। JVM CPU কোরগুলির মধ্যে লোড ভাগ করে নেয় এবং দ্রুত কাজ সম্পন্ন করে।

Parallel Garbage Collector কনফিগারেশন উদাহরণ:

আপনি Parallel Garbage Collector সক্রিয় করতে JVM অপশনে নিচের ফ্ল্যাগ ব্যবহার করতে পারেন:

java -XX:+UseParallelGC -XX:ParallelGCThreads=4 -jar MyApp.jar

এই কমান্ডে:

  • -XX:+UseParallelGC: Parallel Garbage Collector চালু করে।
  • -XX:ParallelGCThreads=4: গার্বেজ কালেকশন প্রক্রিয়া চালানোর জন্য ৪টি থ্রেড নির্ধারণ করে।

Parallel Garbage Collector এর সুবিধা:

  1. Enhanced Performance:
    • একাধিক থ্রেড ব্যবহার করার কারণে Minor GC দ্রুত সম্পন্ন হয়, এবং কম সময়ে গার্বেজ কালেকশন প্রক্রিয়া চলে।
  2. Suitable for Multi-Core Systems:
    • Parallel GC মাল্টি-কোর প্রসেসর সিস্টেমে খুব কার্যকরী, কারণ এটি CPU কোরগুলির মধ্যে লোড ভাগ করে এবং দ্রুত গার্বেজ কালেকশন সম্পন্ন করে।
  3. High Throughput:
    • Throughput (প্রোগ্রাম এবং গার্বেজ কালেকশন এর মধ্যে সময়ের পার্থক্য) বাড়ানো হয়, যার ফলে প্রোগ্রামটি দীর্ঘ সময় ধরে চলতে থাকে এবং কম সময় ধরে garbage collection চলতে থাকে।

Parallel Garbage Collector এর অসুবিধা:

  1. Full GC Performance:
    • যদিও Minor GC দ্রুত হয়ে থাকে, কিন্তু Full GC (যে সময় পুরানো জেনারেশন ক্লিন হয়) সময় বেশি নিতে পারে এবং এটি একটি stop-the-world event হওয়ায় অ্যাপ্লিকেশনটি থামিয়ে দেয়।
  2. Memory Consumption:
    • Parallel GC আরও বেশি মেমরি ব্যবহার করতে পারে, কারণ এটি থ্রেডের সংখ্যা এবং heap space ব্যবস্থাপনায় বড়ো হয়ে থাকে।
  3. Latency Issues:
    • ছোট সিস্টেম বা সিস্টেম যেখানে কম লেটেন্সি প্রয়োজন, সেখানে Parallel GC কিছুটা সমস্যার সৃষ্টি করতে পারে, কারণ এটি থ্রেড থামানোর সাথে কাজ করে।

Parallel Garbage Collector JVM-এ একাধিক থ্রেড ব্যবহার করে garbage collection প্রক্রিয়াকে দ্রুততর এবং আরো দক্ষ করে তোলে। এটি throughput বাড়ানোর জন্য আদর্শ এবং মাল্টি-কোর প্রসেসরের সিস্টেমে ভালো পারফরম্যান্স প্রদান করে। তবে, যদি Full GC বেশি সময় নেয় অথবা পারফরম্যান্সের সমস্যা হয়, তাহলে JVM এর অন্যান্য গার্বেজ কালেকশন পদ্ধতি, যেমন G1 GC বা CMS GC, বিবেচনা করা যেতে পারে।

Content added By

Concurrent Mark-Sweep (CMS) Garbage Collector

316

Concurrent Mark-Sweep (CMS) হল Garbage Collection (GC) এর একটি প্রকার যা Java Virtual Machine (JVM)-এ মেমরি ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। CMS একটি garbage collector যা মেমরি ব্যবস্থাপনা দ্রুত এবং কার্যকরীভাবে করতে সহায়তা করে, বিশেষ করে low-latency applications বা কম দেরিতে সাড়া দেওয়া অ্যাপ্লিকেশনগুলির জন্য। এটি JVM এর পুরানো Mark-Sweep garbage collection অ্যালগরিদমের একটি উন্নত সংস্করণ, যা মাল্টি-থ্রেডেড অপারেশনের মাধ্যমে garbage collection প্রক্রিয়া দ্রুত করে।

CMS Garbage Collector কী?

Concurrent Mark-Sweep (CMS) Garbage Collector একটি multi-threaded, concurrent গার্বেজ কलेकশন অ্যালগরিদম যা মেমরি পরিচালনা করার জন্য জাভার heap space (পুরানো এবং নতুন অঞ্চল) এর উপর কাজ করে। এর মূল উদ্দেশ্য হল pause time বা latency কমানো, যাতে interactive applications যেমন web servers, real-time applications, high-performance systems ইত্যাদি দ্রুত প্রতিক্রিয়া প্রদান করতে পারে।

CMS Garbage Collector এর মূল বৈশিষ্ট্য:

  1. Concurrent Collection:
    • CMS কনকারেন্টলি গার্বেজ কোলেকশন প্রক্রিয়া পরিচালনা করে, অর্থাৎ এটি কিছু গার্বেজ কোলেকশন কার্যক্রম application threads এর সাথে একই সময়ে চালায়। এটি সাধারণভাবে সিস্টেমের ডাউনটাইম বা pause time কমাতে সাহায্য করে।
  2. Low Pause Time:
    • CMS এর সবচেয়ে বড় সুবিধা হল এটি খুব কম সময়ের জন্য GC pause ঘটায়। এটি একাধিক থ্রেডের মাধ্যমে গার্বেজ কোলেকশন প্রক্রিয়া সম্পন্ন করে, যাতে অ্যাপ্লিকেশন থ্রেডের জন্য কম সময় ব্লক হয়।
  3. Mark and Sweep Phases:
    • CMS মূলত Mark এবং Sweep ফেজ দুটি ব্যবহার করে:
      • Mark Phase: CMS প্রথমে সব অবজেক্ট শনাক্ত করে যেগুলি reachable (অর্থাৎ, যেগুলি এখনও অ্যাপ্লিকেশন কোড দ্বারা অ্যাক্সেস করা হচ্ছে) এবং যেগুলি unreachable (অর্থাৎ, যেগুলি অ্যাপ্লিকেশন কোড দ্বারা অ্যাক্সেস করা হচ্ছে না)।
      • Sweep Phase: তারপরে, unreachable অবজেক্টগুলিকে মুছে ফেলা হয় (গার্বেজ কোলেকশন করা হয়) এবং মুক্ত মেমরি তৈরি হয়।
  4. Generational GC:
    • CMS পুরানো (old) এবং নতুন (young) মেমরি অঞ্চলে ভাগ করা heap space ব্যবহার করে। এই দুটি অঞ্চল আলাদা আলাদা করে কোলেকশন করে, যাতে young generation (যেখানে নতুন অবজেক্ট তৈরি হয়) দ্রুত গার্বেজ করা হয় এবং old generation (যেখানে দীর্ঘস্থায়ী অবজেক্ট থাকে) ধীরে ধীরে গার্বেজ করা হয়।
  5. Incremental Collection:
    • CMS কার্যকরীভাবে incremental collection করে, যেখানে বড় গার্বেজ কোলেকশন সেশনের সময় ছোট ছোট অংশে তা বিভক্ত করা হয়। এটি কাজটি সমাপ্ত করতে বেশি সময় নিলেও pause time কম করে দেয়।

CMS Garbage Collector এর কাজের ধাপ:

CMS এর প্রক্রিয়া সাধারণত নিম্নলিখিত ধাপগুলিতে বিভক্ত করা হয়:

  1. Initial Mark Phase:
    • এই ধাপে, CMS প্রথমে young generation এর ক্লাসগুলোকে চিহ্নিত করে এবং সেগুলিকে reachable হিসেবে মার্ক করে। এটা দ্রুত ঘটে, তবে এই পর্যায়ে কিছু ছোট pause time থাকতে পারে।
  2. Concurrent Mark Phase:
    • এই পর্যায়ে CMS পুরো heap (অর্থাৎ young এবং old অঞ্চল) এর সমস্ত অবজেক্ট স্ক্যান করে এবং reachable অবজেক্টগুলো চিহ্নিত করে। এই প্রক্রিয়া মূল অ্যাপ্লিকেশন থ্রেডের সাথে কনকারেন্টলি চলে, তাই এটি মূল প্রোগ্রাম থ্রেডে ছোট pause time তৈরি করে।
  3. Concurrent Pre-clean Phase:
    • যখন কনকারেন্ট মার্কিং চলতে থাকে, তখন কিছু সময়ের জন্য old generation এর অবজেক্টের জন্য গার্বেজ কোলেকশন করা শুরু হয় যাতে মেমরি দ্রুত মুছে ফেলা যায়।
  4. Final Remark Phase:
    • এই পর্যায়ে, CMS একটি ছোট pause time নিয়ে অবশেষে reachable অবজেক্টগুলো চিহ্নিত করে এবং কোনো অবশিষ্ট গার্বেজ অবজেক্ট মুছে ফেলে।
  5. Concurrent Sweep Phase:
    • এই ধাপে CMS সমস্ত unreachable অবজেক্ট মুছে ফেলে এবং তাদের মেমরি মুক্ত করে। এটি মূল প্রোগ্রাম থ্রেডের সাথে কনকারেন্টলি চলে।
  6. Concurrent Reset Phase:
    • সমস্ত গার্বেজ কোলেকশন সেশনের শেষে, CMS গার্বেজের সমস্ত মেমরি এলাকা রিসেট করে এবং পরবর্তী গার্বেজ কোলেকশনের জন্য প্রস্তুতি নেয়।

CMS Garbage Collector এর সুবিধা:

  1. Low Pause Time:
    • CMS GC প্রক্রিয়া কম pause time নিশ্চিত করে, যা real-time applications এবং interactive systems এর জন্য উপযুক্ত। এটি বিশেষভাবে ওয়েব সার্ভার, ডেটাবেস সার্ভার বা অন্যান্য লাইভ সিস্টেমে কার্যকরী।
  2. Concurrent Execution:
    • CMS সাধারণত concurrent গার্বেজ কোলেকশন পরিচালনা করে, যেখানে গার্বেজ কোলেকশন এবং অ্যাপ্লিকেশন থ্রেড একসাথে কাজ করতে পারে, ফলে stop-the-world পজ পরিবর্তন কম হয়।
  3. Non-Disruptive:
    • এটি JVM এর মেমরি ব্যবস্থাপনা প্রক্রিয়াতে একটি non-disruptive পদ্ধতি প্রদান করে, অর্থাৎ অ্যাপ্লিকেশন থ্রেডের কার্যক্রম প্রায় নষ্ট হয় না।

CMS Garbage Collector এর সীমাবদ্ধতা:

  1. Full GC:
    • CMS এর একটি প্রধান সমস্যা হল এটি Full GC ঘটাতে পারে, বিশেষ করে যখন old generation এর heap space ভরে যায় এবং মেমরি ম্যানেজমেন্টে সমস্যা দেখা দেয়। Full GC চলাকালীন pause time অনেক বেড়ে যায়।
  2. Fragmentation:
    • CMS মেমরি ফ্র্যাগমেন্টেশন তৈরি করতে পারে, বিশেষত যখন old generation এলাকা থেকে মেমরি খুবই ছোট ব্লক মুছে ফেলা হয় এবং এতে নতুন মেমরি বরাদ্দে সমস্যা দেখা দেয়।
  3. Tuning Complexity:
    • CMS গার্বেজ কোলেক্টরের performance tuning কিছুটা জটিল হতে পারে, কারণ এটি বিভিন্ন ধরনের মেমরি এলাকা এবং concurrent phases পরিচালনা করে। এটি সঠিকভাবে কনফিগার না করলে, pause time সমস্যা হতে পারে।

CMS Garbage Collector ব্যবহার করার জন্য JVM অপশন:

যখন আপনি JVM এ CMS গার্বেজ কোলেক্টর ব্যবহার করতে চান, তখন কিছু নির্দিষ্ট JVM অপশন দিতে হয়:

java -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Xms512m -Xmx1024m -jar MyApplication.jar
  • -XX:+UseConcMarkSweepGC: CMS গার্বেজ কোলেক্টর সক্রিয় করতে।
  • -XX:+UseParNewGC: young generation এর জন্য parallel garbage collection চালু করা।
  • -Xms512m: JVM এর প্রাথমিক heap সাইজ।
  • -Xmx1024m: JVM এর সর্বোচ্চ heap সাইজ।

Concurrent Mark-Sweep (CMS) গার্বেজ কোলেক্টর একটি উন্নত গার্বেজ কোলেকশন পদ্ধতি যা কম pause time নিশ্চিত করে, যা real-time বা low-latency অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত। এটি গার্বেজ কোলেকশন প্রক্রিয়া concurrentmulti-threaded ভাবে পরিচালনা করে, তবে কিছু সীমাবদ্ধতা যেমন Full GC এবং fragmentation থাকতে পারে। CMS সঠিকভাবে কনফিগার করা হলে, এটি Java অ্যাপ্লিকেশনগুলির পারফরম্যান্স এবং প্রতিক্রিয়া সময়ে উল্লেখযোগ্য উন্নতি আনতে সক্ষম।

Content added By

Garbage First (G1) Garbage Collector

270

Garbage Collection (GC) হল Java Virtual Machine (JVM)-এর একটি গুরুত্বপূর্ণ ফিচার, যা মেমরি ম্যানেজমেন্টে সহায়তা করে। এটি সেই মেমরির অপ্রয়োজনীয় অবজেক্টগুলো মুছে ফেলে, যাতে নতুন অবজেক্টের জন্য মেমরি মুক্ত থাকে। Garbage First (G1) Garbage Collector হল JVM এর একটি উন্নত Garbage Collector (GC) যেটি মেমরি ব্যবস্থাপনাকে আরও দক্ষভাবে পরিচালনা করতে সহায়তা করে।

G1 GC হল server-class machine এর জন্য তৈরি একটি low-latency এবং high-throughput garbage collector, যা large heaps এবং multi-core processors তে আরও কার্যকরী। এটি Java 7-এ introdue করা হয়েছিল এবং এটি পূর্ববর্তী Parallel GC এবং CMS (Concurrent Mark-Sweep) GC এর চেয়ে আরও উন্নত।

Garbage First (G1) Garbage Collector এর প্রধান বৈশিষ্ট্য:

  1. Region-based Memory Management:
    • G1 GC heap কে regions (বিভিন্ন সাইজের ব্লক) তে ভাগ করে, যেখানে Young Generation, Old Generation, এবং Survivor Space সহ সকল মেমরি অংশ থাকে।
    • Regions এর মাধ্যমে G1 GC মেমরি ম্যানেজমেন্ট করতে পারে, এতে করে মেমরি এক্সট্র্যাকশন আরও কার্যকর এবং ফাইন-গ্রেইনড হয়।
  2. Concurrent Marking:
    • G1 GC marking phase তে concurrent marking পদ্ধতি ব্যবহার করে, যাতে garbage collection কার্যক্রমের সময় অ্যাপ্লিকেশন থ্রেড থামাতে না হয়।
    • এটি মূলত Old Generation এর মধ্যে অব্যবহৃত অবজেক্ট খুঁজে বের করে এবং সেগুলো মুছে ফেলে।
  3. Predictability:
    • G1 GC উন্নত latency predictability প্রদান করে। এটি ব্যবহারকারীদেরকে garbage collection থ্রেডগুলির সময়কাল এবং ভিন্ন ভিন্ন ধাপ সম্পর্কে পূর্বাভাস দিতে সহায়তা করে, যাতে garbage collection কার্যক্রমের পূর্ববর্তী সময়ের সঠিক সময় পরিমাপ করা যায়।
  4. Incremental Collection:
    • G1 GC incremental (ধাপে ধাপে) garbage collection সম্পন্ন করে। এতে বড় heap গুলির জন্য সার্বক্ষণিক garbage collection এর পরিবর্তে ধাপে ধাপে collection কার্যক্রম পরিচালনা করা হয়, যাতে দীর্ঘ সময়ের জন্য অ্যাপ্লিকেশন থামানো না হয়।
  5. Pause-Time Goals:
    • G1 GC pause-time goals সেট করতে পারে, যাতে garbage collection এর সময় একটি নির্দিষ্ট pause time বজায় থাকে। এটি স্মরণীয় যে G1 GC application throughput (অ্যাপ্লিকেশন কীভাবে রান করছে) কমানোর চেষ্টা করে না, তবে pause times কমানোর দিকে বেশি মনোযোগ দেয়।
  6. Mixed Collections:
    • G1 GC সাধারণত young generation (যেখানে নতুন অবজেক্ট তৈরি হয়) এবং old generation (যেখানে পুরনো অবজেক্ট রাখা থাকে) আলাদা করে garbage collection পরিচালনা করে।
    • পরে, এটি mixed collections পরিচালনা করে যা একাধিক region (young এবং old) একসাথে garbage collect করে, যখন heap এর বিভিন্ন অঞ্চল পূর্ণ হতে থাকে।

Garbage First (G1) Garbage Collector এর কাজের প্রক্রিয়া:

G1 Garbage Collector ৩টি প্রধান ধাপে garbage collection পরিচালনা করে:

  1. Young Generation Collection:
    • এখানে নতুন অবজেক্টগুলি তৈরি হয় এবং তারা প্রাথমিকভাবে young generation তে থাকে। এই অবজেক্টগুলি যখন old generation এ স্থানান্তরিত হতে শুরু করে, তখন G1 garbage collector তাদেরকে clean করে (Minor GC)।
  2. Old Generation Collection:
    • এই ধাপে পুরনো অবজেক্টগুলি, যেগুলি বেশ কিছু সময় ধরে heap তে থাকছে এবং বর্তমানে ব্যবহৃত হচ্ছে না, সেগুলি old generation থেকে মুছে ফেলা হয় (Major GC বা Mixed GC)।
    • G1 GC এই প্রক্রিয়াটি সম্পাদন করতে incremental marking ব্যবহার করে, যা খুব কম সময়ের মধ্যে heap এর বড় অংশগুলিকে পরিস্কার করতে সাহায্য করে।
  3. Mixed Garbage Collection:
    • G1 GC young এবং old generation এর মধ্যে মিশ্র garbage collection পরিচালনা করে, যখন heap এর নির্দিষ্ট সেগমেন্টগুলি পূর্ণ হয়।

G1 Garbage Collector এর ধাপগুলো:

  1. Initial Mark Phase:
    • Initial Marking প্রথমে young generation-এর অবজেক্টগুলি চিহ্নিত করে এবং এটি মূলত ছোট সময় নেয়।
  2. Concurrent Mark Phase:
    • এই ধাপে G1 GC সমস্ত live objects কে চিহ্নিত করতে শুরু করে এবং Old Generation তে অবজেক্টের অবস্থা চিহ্নিত করে। এটি concurrent ভাবে চলে, যাতে অ্যাপ্লিকেশন থ্রেডের কার্যক্রম থামানো না হয়।
  3. Remark Phase:
    • Remark phase তে, G1 GC প্রথমে চিহ্নিত করা অবজেক্টগুলিকে ফাইন টিউন করার কাজ করে, যাতে সঠিকভাবে অব্যবহৃত অবজেক্টগুলি মুছে ফেলা যায়।
  4. Cleanup Phase:
    • Cleanup phase শেষ পর্যায়ে সমস্ত অপ্রয়োজনীয় অবজেক্টগুলোকে মুছে ফেলা হয় এবং মেমরি ফেরত দেওয়া হয়।

G1 GC এবং অন্যান্য Garbage Collectors এর তুলনা:

Garbage CollectorPause Time GoalsYoung Generation CollectionOld Generation Collection
Serial GCNo Pause Time GoalsMinor GC stops application threadsMajor GC stops application threads
Parallel GCNo Pause Time GoalsMinor GC stops application threadsMajor GC stops application threads
CMS GCLow Pause Time GoalsConcurrent collection, but full GC stops application threadsLess frequent full GC, but high latency
G1 GCAdjustable Pause Time GoalsMinor GC stops application threadsMore efficient collection and fine-grained control over pause times

G1 GC এর Configuration:

G1 GC ব্যবহারের জন্য JVM অপশন কনফিগার করা যেতে পারে:

  • -XX:+UseG1GC: G1 Garbage Collector চালু করা।
  • -XX:MaxGCPauseMillis=<time_in_ms>: G1 GC এর জন্য pause time goal নির্ধারণ করা (এটা একটি ইউজার-ডিফাইনড গঠন, G1 GC চেষ্টা করবে এই সময়ের মধ্যে গারবেজ সংগ্রহ শেষ করতে)।
  • -XX:G1HeapRegionSize=<size>: G1 GC এর heap region সাইজ কাস্টমাইজ করা (যেমন 1MB বা 8MB)।
java -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=8M -jar YourApp.jar

সারাংশ:

G1 Garbage Collector একটি উন্নত garbage collection প্রযুক্তি যা JVM এর heap ম্যানেজমেন্টে কার্যকরী এবং কম latency এবং high throughput নিশ্চিত করে। এটি বড় heap সাইজ এবং multi-core processors তে আরও কার্যকরী এবং এটি pause-time goals সেট করে garbage collection প্রক্রিয়াটি আরও নিয়ন্ত্রিত করে। G1 GC আরও কার্যকরী, সামঞ্জস্যপূর্ণ এবং একাধিক ছোট garbage collection লোড পরিচালনা করতে সক্ষম, যা Java অ্যাপ্লিকেশনগুলির জন্য পারফরম্যান্স উন্নত করতে সহায়তা করে।

Content added By
Promotion

Are you sure to start over?

Loading...