জাভা বিকাশকারীদের আবর্জনা সংগ্রহের অ্যালগরিদম সম্পর্কে জানা উচিত? [বন্ধ]


11

আমাকে সম্প্রতি কোনও সাক্ষাত্কারে জিজ্ঞাসা করা হয়েছে যদি আমি কোনও আবর্জনা সংগ্রহের অ্যালগরিদম সম্পর্কে জানি।

আবর্জনা সংগ্রহ কী তা আমি জানতাম তবে আমি কখনই আবর্জনা সংগ্রহের অ্যালগরিদম সম্পর্কে শেখার বিষয়ে সত্যই চিন্তা করিনি কারণ একজন বিকাশকারী হিসাবে আমাকে কখনই এটি নিয়ে মাথা ঘামাতে হয়নি এবং আবর্জনা সংগ্রাহক আমার পক্ষে সমস্ত কঠোর পরিশ্রম করেন।

আপনি কি ভাবেন যে জাভা বিকাশকারীদের আবর্জনা সংগ্রহকারী অ্যালগরিদম সম্পর্কে জানা উচিত? যদি হ্যাঁ আপনি আমাকে বলতে পারেন আমার কোনটি সম্পর্কে খোঁজ করা উচিত?



1
হ্যাঁ তারা উচিত. অন্যথায় তারা সফ্টওয়্যার লেখার ঝুঁকি চালায় যা ভারী বোঝার নিচে।
কোয়ান্ট_দেব

উত্তর:


9

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

যদি আপনি এই অ্যালগরিদমে আগ্রহী হন তবে দয়া করে আমার এই পোস্টটি দেখুন: কম বিরতি জিসির পিছনে অ্যালগরিদমগুলি কী কী?


7

আবর্জনা সংগ্রহ একটি আকর্ষণীয়, তুচ্ছ কম্পিউটার কম্পিউটার বিজ্ঞান সমস্যা।

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

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

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


2
বেসিকগুলি বোঝার সাথে আমি একমত হব (জিনিসগুলি বোঝার ফলে আপনি আরও ভাল কোডার হয়ে উঠবেন)। সমস্যাটি হ'ল যদি আপনি জটিল use that informationকোডটি জানেন এবং তারপরে আপনার কোডটি ডিজাইন করেন। এটি জিসি উন্নত হওয়ায় এবং জিসি কীভাবে আর ধরে রাখে না এবং কোডটি অনুকূল নয় (এবং সবচেয়ে খারাপ ক্ষেত্রে জিসিকে বাধা দিতে পারে) সে সম্পর্কে আপনার অনুমানগুলি সমস্যার কারণ হতে পারে। জেনে রাখা ভাল, তবে আপনার নির্দিষ্ট কোডটি নির্দিষ্ট প্রয়োগের কথা মাথায় না রেখে সেরা কোডগুলি ব্যবহার করে আপনার কোডটি ডিজাইন করা উচিত; সংকলক এবং জিসি সর্বদা উন্নতি করছে এবং ম্যাক্রো অপ্টিমাইজেশানগুলি শেষ পর্যন্ত কেবল কার্যকর হতে ব্যর্থ হবে।
মার্টিন ইয়র্ক

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

4

আবর্জনা সংগ্রহকারী (বা কোনও অ্যালগরিদম / প্রযুক্তি) কীভাবে কাজ করে তা কারও জানা উচিত কেন আমি দুটি কারণ দেখছি see এগুলি এখানে:
১. আপনি যে কোডটি লিখছেন তার নীচে কী চলছে সে সম্পর্কে আপনি আরও ভাল জ্ঞান পান। এটি প্রায়শই আপনাকে আরও কার্যকর কোড লিখতে সহায়তা করতে পারে, যা আরও ভাল পারফরম্যান্সের গ্যারান্টি দেয়। কিছু ক্ষেত্রে এটি অত্যাবশ্যক হতে পারে। (আমি একটি অপ্রীতিকর অভিজ্ঞতা যখন GWT ব্রাউজারের আবর্জনা সংগ্রাহক উপর নির্ভর ছিল করেছি, এবং আমরা Chrome এর সঙ্গে বিপুল মেমরি লিক ছিল। তাই আমরা তা দেখতে ঠিক লিক সৃষ্ট ছিল।)
2. এই ধরনের আলগোরিদিম সবসময় (অথবা প্রায় সবসময় হয়, না, সর্বদা) স্মার্ট, দক্ষ, দক্ষ এবং অভিজ্ঞ বিকাশকারীদের প্রতি বিশ্বস্ত। সুতরাং তাদের পদ্ধতির অধ্যয়ন করা খুব দরকারী হতে পারে।

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


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

@ লোকি আস্তারি, নির্দিষ্ট প্রয়োগের জন্য এটি বিপজ্জনক বলে ঠিকই বলেছেন। তবে, অন্যদিকে, এমন কিছু জিনিস রয়েছে যা পরিবর্তিত হয় না (উদাহরণস্বরূপ, দীর্ঘকাল, কমপক্ষে),
সুপারম

@ সুপারএম: প্রকৃতপক্ষে, মনোর জিসি মাইক্রোসফ্টের থেকে উল্লেখযোগ্যভাবে পৃথক, এবং আরও একটি সম্পূর্ণ আলাদা এর পরিবর্তে প্রক্রিয়াধীন রয়েছে।
জার্গ ডব্লু মিট্টাগ

@superM: না আমাকে জাভার একটি অভিব্যক্তি যে ধীর চেহারা: en.wikipedia.org/wiki/Java_version_history (সৌন্দর্য একটি নতুন প্যাচ বা আপডেট আছে মত বছরে একবার)। পরের বছর একটি নতুন মুক্তি সঙ্গে। এখন এর অর্থ এই নয় যে প্রতিবার জিসি আপডেট করা হবে তবে এটির সম্ভাব্যতা দেখায়।
মার্টিন ইয়র্ক

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

4

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


3

জাভা জন্য আবর্জনা সংগ্রহ দুটি কারণে কীভাবে কাজ করে সে সম্পর্কে আপনার কিছু জ্ঞান থাকতে হবে:

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

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

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


1

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

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

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