জাভাতে আবর্জনা সংগ্রহকারী কী?


103

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



10
কখনও কখনও এটি একটি প্রশ্নের উত্তর থেকে একটি জটিল বিষয় বুঝতে আশা করি একটি ভাল বইয়ের অধ্যায় পড়া ভাল।
ইয়ান রিংরোজ

4
@ আইয়ান এটি একটি অনুরূপ প্রশ্ন, তবে নকল নয়। এবং যে প্রশ্ন reeks হোমওয়ার্ক।
নাল ইউজারএক্সসেপশন

উত্তর:


119

আবর্জনা সংগ্রাহক একটি প্রোগ্রাম যার উপর চালনা করে জাভা ভার্চুয়াল মেশিন যা বস্তু যা এখন আর একটি জাভা অ্যাপ্লিকেশন দ্বারা ব্যবহার করা হচ্ছে না পরিত্রাণ পায়। এটি স্বয়ংক্রিয় মেমরি পরিচালনার একটি ফর্ম ।

যখন একটি সাধারণ জাভা অ্যাপ্লিকেশন চলমান থাকে, তখন এটি Stringএস এবং Fileএস এর মতো নতুন অবজেক্ট তৈরি করে , তবে একটি নির্দিষ্ট সময়ের পরে, সেই জিনিসগুলি আর ব্যবহার করা হয় না। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি একবার দেখুন:

for (File f : files) {
    String s = f.getName();
}

উপরের কোডে String sলুপটির প্রতিটি পুনরাবৃত্তিতে তৈরি করা হচ্ছে for। এর অর্থ হ'ল প্রতিটি পুনরাবৃত্তিতে একটি Stringবস্তু তৈরি করতে কিছুটা মেমরি বরাদ্দ করা হচ্ছে ।

কোডটিতে ফিরে গিয়ে আমরা দেখতে পাচ্ছি যে একবার একক পুনরাবৃত্তি কার্যকর হয়ে গেলে, পরবর্তী পুনরাবৃত্তিতে, Stringপূর্ববর্তী পুনরাবৃত্তিতে যে বস্তুটি তৈরি হয়েছিল সেটি আর ব্যবহৃত হচ্ছে না - সেই অবজেক্টটি এখন "আবর্জনা" হিসাবে বিবেচিত হয়।

অবশেষে, আমরা প্রচুর আবর্জনা পেতে শুরু করব এবং মেমরিটি এমন জিনিসগুলির জন্য ব্যবহৃত হবে যা আর ব্যবহার করা হচ্ছে না। এটি যদি এভাবেই চলতে থাকে, শেষ পর্যন্ত জাভা ভার্চুয়াল মেশিনটি নতুন অবজেক্টগুলি তৈরি করতে স্থানের বাইরে চলে যাবে।

সেখানেই আবর্জনা সংগ্রহকারী stepsুকল।

আবর্জনা সংগ্রহকারী এমন জিনিসগুলি সন্ধান করবে যা আর ব্যবহার করা হচ্ছে না এবং এগুলি থেকে মুক্তি পেয়ে মেমরিটি মুক্ত করে দেয় যাতে অন্যান্য নতুন বস্তু সেই মেমরির টুকরোটি ব্যবহার করতে পারে।

জাভাতে, ময়লা ম্যানেজমেন্টের যত্ন আবর্জনা সংগ্রহকারী দ্বারা নেওয়া হয়, তবে সি এর মতো অন্যান্য ভাষায়, যেমন mallocএবং এরfree মতো ক্রিয়াকলাপগুলি ব্যবহার করে নিজেরাই মেমরি পরিচালনা করতে হবে । মেমরি ম্যানেজমেন্ট হল সেই জিনিসগুলির মধ্যে একটি যা ভুল করা সহজ, যা মেমোরি ফাঁস বলা যেতে পারে - যে জায়গাগুলি যখন আর ব্যবহার না করা হয় তখন স্মৃতি পুনরুদ্ধার করা হয় না।

আবর্জনা সংগ্রহের মতো স্বয়ংক্রিয় মেমরি ম্যানেজমেন্ট স্কিমগুলি এটি তৈরি করে যাতে প্রোগ্রামারকে মেমরি পরিচালনার সমস্যাগুলি সম্পর্কে এত বেশি চিন্তা করতে হবে না, তাই সে বা সেগুলি তাদের বিকাশ করার জন্য প্রয়োজনীয় অ্যাপ্লিকেশনগুলি বিকাশে আরও ফোকাস করতে পারে।


