বস্তুর প্রজন্মের সাথে কাজ করা

জাভা আবর্জনা সংগ্রহকারীরা একটি প্রজন্মের আবর্জনা সংগ্রহের কৌশল প্রয়োগ করে যা বয়স অনুসারে বস্তুকে শ্রেণীবদ্ধ করতে পারে।

JVM-তে এই ধরনের প্রয়োজন (সকল বস্তুকে চিহ্নিত এবং সংকুচিত করা) অদক্ষ বলা যেতে পারে। যেহেতু বিপুল সংখ্যক বস্তু বরাদ্দ করা হয়, তাদের তালিকা বৃদ্ধি পায়, যা আবর্জনা সংগ্রহের সময় বৃদ্ধির দিকে পরিচালিত করে। অ্যাপ্লিকেশনের পরীক্ষামূলক বিশ্লেষণে দেখা গেছে যে জাভাতে বেশিরভাগ বস্তুই স্বল্পস্থায়ী।

JVM-এর হিপ মেমরি এলাকা তিনটি বিভাগে বিভক্ত:

বস্তুর প্রজন্মের সাথে কাজ করা

তরুণ প্রজন্ম

নতুন সৃষ্ট বস্তুগুলি তরুণ প্রজন্মের মধ্যে শুরু হয়। তরুণ প্রজন্ম আবার দুই ভাগে বিভক্ত।

  • ইডেন স্পেস - সমস্ত নতুন বস্তু এখানে শুরু হয়, তারা প্রাথমিক মেমরি বরাদ্দ করা হয়।
  • সারভাইভার স্পেস (ফ্রমস্পেস এবং টোস্পেস) - একটি আবর্জনা সংগ্রহ চক্র বেঁচে থাকার পরে ইডেন থেকে বস্তুগুলি এখানে সরানো হয়।

তরুণ প্রজন্মের কাছ থেকে যখন বস্তুগুলি আবর্জনা সংগ্রহ করা হয় তখন একটি ছোট আবর্জনা সংগ্রহের ঘটনা বলা হয়।

যখন ইডেনের স্থান বস্তুতে পূর্ণ হয়, তখন একটি ছোট আবর্জনা সংগ্রহ করা হয়। সমস্ত মৃত বস্তু সরানো হয়, এবং সমস্ত জীবিতকে অবশিষ্ট দুটি স্থানের একটিতে স্থানান্তরিত করা হয়। ছোট জিসিও সারভাইভার স্পেসে বস্তু পরীক্ষা করে এবং অন্য (পরবর্তী) সারভাইভার স্পেসে নিয়ে যায়।

একটি উদাহরণ হিসাবে নিম্নলিখিত ক্রম গ্রহণ করা যাক.

  1. ইডেনে উভয় ধরণের (জীবন্ত এবং মৃত) বস্তু রয়েছে।
  2. একটি ছোট জিসি ঘটে - সমস্ত মৃত বস্তু ইডেন থেকে সরানো হয়। সমস্ত জীবন্ত বস্তু স্থানান্তরিত হয় স্পেস-1 (ফ্রমস্পেস) এ। ইডেন ও স্পেস-২ এখন ফাঁকা।
  3. নতুন বস্তু তৈরি এবং ইডেনে যোগ করা হয়। ইডেন ও স্পেস-১ এর কিছু বস্তু মৃত হয়ে যায়।
  4. একটি ছোট জিসি ঘটে - সমস্ত মৃত বস্তু ইডেন এবং স্থান -1 থেকে সরানো হয়। সমস্ত জীবন্ত বস্তু স্থান-2 (ToSpace) এ স্থানান্তরিত হয়। ইডেন ও স্পেস-১ খালি।

এইভাবে, যে কোনও সময়, বেঁচে থাকার জায়গাগুলির মধ্যে একটি সর্বদা খালি থাকে। যখন বেঁচে থাকা ব্যক্তিরা বেঁচে থাকা স্থানগুলির মধ্য দিয়ে যাওয়ার জন্য একটি নির্দিষ্ট থ্রেশহোল্ডে পৌঁছায়, তখন তারা একটি পুরানো প্রজন্মের দিকে অগ্রসর হয়।

