জাভাতে আবর্জনা সংগ্রহ কী তা স্মরণ করুন
আবর্জনা সংগ্রহ হল অব্যবহৃত বস্তু ধ্বংস করে সম্পূর্ণ রানটাইম মেমরি পুনরুদ্ধার করার প্রক্রিয়া।
কখনও কখনও প্রোগ্রামার অকেজো বস্তু ধ্বংস করতে ভুলে যেতে পারে, এবং তাদের জন্য বরাদ্দ করা মেমরি মুক্ত হয় না। আরো এবং আরো সিস্টেম মেমরি গ্রাস করা হয়, এবং অবশেষে আর কোন বরাদ্দ করা হয়. এই ধরনের অ্যাপ্লিকেশনগুলি "মেমরি লিক" থেকে ভুগছে।
একটি নির্দিষ্ট বিন্দুর পরে, নতুন বস্তু তৈরি করার জন্য আর পর্যাপ্ত মেমরি থাকে না এবং OutOfMemoryError এর কারণে প্রোগ্রামটি অস্বাভাবিকভাবে বন্ধ হয়ে যায় ।
জাভাতে আবর্জনা সংগ্রহ একটি প্রক্রিয়া যার মাধ্যমে জাভা প্রোগ্রাম মেমরি স্বয়ংক্রিয়ভাবে পরিচালনা করে। জাভা প্রোগ্রামগুলিকে বাইটকোডে কম্পাইল করা হয় যা জাভা ভার্চুয়াল মেশিনে (JVM) চলে।
যখন জাভা প্রোগ্রামগুলি JVM-এ চলে, তখন বস্তুগুলি হিপে তৈরি হয়, যা তাদের জন্য বরাদ্দ করা মেমরির অংশ।
যখন একটি জাভা অ্যাপ্লিকেশন চলছে, তখন এতে নতুন বস্তু তৈরি হয়। শেষ পর্যন্ত, কিছু বস্তুর আর প্রয়োজন নেই। আমরা বলতে পারি যে কোনো নির্দিষ্ট সময়ে, হিপ মেমরি দুই ধরনের বস্তু নিয়ে গঠিত।
- লাইভ - এই বস্তু ব্যবহার করা হয়, তারা অন্য কোথাও থেকে উল্লেখ করা হয়.
- মৃত - এই বস্তুগুলি অন্য কোথাও ব্যবহার করা হয় না, তাদের কোন উল্লেখ নেই।
আবর্জনা সংগ্রাহক এই অব্যবহৃত বস্তুগুলি খুঁজে পায় এবং মেমরি খালি করার জন্য সেগুলি সরিয়ে দেয়।
জাভাতে আবর্জনা সংগ্রহ একটি স্বয়ংক্রিয় প্রক্রিয়া । প্রোগ্রামারকে মুছে ফেলার জন্য বস্তুগুলিকে স্পষ্টভাবে চিহ্নিত করার প্রয়োজন নেই।
প্রতিটি JVM আবর্জনা সংগ্রহের নিজস্ব সংস্করণ বাস্তবায়ন করতে পারে। যাইহোক, সংগ্রাহককে অবশ্যই স্ট্যান্ডার্ড JVM স্পেসিফিকেশন মেনে চলতে হবে যাতে হিপ মেমরিতে উপস্থিত বস্তুগুলিকে চিহ্নিত করা যায় বা চিহ্নিত করা যায় না এবং কম্প্যাকশনের মাধ্যমে ধ্বংস করা যায়।
অবজেক্ট রিচেবিলিটি
একটি বস্তুকে জীবিত হিসাবে স্বীকৃতি দেওয়ার জন্য, লিঙ্কগুলির উপস্থিতি যথেষ্ট নয়। কারণ কিছু মৃত বস্তু অন্যান্য মৃত বস্তুর উল্লেখ করতে পারে। এই কারণেই এটি প্রয়োজনীয় যে একটি বস্তুর সমস্ত রেফারেন্সের মধ্যে একটি "লাইভ" বস্তু থেকে অন্তত একটি থাকা উচিত।
আবর্জনা সংগ্রহকারীরা জীবিত এবং মৃত বস্তুর মধ্যে পার্থক্য করার জন্য জিসি রুটস ( আবর্জনা সংগ্রহের মূল ) ধারণা নিয়ে কাজ করে । এখানে 100% লাইভ অবজেক্ট রয়েছে এবং সেগুলির থেকে লিঙ্ক রয়েছে যা অন্যান্য বস্তুকে অ্যানিমেট করে এবং আরও অনেক কিছু।
এই ধরনের শিকড় উদাহরণ:
- সিস্টেম ক্লাস লোডার দ্বারা লোড করা হয় যে ক্লাস.
- লাইভ স্ট্রীম
- বর্তমানে কার্যকরী পদ্ধতি এবং স্থানীয় ভেরিয়েবলের পরামিতি।
- সিঙ্ক্রোনাইজেশনের জন্য মনিটর হিসাবে ব্যবহৃত বস্তুগুলি।
- কোন উদ্দেশ্যে আবর্জনা সংগ্রহ থেকে রাখা হয় যে বস্তু.
- আবর্জনা সংগ্রাহক মেমরিতে থাকা বস্তুর সমগ্র গ্রাফের মধ্য দিয়ে চলে, এই মূল থেকে শুরু করে এবং অন্যান্য বস্তুর উল্লেখ অনুসরণ করে।
জাভাতে আবর্জনা সংগ্রহের পদক্ষেপ
স্ট্যান্ডার্ড আবর্জনা সংগ্রহ বাস্তবায়নের তিনটি ধাপ রয়েছে।
1. লাইভ হিসাবে বস্তু চিহ্নিত করুন
এই মুহুর্তে, আবর্জনা সংগ্রাহক (GC) অবশ্যই বস্তুর গ্রাফটি অতিক্রম করে স্মৃতিতে থাকা সমস্ত জীবন্ত বস্তুকে সনাক্ত করতে হবে।
যখন এটি একটি বস্তু পরিদর্শন করে, এটি উপলব্ধ হিসাবে চিহ্নিত করে এবং তাই জীবন্ত। GC রুট থেকে অ্যাক্সেসযোগ্য নয় এমন সমস্ত বস্তুকে আবর্জনা সংগ্রহের জন্য প্রার্থী হিসাবে বিবেচনা করা হয়।
2. মৃত বস্তু পরিষ্কার করা
মার্কআপ পর্বের পরে, মেমরির স্থান জীবিত (পরিদর্শন করা) বা মৃত (পরিদর্শন করা হয়নি) বস্তু দ্বারা দখল করা হয়। ক্লিনআপ ফেজ এই মৃত বস্তু ধারণ করে মেমরির টুকরোগুলোকে মুক্ত করে।
3. মেমরিতে অবশিষ্ট বস্তুর কম্প্যাক্ট বিন্যাস
আগের পর্বে অপসারণ করা মৃত বস্তু একে অপরের পাশে থাকা আবশ্যক নয়। এইভাবে, আপনি একটি খণ্ডিত (অর্ধ-খালি) মেমরি স্পেস পাওয়ার ঝুঁকি নিন।
তবে, অবশ্যই, এটি সরবরাহ করার পরে, আবর্জনা সংগ্রাহক মৃত বস্তুগুলি সরিয়ে দেওয়ার মুহুর্তে স্মৃতিকে সংক্ষিপ্ত করা সম্ভব। বাকীগুলি স্তূপের শুরুতে একটি সংলগ্ন ব্লকে অবস্থিত হবে।
কম্প্যাকশন প্রক্রিয়া নতুন বস্তুর জন্য ক্রমানুসারে মেমরি বরাদ্দ করা সহজ করে তোলে।
GO TO FULL VERSION