কম্পিউটারে চলছে এমন জাভা অ্যাপ্লিকেশনটি কী বলা ঠিক হবে তবে দুটি আবর্জনা সংগ্রহের কার্যকারিতা রয়েছে। জাভা ভার্চুয়াল মেশিনের সাথে একটি। এবং তারপরে একটি আসল মেশিনে যা উইন্ডো চালায়? (বা অন্য কোনও ওএস)
লিয়ালো

না, সাধারণত জাভা অ্যাপ্লিকেশনগুলি কেবল জেআরই উপস্থিত থাকলে চালিত হয়। সুতরাং, কেবল জেভিএমের আবর্জনা সংগ্রহের কার্যকারিতা প্রয়োজন! @ লিওলিও
এএম_আই_হেল্পফুল

18

এটি প্রোগ্রামের দ্বারা আর ব্যবহার করা হচ্ছে না এমন অবজেক্টগুলিকে বরাদ্দ করা মেমরিকে মুক্তি দেয় - সুতরাং "আবর্জনা" নাম রাখুন। উদাহরণ স্বরূপ:

public static Object otherMethod(Object obj) {
    return new Object();
}

public static void main(String[] args) {
    Object myObj = new Object();
    myObj = otherMethod(myObj);
    // ... more code ...  
}

আমি জানি এটি অত্যন্ত স্বীকৃত, তবে এখানে আপনি আসলটিকে কল otherMethod()করার পরে Objectতৈরি করা যায় না - এবং এটি "আবর্জনা" যা আবর্জনা সংগ্রহ করে।

জাভা জিসি স্বয়ংক্রিয়ভাবে রান, কিন্তু আপনি এটি দিয়ে স্পষ্টভাবে কল করতে পারেন System.gc()এবং চেষ্টা একটি প্রধান গার্বেজ কালেকশন বাধ্য। যেমন পাস্কেল থিভেন্ট উল্লেখ করেছেন, আপনার সত্যিই এটি করা উচিত নয় এবং এটি ভালের চেয়ে আরও বেশি ক্ষতি করতে পারে ( এই প্রশ্নটি দেখুন )।

আরও তথ্যের জন্য, আবর্জনা সংগ্রহ এবং টিউনিং আবর্জনা সংগ্রহের উইকিপিডিয়া এন্ট্রি দেখুন (ওরাকল থেকে)


1
এএফাইক System.gc()জিসি চালাতে বাধ্য করে না।
Itay Karo

1
ভাল কোড উদাহরণের জন্য +1। নোট করুন যে myObjকলটি শুরুর আগে জিসির জন্য ধ্বংস হওয়া পুরোপুরি বৈধ otherMethod, কারণ myObjএই মুহুর্তে আর অ্যাক্সেসযোগ্য নয়।
বিলি ওনিল

@ ইটালি আমি বিশ্বাস করি এটি বাস্তবায়ন নির্দিষ্ট।
নাল ইউজারএক্সসেপশন

2
আমি বিশ্বাস করি যে কাউকে কল করা উচিত নয় System.gc(), জিসি থাকার পুরো বিষয়টি এটি করা উচিত নয় ।
পাস্কেল থিভেন্ট

পালানোর বিশ্লেষণ ( en.wikedia.org/wiki/Ecreen_analysis ) সহ, এটি সম্ভব যে জেভিএম এমনকি এই উদাহরণটিতে প্রথম স্থানটিতে বরাদ্দ নাও করতে পারে। সম্পূর্ণ অবজেক্টের সৃষ্টি (তত্ত্বীয়ভাবে) অপ্টিমাইজ করা যেতে পারে। অবশ্যই বাস্তবায়ন নির্ভরশীল।
মাইকেরা

15

কোনও বস্তু আবর্জনা সংগ্রহ বা জিসির জন্য যোগ্য হয়ে ওঠে যদি তা কোনও লাইভ থ্রেড থেকে বা কোনও স্থিতিক রেফারেন্সের মাধ্যমে না পারা যায়।

