আফাইক, জেভিএম স্পেসিফিকেশন (ইংরেজী ভাষায় লিখিত) নির্দিষ্টভাবে কখন কোনও বস্তু (বা কোনও মান) মুছতে হবে তা উল্লেখ করে না এবং এটি প্রয়োগে (একইভাবে আর 5 আরএসের জন্য ) রেখে দেয়) এটি কোনওভাবে কোনও আবর্জনা সংগ্রাহকের প্রয়োজন বা পরামর্শ দেয় তবে বিশদটি বাস্তবায়নে ফেলে। এবং একইভাবে জাভা স্পেসিফিকেশন জন্য।
মনে রাখবেন যে প্রোগ্রামিং ভাষা হয় উল্লেখ (এর সিনট্যাক্স , শব্দার্থবিদ্যা , না সফটওয়্যার বাস্তবায়নের, ইত্যাদি ...)। জাভা (বা এর জেভিএম) এর মতো ভাষার অনেকগুলি বাস্তবায়ন রয়েছে। এর স্পেসিফিকেশন প্রকাশিত , ডাউনলোডযোগ্য (যাতে আপনি এটি অধ্যয়ন করতে পারেন) এবং ইংরেজিতে লেখা। V2.5.3 জেভিএম বৈশিষ্ট্যের গাদা একটি আবর্জনা সংগ্রহকারী সম্পর্কে উল্লেখ করেছেন:
বস্তুগুলির জন্য গাদা স্টোরেজটি একটি স্বয়ংক্রিয় স্টোরেজ ম্যানেজমেন্ট সিস্টেম (যা আবর্জনা সংগ্রহকারী হিসাবে পরিচিত) দ্বারা পুনরুদ্ধার করা হয়; অবজেক্টস কখনই স্পষ্টভাবে বিলোপযুক্ত হয় না। জাভা ভার্চুয়াল মেশিন কোনও বিশেষ ধরণের স্বয়ংক্রিয় স্টোরেজ ম্যানেজমেন্ট সিস্টেম গ্রহণ করে না
(জোর আমার; বিটিডব্লিউ চূড়ান্তকরণ জাভা স্পেসের 12.6 ডলারে উল্লেখ করা হয়েছে , এবং একটি মেমরি মডেল জাভা স্পেসের 17.4 ডলারে রয়েছে)
সুতরাং (জাভাতে) কখনই কোনও বিষয় মুছে ফেলা হবে সেদিকে আপনার নজর দেওয়া উচিত নয় এবং এটি কোড না হয়ে থাকলে আপনি কোড করতে পারেন (এমন কোনও বিমূর্তে যুক্তি দিয়ে যেখানে আপনি তা উপেক্ষা করছেন)। অবশ্যই আপনাকে মেমরির খরচ এবং জীবন্ত সামগ্রীর সেট সম্পর্কে যত্ন নেওয়া দরকার যা একটি আলাদা প্রশ্ন। বেশ কয়েকটি সহজ ক্ষেত্রে ("হ্যালো ওয়ার্ল্ড" প্রোগ্রামের কথা ভাবেন) আপনি নিজেকে বোঝানোর জন্য প্রমাণ করতে সক্ষম হলেন- বরাদ্দ হওয়া মেমরিটি বরং ছোট (উদাহরণস্বরূপ গিগাবাইটের চেয়ে কম), এবং তারপরে আপনার মোটেই যত্ন নেই স্বতন্ত্র জিনিস মুছে ফেলা । আরও কিছু ক্ষেত্রে, আপনি নিজেকে বোঝাতে পারেন যে জীবিত জিনিস(বা পৌঁছনোযোগ্য, যা জীবিতদের সম্পর্কে যুক্তিযুক্ত সুপারসিটার) কখনও যুক্তিসঙ্গত সীমা অতিক্রম করে না (এবং তারপরে আপনি জিসির উপর নির্ভর করেন, তবে কীভাবে এবং কখন আবর্জনা সংগ্রহ ঘটে তা আপনার যত্ন নেই)। স্থান জটিলতা সম্পর্কে পড়ুন ।
আমি অনুমান করি যে বেশ কয়েকটি জেভিএম বাস্তবায়নে হ্যালো ওয়ার্ল্ডের মতো একটি স্বল্পস্থায়ী জাভা প্রোগ্রাম চালানোয় আবর্জনা সংগ্রহকারী মোটেও ট্রিগার হয় না এবং কোনও মুছে ফেলা হয় না। এএফআইইউ, এমন আচরণ অসংখ্য জাভা চশমা অনুসারে কাজ করে।
সর্বাধিক জেভিএম বাস্তবায়নের ব্যবহার উত্পাদনশীল অনুলিপি কৌশল (অধিকাংশ জাভা অবজেক্টের জন্য অন্তত ব্যবহার করছেন না সেই চূড়ান্ত বা দুর্বল রেফারেন্স ; এবং চূড়ান্ত স্বল্প সময়ের মধ্যে ঘটতে নিশ্চিত করা হয় না এবং স্থগিত করা যায়নি, তাই শুধু একটি সহায়ক বৈশিষ্ট্য যে আপনার কোড উচিত না অনেকটা নির্ভর করে) যার মধ্যে একটি পৃথক অবজেক্ট মুছে ফেলার ধারণাটি কোনও অর্থবোধ করে না (যেহেতু মেমরির একটি বৃহত ব্লক - অনেকগুলি অবজেক্টের জন্য মেমরি অঞ্চলকে নিয়ন্ত্রণ করে- সম্ভবত একাধিক মেগাবাইট একবারে মুক্তি পায়)।
যদি জেভিএম স্পেসিফিকেশনটি প্রতিটি বস্তুকে যত তাড়াতাড়ি সম্ভব মুছে ফেলা দরকার হয় (বা কেবল অবজেক্ট মোছার ক্ষেত্রে আরও বাধা আরোপ করা হয়), দক্ষ জেনারেল জিসি কৌশলগুলি নিষিদ্ধ করা হবে, এবং জাভা এবং জেভিএম এর ডিজাইনাররা এড়ানোতে বুদ্ধিমান ছিলেন।
বিটিডাব্লু, এটি সম্ভব হতে পারে যে একটি নিখুঁত জেভিএম যা কখনই বস্তুগুলি মুছে না এবং মেমরি ছেড়ে দেয় না এমন চশমা অনুসারে চলতে পারে (চিঠিটি নয়, স্পিরিট নয়) এবং অনুশীলনে হ্যালো ওয়ার্ল্ড জিনিস চালাতে সক্ষম হবে (লক্ষ্য করুন যে বেশিরভাগ) ক্ষুদ্র ও স্বল্পস্থায়ী জাভা প্রোগ্রামগুলি সম্ভবত কয়েক গিগাবাইট মেমরির বেশি বরাদ্দ করে না)। অবশ্যই এ জাতীয় জেভিএম উল্লেখ করার মতো নয় এবং এটি কেবল একটি খেলনা জিনিস (যেমন সি এর জন্য এই বাস্তবায়নটি malloc
)। আরও জন্য অ্যাপসিলন নোপ জিসি দেখুন। বাস্তব-জীবন জেভিএমগুলি সফটওয়্যারগুলির খুব জটিল টুকরো এবং বিভিন্ন আবর্জনা সংগ্রহের কৌশলগুলি মিশ্রিত করে।
এছাড়াও, জাভা জেভিএমের মতো নয় এবং আপনার জাভা প্রয়োগগুলি জেভিএম ছাড়াই চলমান রয়েছে (যেমন, আগামি সময়ের জাভা সংকলক, অ্যান্ড্রয়েড রানটাইম )। ইন কিছু ক্ষেত্রে (বেশিরভাগই একাডেমিক বেশী), আপনি কল্পনা করে একটি জাভা প্রোগ্রাম বরাদ্দ বা রানটাইম (যেমন এ মুছতে না, কারণ (তাই "সংকলন-টাইম আবর্জনা সংগ্রহ" কৌশল বলা হয়) পারে সর্বোচ্চকরন কম্পাইলার যথেষ্ট চালাক একমাত্র ব্যবহার করা হয়েছে কল স্ট্যাক এবং স্বয়ংক্রিয় ভেরিয়েবল )।
জাভা অবজেক্টগুলি আর উল্লেখ না করে কেন মুছে ফেলা হয় না?
কারণ জাভা এবং জেভিএম চশমাগুলির প্রয়োজন নেই।
আরও (এবং জেভিএম স্পেক ) জন্য জিসি হ্যান্ডবুকটি পড়ুন । লক্ষ্য করুন যে কোনও বস্তুর জন্য জীবিত (বা ভবিষ্যতের গণনার পক্ষে কার্যকর) পুরোপুরি প্রোগ্রাম (অ-মডুলার) সম্পত্তি।
উদ্দেশ্য সি একটি উপযোগী রেফারেন্স কাউন্টিং পদ্ধতির মেমরি ব্যবস্থাপনা । এবং এরও অসুবিধা রয়েছে (উদাহরণস্বরূপ অবজেক্টিভ সি প্রোগ্রামারকে দুর্বল রেফারেন্সগুলি ব্যাখ্যা করে বিজ্ঞপ্তিযুক্ত রেফারেন্সগুলি যত্নবান করতে হবে , তবে একটি জেভিএম জাভা প্রোগ্রামারারের দৃষ্টি আকর্ষণ না করে বৃত্তাকার উল্লেখগুলি কার্যত দক্ষতার সাথে পরিচালনা করে)।
নেই No Silver Bullet এ প্রোগ্রামিং এবং প্রোগ্রামিং ভাষা নকশা (সচেতন হতে স্থগিত সমস্যা ; একটি দরকারী জীবন্ত বস্তুর হচ্ছে undecidable সাধারণভাবে)।
আপনি এস আই সি পি , প্রোগ্রামিং ল্যাঙ্গুয়েজ প্রাগম্যাটিক্স , ড্রাগন বুক , ছোট টুকরো এবং অপারেটিং সিস্টেমে লিসপ : তিনটি সহজ টুকরো পড়তে পারেন । এগুলি জাভা সম্পর্কে নয়, তবে তারা আপনার মন খুলে দেবে এবং জেভিএমকে কী করা উচিত এবং এটি কীভাবে আপনার কম্পিউটারে ব্যবহারিকভাবে (অন্যান্য টুকরা সহ) কাজ করতে পারে তা বুঝতে সহায়তা করা উচিত। আপনি বিদ্যমান ওপেন সোর্স জেভিএম বাস্তবায়নের জটিল উত্স কোড অধ্যয়ন করতে অনেক মাস (বা বেশ কয়েক বছর) ব্যয় করতে পারেন (যেমন ওপেনজেডিকে , যার কয়েক মিলিয়ন উত্স কোড লাইন রয়েছে)।