আপনি তরুণ প্রজন্মের আকার সেট করতে -Xmn পতাকা ব্যবহার করতে পারেন ।

আগেকার প্রজন্ম

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

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

আপনি প্রাথমিক এবং সর্বোচ্চ হিপ মেমরি আকার সেট করতে -Xms এবং -Xmx পতাকা ব্যবহার করতে পারেন ।

যেহেতু জাভা প্রজন্মগত আবর্জনা সংগ্রহ ব্যবহার করে, একটি বস্তু যত বেশি আবর্জনা সংগ্রহের ঘটনা অনুভব করে, তত বেশি এটি স্তূপের উপর চলে যায়। তিনি তরুণ প্রজন্ম থেকে শুরু করেন এবং শেষ পর্যন্ত নিয়মিত প্রজন্মের মধ্যে শেষ হন যদি তিনি যথেষ্ট দিন বেঁচে থাকেন।

স্পেস এবং প্রজন্মের মধ্যে বস্তুর প্রচার বোঝার জন্য, নিম্নলিখিত উদাহরণ বিবেচনা করুন:

যখন একটি বস্তু তৈরি হয়, এটি প্রথমে তরুণ প্রজন্মের ইডেন স্পেসে স্থাপন করা হয়।

একটি ছোট আবর্জনা সংগ্রহের সাথে সাথেই, ইডেন থেকে জীবন্ত বস্তুগুলি FromSpace-এ সরানো হয়। যখন পরবর্তী ছোটখাটো আবর্জনা সংগ্রহের ঘটনা ঘটে, তখন ইডেন এবং স্থান উভয়ের জীবন্ত বস্তুগুলিকে ToSpace-এ সরানো হয়।

এই চক্র নির্দিষ্ট সংখ্যক বার চলতে থাকে। যদি এই পয়েন্টের পরেও বস্তুটি "পরিষেবাতে" থাকে, তাহলে পরবর্তী আবর্জনা সংগ্রহ চক্র এটিকে পুরানো প্রজন্মের জায়গায় নিয়ে যাবে।

স্থায়ী প্রজন্ম এবং মেটাস্পেস

ক্লাস এবং পদ্ধতির মত মেটাডেটা ক্রমাগত প্রজন্মের মধ্যে সংরক্ষণ করা হয়। অ্যাপ্লিকেশন দ্বারা ব্যবহৃত ক্লাসের উপর ভিত্তি করে JVM রানটাইমে এটিকে পপুলেট করে। যে ক্লাসগুলি আর ব্যবহার করা হয় না সেগুলি স্থায়ী প্রজন্ম থেকে আবর্জনায় যেতে পারে।

স্থায়ী প্রজন্মের প্রাথমিক এবং সর্বোচ্চ আকার সেট করতে আপনি -XX:PermGen এবং -XX:MaxPermGen পতাকা ব্যবহার করতে পারেন ।

মেটা স্পেস

Java 8 থেকে, PermGen স্থানটি MetaSpace মেমরি স্পেস দ্বারা প্রতিস্থাপিত হয়েছে। বাস্তবায়ন PermGen থেকে পৃথক - এই হিপ স্থান এখন স্বয়ংক্রিয়ভাবে পরিবর্তিত হয়।

এটি অ্যাপ্লিকেশনটির মেমরির বাইরের সমস্যা এড়ায় যা PermGen-এর হিপ স্পেসের সীমিত আকারের কারণে ঘটে। মেটাস্পেস মেমরি আবর্জনা সংগ্রহ করা যেতে পারে, এবং মেটাস্পেস তার সর্বাধিক আকারে পৌঁছে গেলে স্বয়ংক্রিয়ভাবে পরিষ্কার করা হবে যে ক্লাসগুলি আর ব্যবহার করা হয় না।