অন্য কথায়, আপনি বলতে পারেন যে কোনও বিষয় আবর্জনা সংগ্রহের জন্য যোগ্য হয়ে ওঠে যদি এর সমস্ত উল্লেখগুলি শূন্য থাকে। চক্রীয় নির্ভরতাগুলি রেফারেন্স হিসাবে গণনা করা হয় না সুতরাং যদি বস্তুর A এর সাথে অবজেক্ট B এর একটি রেফারেন্স থাকে এবং অবজেক্ট B এর অবজেক্ট এ এর ​​একটি রেফারেন্স থাকে এবং তাদের অন্য কোনও লাইভ রেফারেন্স না থাকে তবে অবজেক্টস এ এবং বি উভয়ই আবর্জনা সংগ্রহের জন্য যোগ্য হবে।


আবর্জনা সংগ্রহের জন্য গাদা জেনারেশন -

জাভা অবজেক্ট তৈরি করা হয়েছে Heapএবং Heapজাভাতে আবর্জনা সংগ্রহের স্বার্থে তিনটি অংশ বা প্রজন্মের মধ্যে বিভক্ত করা হয়েছে, এগুলিকে ইয়ং (নতুন) প্রজন্ম, টেনার্ড (পুরাতন) জেনারেশন এবং হিমের পারম এরিয়া বলা হয়।

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

জাভা হিপের পারম স্পেস যেখানে জেভিএম ক্লাস এবং পদ্ধতি, স্ট্রিং পুল এবং ক্লাস স্তরের বিশদ সম্পর্কে মেটাডেটা সঞ্চয় করে।

আবর্জনা সংগ্রহের জন্য গাদা জেনারেশন

আরও তথ্যের জন্য এখানে উল্লেখ করুন: আবর্জনা সংগ্রহ


আপনি জেভিএমকে জঞ্জাল সংগ্রহ পরিচালনা করতে বাধ্য করতে পারবেন না যদিও আপনি কোনও পদ্ধতি System.gc()বা Runtime.gc()পদ্ধতি ব্যবহার করে অনুরোধ করতে পারেন ।

Java.lang.System এ

public static void gc() {
    Runtime.getRuntime().gc();  
}

জাভা.লং.রুনটাইমে

public native void gc();  // note native  method

মার্ক এবং সুইপ অ্যালগরিদম -

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

উপরোক্ত ক্রিয়াকলাপ দুটি পর্যায়ক্রমে মার্ক এবং সুইপ অ্যালগরিদম সম্পাদন করেছেন:

  1. ফেজ চিহ্নিত করুন
  2. সুইপ ফেজ

আরও বিশদের জন্য এখানে পড়ুন - মার্ক এবং সুইপ অ্যালগরিদম


6

আবর্জনা সংগ্রহকারী সূচিত করে যে প্রোগ্রামগুলির দ্বারা আর প্রয়োজনীয় জিনিসগুলি "আবর্জনা" নয় এবং ফেলে দেওয়া যেতে পারে।


6

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


@ কোয়ান্টামসুপ আপনি কি এ সম্পর্কে সম্ভাবনাবদ্ধ? আমি বিশ্বাস করি যে এক ধরণের আবর্জনা সংগ্রহ (আরও ব্যয়বহুল) কেবল তখনই ঘটে যখন গাদা পূরণ হয়।
পাবলো ফার্নান্দেজ

2
@ কোয়ান্টামসপ - এটি জেআরই-র জিসি বাস্তবায়নের উপর নির্ভর করে। অনেক ক্ষেত্রে, জিসি নিয়মিত চালায় না not পরিবর্তে, এটি চালিত হয় যখন আপনার অ্যাপ্লিকেশন কোনও বস্তু বরাদ্দ করতে অক্ষম হয় কারণ গাদা পূর্ণ। সাম্প্রতিক হটস্পট জেভিএমগুলিতে একটি সমান্তরাল জিসি অন্তর্ভুক্ত থাকে তবে এটি ডিফল্টরূপে সক্ষম হয় না।
স্টিফেন সি

এই উত্তরটি প্রক্রিয়াটিতে খুব বেশি কেন্দ্রীভূত হয়। প্রশ্নটি ছিল "আবর্জনা সংগ্রহকারী কী", "আবর্জনা সংগ্রহকারী কীভাবে কাজ করে না"
বিলি ওনিল

@ কোয়ান্টাম: আপনার -১ টি নিরপেক্ষ করেছে, কারণ: শিখছে, যা এই পৃষ্ঠার জন্য, তাই না? শেখার জন্য আপনার ভুল করা দরকার। ভুলের শাস্তি মানুষকে শেখায় না। আশা করি, আপনি এই বিষয়টিতে একমত হতে পারেন। এবং সম্ভবত আপনি এখানে একটি ভুল করেছেন।
এরিকবওয়ার্ক

1
@ এরিকবি: এই যুক্তি দিয়ে কখনই কোনও ডাউনভোট হবে না। তুলনামূলকভাবে দুর্বল উত্তরের জন্য ডাউনভোটগুলি প্রয়োজনীয়। ওপি স্পষ্টতই একজন শিক্ষানবিস এবং জিসির নির্দিষ্ট অভ্যন্তরীণ কাজগুলি জিজ্ঞাসা করা প্রশ্নের পক্ষে সহজ নয়। যেহেতু এই উত্তরটি জিজ্ঞাসিত প্রশ্নের উত্তর দেয় না (এটি অন্যটির উত্তর দেয়), ডাউনভোটগুলি পুরোপুরি ন্যায়সঙ্গত।
বিলি ওনিল

3

আবর্জনা সংগ্রহকারী আপনার কম্পিউটারকে অসীম মেমরির সাথে একটি কম্পিউটার অনুকরণ করার অনুমতি দেয়। বাকিটি কেবল প্রক্রিয়া is

এটি যখন আপনার কোড থেকে মেমরির অংশগুলি আর অ্যাক্সেসযোগ্য না হয় এবং এটি খণ্ডগুলি ফ্রি স্টোরে ফিরিয়ে দিয়ে তা সনাক্ত করে।

সম্পাদনা: হ্যাঁ, লিঙ্কটি সি # এর জন্য, তবে সি # এবং জাভা এক্ষেত্রে অভিন্ন।


আছে: আসলে জাভা এবং C # এর জিসি মধ্যে পার্থক্য সম্পর্কে তাই একটি প্রশ্ন stackoverflow.com/questions/492703/c-vs-java-garbage-collector
NullUserException

3

অনেকে মনে করেন আবর্জনা সংগ্রহ মৃত বস্তু সংগ্রহ করে এবং তা বাতিল করে দেয়।
বাস্তবে জাভা আবর্জনা সংগ্রহ বিপরীতে করছে! লাইভ অবজেক্টগুলি ট্র্যাক করা হয় এবং সমস্ত কিছু আবর্জনা নির্ধারিত হয়।

যখন কোনও বস্তু আর ব্যবহার করা হয় না, আবর্জনা সংগ্রহকারী অন্তর্নিহিত মেমরিটিকে পুনরায় দাবি করে এবং ভবিষ্যতের বস্তু বরাদ্দের জন্য এটি পুনরায় ব্যবহার করে। এর অর্থ কোনও অপসারণ মুছে ফেলা হয় না এবং অপারেটিং সিস্টেমে কোনও মেমরি ফেরত দেওয়া হয় না। কোন বস্তুগুলি আর ব্যবহারযোগ্য নয় তা নির্ধারণ করার জন্য, JVM মাঝেমধ্যে এমনটি চালায় যা খুব উপযুক্তভাবে একটি মার্ক-অ্যান্ড সুইপ অ্যালগরিদম বলে is

আরও বিশদ তথ্যের জন্য এটি পরীক্ষা করুন: http://javabook.compuware.com


1

এটিকে সর্বাধিক সহজ পদক্ষেপে রাখার জন্য যা এমনকি কোনও প্রোগ্রামার অ-প্রোগ্রামার বুঝতে পারে, যখন কোনও প্রোগ্রাম ডেটা প্রসেস করে তখন সেই ডেটার জন্য মধ্যবর্তী ডেটা এবং স্টোরেজ স্পেস (ভেরিয়েবল, অ্যারে, নির্দিষ্ট অবজেক্ট মেটাডেটা ইত্যাদি) তৈরি করে।

যখন এই বস্তুগুলি ফাংশন জুড়ে বা একটি নির্দিষ্ট আকারের উপরে অ্যাক্সেস করা হয়, তখন সেগুলি কেন্দ্রীয় স্তূপ থেকে বরাদ্দ করা হয়। তারপরে যখন তাদের দীর্ঘ প্রয়োজন হয় না, তখন তাদের পরিষ্কার করা দরকার।

এটি কীভাবে কাজ করে সে সম্পর্কে অনলাইনে খুব ভাল নিবন্ধ রয়েছে, তাই আমি কেবল খুব প্রাথমিক সংজ্ঞাটি কভার করব।

জিসি মূলত ফাংশন যা এই ক্লিনআপটি করে। এটি করার জন্য সারণী এন্ট্রিগুলি সাফ করা হয় যা মেমরির অনুলিপি এবং সংযোগের চেয়ে কোনও সক্রিয় অবজেক্ট দ্বারা কার্যকরভাবে অবজেক্টগুলি মুছে ফেলা যায় না reference এটি এর চেয়ে কিছুটা জটিল, তবে আপনি ধারণাটি পাবেন।

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


0

জাভাতে আবর্জনা সংগ্রহ (এবং পাশাপাশি অন্যান্য ভাষা / প্ল্যাটফর্মগুলি) জাভা রান-টাইম এনভায়রনমেন্ট (জেআরই) এর জন্য জাভা অবজেক্টগুলি থেকে আর মেমরির পুনঃব্যবহারের উপায় নেই যা আর প্রয়োজন হয় না। সরলতার সাথে, যখন জেআরই শুরুতে শুরু হয় তখন এটি অপারেটিং সিস্টেমকে (ও / এস) একটি নির্দিষ্ট পরিমাণের মেমরির জন্য জিজ্ঞাসা করে। জেআরই আপনার অ্যাপ্লিকেশন (গুলি) চালায় এটি সেই স্মৃতিটি ব্যবহার করে। যখন আপনার অ্যাপ্লিকেশনটি সেই মেমরিটি ব্যবহার করে করা হয়, তখন জেআরই এর "আবর্জনা সংগ্রাহক" উপস্থিত হয় এবং আপনার বিদ্যমান অ্যাপ্লিকেশন (গুলি) এর বিভিন্ন অংশ দ্বারা ব্যবহারের জন্য সেই স্মৃতিটিকে পুনরায় দাবি করে। জেআরই'র "আবর্জনা সংগ্রাহক" একটি পটভূমি কাজ যা সর্বদা চলমান থাকে এবং যখন সিস্টেমটি আবর্জনা চালানোর জন্য অলস থাকে তখন সময় বাছাই করার চেষ্টা করে।

একটি বাস্তব বিশ্বের উপমা হ'ল আবর্জনা পুরুষরা যারা আপনার বাড়িতে আসে এবং আপনার পুনর্ব্যবহারযোগ্য আবর্জনা বাছাই করে ... অবশেষে, এটি নিজের এবং / বা অন্যান্য ব্যক্তি দ্বারা এটি অন্য উপায়ে পুনরায় ব্যবহার করা হয়।


0

আবর্জনা সংগ্রহকারীকে রেফারেন্স গণনা পরিচালক হিসাবে দেখা যেতে পারে। যদি কোনও অবজেক্ট তৈরি করা হয় এবং এর রেফারেন্সটি একটি ভেরিয়েবলে সঞ্চিত থাকে তবে এর রেফারেন্স গণনাটি এক দ্বারা বাড়ানো হবে। কার্যকর করার সময় যদি সেই চলকটি NULL সহ নির্ধারিত হয়। এই অবজেক্টের জন্য রেফারেন্স গণনা হ্রাস পেয়েছে। সুতরাং অবজেক্টের জন্য বর্তমান রেফারেন্স গণনা 0 হয় G এখন যখন আবর্জনা সংগ্রহকারী কার্যকর করা হয় তখন এটি রেফারেন্স গণনা 0 সহ বস্তুগুলির জন্য পরীক্ষা করে এবং এটিতে বরাদ্দকৃত সংস্থানগুলি মুক্ত করে।

আবর্জনা সংগ্রাহকের প্রার্থনা আবর্জনা সংগ্রহের নীতিগুলি দ্বারা নিয়ন্ত্রিত হয়।

আপনি এখানে কিছু তথ্য পেতে পারেন। http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html


1
রেফারেন্স গণনা জিসি বাস্তবায়নের এক স্বল্প উপায়। আমি মনে করি না কোনও বড় জেভিএম বাস্তবায়ন এটি ব্যবহার করে।
নাল ইউজারএক্সসেপশন

0

আবর্জনা সংগ্রহকারী jvm এর একটি উপাদান।

সিপিইউ বিনামূল্যে পেলে এটি আবর্জনা সংগ্রহ করতে ব্যবহৃত হয়।

এখানে আবর্জনা অর্থ অব্যবহৃত জিনিসগুলি এটি মূল প্রোগ্রামের ব্যাকগ্রাউন্ডে চলে

মূল প্রোগ্রামের অবস্থা পর্যবেক্ষণ করা।


0

স্বয়ংক্রিয় আবর্জনা সংগ্রহ হিপ মেমরির দিকে তাকানোর প্রক্রিয়া, কোনটি অবজেক্ট ব্যবহার করছে এবং কোনটি নয় এবং এটি অব্যবহৃত অবজেক্টগুলি মুছে ফেলা হয় তা চিহ্নিত করে। ব্যবহারের অবজেক্ট, বা রেফারেন্স করা অবজেক্টের অর্থ হ'ল আপনার প্রোগ্রামের কিছু অংশ এখনও সেই অবজেক্টের জন্য একটি পয়েন্টার বজায় রাখে। একটি অব্যবহৃত অবজেক্ট বা অযৌক্তিক অবজেক্ট, আপনার প্রোগ্রামের কোনও অংশ দ্বারা আর রেফারেন্স করা হয় না। সুতরাং একটি অবাস্তব বস্তুর দ্বারা ব্যবহৃত স্মৃতি পুনরুদ্ধার করা যায়।

সি এর মতো একটি প্রোগ্রামিং ল্যাঙ্গুয়েজে মেমরি বরাদ্দ করা এবং হ্রাস করা একটি ম্যানুয়াল প্রক্রিয়া। জাভাতে, মেমরি বিলোপ করার প্রক্রিয়াটি আবর্জনা সংগ্রহকারী দ্বারা স্বয়ংক্রিয়ভাবে পরিচালিত হয়। আরও ভাল বোঝার জন্য দয়া করে লিঙ্কটি পরীক্ষা করুন। http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html


0

আবর্জনা সংগ্রহ আপনার প্রোগ্রামে আর পৌঁছনীয় না এমন বস্তুগুলি মুছে ফেলে গাদাতে স্বয়ংক্রিয়ভাবে মেমরি মুক্ত করার প্রক্রিয়াটিকে বোঝায়। হিপ একটি মেমরি যা ফ্রি স্টোর হিসাবে উল্লেখ করা হয়, আপনার জাভা অ্যাপ্লিকেশনটিতে বরাদ্দযুক্ত অব্যবহৃত মেমরির একটি বৃহত পুলকে উপস্থাপন করে।


1
উদ্ধৃত নয় এমন পাঠ্যের জন্য উদ্ধৃতি বিন্যাস ব্যবহার করবেন না এবং যদি এটি উদ্ধৃত হয় তবে আপনার উত্সটি উদ্ধৃত করতে হবে।
Lorne এর মার্কুইস

0

আবর্জনা সংগ্রহের মূল নীতিগুলি হ'ল এমন প্রোগ্রামে ডেটা অবজেক্টগুলি সন্ধান করা যা ভবিষ্যতে অ্যাক্সেস করা যায় না এবং সেই জিনিসগুলির দ্বারা ব্যবহৃত সংস্থানগুলি পুনরায় দাবি করা। https://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29

সুবিধাদি

1) বাগগুলি থেকে সংরক্ষণ করা হয়, যখন মেমরির কোনও অংশটি মুক্ত হওয়ার সময় ঘটে যখন সেখানে এখনও সেখানে পয়েন্টার রয়েছে এবং poin পয়েন্টারের একটি অবজ্ঞাপূর্ণ হয়। https://en.wikipedia.org/wiki/Dangling_pointer

2) ডাবল ফ্রি বাগ, যা প্রোগ্রামটি ইতিমধ্যে মুক্ত করা মেমরির একটি অঞ্চল মুক্ত করার চেষ্টা করে এবং সম্ভবত ইতিমধ্যে আবার বরাদ্দ করা হয় occur

৩) নির্দিষ্ট ধরণের মেমরি ফাঁস থেকে রক্ষা করে, যাতে কোনও প্রোগ্রাম অ্যাক্সেসযোগ্য হয়ে ওঠে এমন বস্তুর দ্বারা দখল করা মেমরি মুক্ত করতে ব্যর্থ হয়, যা স্মৃতিশক্তি ক্লান্ত করতে পারে।

অসুবিধেও

1) অতিরিক্ত সংস্থান গ্রহণ, পারফরম্যান্স প্রভাব, প্রোগ্রাম কার্যকরকরণের সম্ভাব্য স্টল এবং ম্যানুয়াল রিসোর্স ম্যানেজমেন্টের সাথে অসঙ্গতি। আবর্জনা সংগ্রহ কোন মেমোরিটি মুক্ত করবেন তা নির্ধারণে কম্পিউটিং সংস্থান গ্রহণ করে, যদিও প্রোগ্রামার ইতিমধ্যে এই তথ্যটি জেনে থাকতে পারে।

2) ময়লা আবর্জনা আসলে সংগ্রহ করা মুহুর্তটি অনাকাঙ্ক্ষিত হতে পারে, ফলস্বরূপ স্টলগুলি (শিফট / ফ্রি মেমরি স্থানান্তরিত করতে বিরতি দেওয়া) একটি অধিবেশন জুড়ে ছড়িয়ে ছিটিয়ে থাকে। অপ্রত্যাশিত স্টলগুলি রিয়েল-টাইম পরিবেশে, লেনদেন প্রক্রিয়াজাতকরণে বা ইন্টারেক্টিভ প্রোগ্রামগুলিতে অগ্রহণযোগ্য হতে পারে।


ওরাকল টিউটোরিয়াল http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

আবর্জনা সংগ্রহ হ'ল প্রক্রিয়াটি হ'ল কোন অবজেক্টগুলি ব্যবহার করছে এবং কোনটি নয় এবং এটি অব্যবহৃত অবজেক্টগুলি মুছে ফেলা হয়।

সি, সি ++ এর মতো প্রোগ্রামিং ভাষায় মেমরি বরাদ্দকরণ এবং মুক্ত করা একটি ম্যানুয়াল প্রক্রিয়া।

int * array = new int[size];
processArray(array); //do some work.
delete array; //Free memory

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

পদক্ষেপ 2 এ। সাধারণ মোছা নিখরচায় অবজেক্টগুলি সরিয়ে রেফারেন্সযুক্ত বস্তু এবং পয়েন্টারগুলিকে খালি জায়গাতে ফেলে দেয়।

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

যেমন আগেই বলা হয়েছে, একটি জেভিএম-তে সমস্ত বস্তু চিহ্নিত এবং সংযোগ করা অদক্ষ। আরও বেশি সংখ্যক অবজেক্ট বরাদ্দ করার সাথে সাথে অবজেক্টগুলির তালিকা বৃদ্ধি পায় এবং বৃদ্ধি পায় যার ফলে আবর্জনা সংগ্রহের সময় দীর্ঘতর হয় to

এই টিউটোরিয়াল পড়া চালিয়ে যান, এবং জিসি কীভাবে এই চ্যালেঞ্জ গ্রহণ করে তা আপনি জানবেন।

সংক্ষেপে বলতে গেলে, স্তূপের তিনটি অঞ্চল রয়েছে, স্বল্পজীবী বস্তুর জন্য ইয়ংজেনারেশন , দীর্ঘকালীন অবজেক্টের জন্য ওল্ডজেনারেশন এবং অ্যাপ্লিকেশন জীবনের সময় বেঁচে থাকা অবজেক্টগুলির জন্য স্থায়ী জেনারেশন , উদাহরণস্বরূপ, শ্রেণী, গ্রন্থাগার।


0

যেহেতু নতুন অপারেটর দ্বারা বস্তুগুলি গতিশীলভাবে বরাদ্দ করা হয় , আপনি জিজ্ঞাসা করতে পারেন কীভাবে এই বিষয়গুলি ধ্বংস হয় এবং কীভাবে ব্যস্ত স্মৃতি মুক্ত হয়। অন্যান্য ভাষায় যেমন সি ++ এ, মুছে ফেলা অপারেটর দ্বারা আপনাকে ম্যানুয়ালি বরাদ্দ হওয়া অবজেক্টগুলি গতিশীলভাবে মুক্ত করতে হবে। জাভা একটি পৃথক পদ্ধতির আছে; এটি স্বয়ংক্রিয়ভাবে অবক্ষয়কে পরিচালনা করে les কৌশলটি আবর্জনা সংগ্রহ হিসাবে পরিচিত ।

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


-2

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.