জাভা স্থির বরাদ্দ - গাদা, স্ট্যাক এবং স্থায়ী জেনারেশন


117

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

  1. ক্লাস (শ্রেণিবদ্ধরা বোঝাই) গাদা বিশেষ স্থানে যায়: স্থায়ী জেনারেশন
  2. শ্রেণীর সাথে সম্পর্কিত সমস্ত তথ্য যেমন শ্রেণীর নাম, শ্রেণীর সাথে সম্পর্কিত অবজেক্ট অ্যারে, জেভিএম দ্বারা ব্যবহৃত অভ্যন্তরীণ বস্তু (জাভা / ল্যাং / অবজেক্টের মতো) এবং অপ্টিমাইজেশনের তথ্য স্থায়ী জেনারেশন অঞ্চলে যায়।
  3. সমস্ত স্থিতিশীল সদস্য ভেরিয়েবলগুলি স্থায়ী জেনারেশন এলাকায় আবার রাখা হয়।
  4. অবজেক্টগুলি অন্যরকম গাদা: তরুণ প্রজন্ম
  5. প্রতি ক্লাসে প্রতিটি পদ্ধতির কেবলমাত্র একটি অনুলিপি থাকে, পদ্ধতিটি স্থির বা অ-স্থির হতে হবে। এই অনুলিপি স্থায়ী জেনারেশন এলাকায় রাখা হয়। অ স্থির পদ্ধতির জন্য, সমস্ত পরামিতি এবং স্থানীয় ভেরিয়েবলগুলি স্ট্যাকের উপরে চলে যায় - এবং যখনই এই পদ্ধতির একটি কংক্রিট প্রার্থনা হয়, আমরা এর সাথে যুক্ত একটি নতুন স্ট্যাক-ফ্রেম পাই। স্থির পদ্ধতির স্থানীয় ভেরিয়েবলগুলি কোথায় রয়েছে তা আমি নিশ্চিত নই। এগুলি কি স্থায়ী জেনারেশনের স্তূপে রয়েছে? বা কেবলমাত্র তাদের রেফারেন্স স্থায়ী জেনারেশন এলাকায় সংরক্ষণ করা হয়েছে এবং আসল অনুলিপি অন্য কোথাও (কোথায়?)
  6. আমিও নিশ্চিত নই যে পদ্ধতির রিটার্নের ধরণটি কোথায় সঞ্চয় হয়।
  7. যদি বস্তুগুলিকে (তরুণ প্রজন্মের) কোনও স্থিতিশীল সদস্য (স্থায়ী প্রজন্মের) ব্যবহারের প্রয়োজন হয়, তাদের স্থির সদস্যের একটি রেফারেন্স দেওয়া হয় এবং& পদ্ধতির রিটার্নের ধরণ ইত্যাদি সংরক্ষণের জন্য তাদের পর্যাপ্ত মেমরির স্থান দেওয়া হয়।

এর মধ্য দিয়ে যাওয়ার জন্য আপনাকে ধন্যবাদ!

উত্তর:


152

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

আপনি যদি নিজের উত্তরগুলির সুনির্দিষ্ট নিশ্চয়তা চান তবে আপনাকে সত্যই ওপেনজেডিকে উত্সকোডটি ডাউনলোড করতে হবে ... এবং উত্স কোডটি পড়ে এবং বুঝতে পেরে আপনার নিজের গবেষণা করা উচিত। এসও-তে প্রশ্ন জিজ্ঞাসা করা, বা এলোমেলো ওয়েব নিবন্ধগুলির মাধ্যমে ট্রলিং করা একটি উপযুক্ত একাডেমিক গবেষণা কৌশল নয়।

যে বলে ...

... আমার প্রশ্ন সূর্য নির্দিষ্ট।

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

নীচের উত্তরগুলি ওরাকল হটস্পট এবং ওপেনজেডিকে রিলিজগুলির ক্ষেত্রে এবং সম্ভবত বেশিরভাগ অন্যদের ক্ষেত্রেও প্রয়োগ হয় ... গ্রেয়ালভিএম সহ

1) ক্লাস (শ্রেণিবদ্ধরা বোঝাই) গাদা বিশেষ স্থানে চলে: স্থায়ী জেনারেশন in

জাভা 8 এর আগে, হ্যাঁ।

জাভা 8 হিসাবে, পার্মজেন স্থানটি মেটাস্পেসের সাথে প্রতিস্থাপন করা হয়েছে। লোডড এবং জেআইটি-সংকলিত ক্লাস এখন সেখানে যায়। PermGen আর নেই।

2) শ্রেণীর সাথে সম্পর্কিত সমস্ত তথ্য যেমন শ্রেণীর নাম, শ্রেণীর সাথে সম্পর্কিত অবজেক্ট অ্যারে, জেভিএম দ্বারা ব্যবহৃত অভ্যন্তরীণ বস্তু (জাভা / ল্যাং / অবজেক্টের মতো) এবং অপ্টিমাইজেশনের তথ্য স্থায়ী জেনারেশন অঞ্চলে যায়।

কম-বেশি, হ্যাঁ আমি নিশ্চিত নই যে আপনি some কয়েকটি বিষয় থেকে কী বোঝাতে চাইছেন। আমি অনুমান করছি যে "জেভিএম দ্বারা ব্যবহৃত অভ্যন্তরীণ বস্তু (যেমন জাভা / ল্যাং / অবজেক্ট)" মানে জেভিএম-অভ্যন্তরীণ শ্রেণীর বর্ণনাকারী।

3) সমস্ত স্থিতিশীল সদস্য ভেরিয়েবলগুলি স্থায়ী জেনারেশন এলাকায় আবার রাখা হয়।

ভেরিয়েবলগুলি হ্যাঁ। এই ভেরিয়েবলগুলি (সমস্ত জাভা ভেরিয়েবলের মতো) আদিম মান বা অবজেক্ট রেফারেন্স ধারণ করবে। যাইহোক, যখন স্ট্যাটিক সদস্য ভেরিয়েবল একটি ফ্রেম যে permgen গাদা বরাদ্দ রয়েছে, বস্তু / অ্যারে সেই ভেরিয়েবলের মধ্যে বরাদ্দ করা যেতে পারে দ্বারা উল্লেখ কোনো গাদা।

৪) অবজেক্টগুলি অন্যরকম apੇਰ হয়: তরুণ প্রজন্ম

অগত্যা। বড় অবজেক্টগুলি সরাসরি টেনারড প্রজন্মের মধ্যে বরাদ্দ করা যেতে পারে।

5) প্রতি ক্লাসে প্রতিটি পদ্ধতির কেবলমাত্র একটি অনুলিপি থাকে, পদ্ধতিটি স্থির বা অ-স্থির হতে হবে। এই অনুলিপি স্থায়ী জেনারেশন এলাকায় রাখা হয়।

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

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

হ্যাঁ.

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

নন-স্ট্যাটিক পদ্ধতিতে স্থানীয় ভেরিয়েবলগুলির মতো এগুলি স্ট্যাকের উপরে সংরক্ষণ করা হয়।

)) আমি নিশ্চিত নই যে পদ্ধতির রিটার্নের ধরণটি কোথায় সঞ্চয় হয়।

আপনি কি এটি বলতে পারেন মান একটি (অ-অকার্যকর) মেথড কল দ্বারা ফিরে তারপর এটা হয় স্ট্যাক বা মেশিন রেজিস্টারে ফিরিয়ে দেওয়া হয়। যদি এটি স্ট্যাকটিতে ফিরে আসে তবে এটি রিটার্নের ধরণের উপর নির্ভর করে 1 বা দুটি শব্দ নেয়।

)) যদি বস্তুগুলি (তরুণ প্রজন্মের) স্থির সদস্য (স্থায়ী প্রজন্মের) ব্যবহার করতে চায় তবে তাদেরকে স্থির সদস্যের একটি রেফারেন্স দেওয়া হয় এবং তাদের পদ্ধতিটি রিটার্নের ধরণ ইত্যাদি সংরক্ষণের জন্য পর্যাপ্ত মেমরির স্থান দেওয়া হয়। ।

এটি ভুল (বা কমপক্ষে, আপনি নিজেকে পরিষ্কারভাবে প্রকাশ করছেন না)।

যদি কোনও পদ্ধতি স্থিতিশীল সদস্যের পরিবর্তনশীল অ্যাক্সেস করে তবে তা যা পায় তা হয় কোনও আদিম মান বা কোনও বস্তুর রেফারেন্স । এটি কোনও (বিদ্যমান) স্থানীয় ভেরিয়েবল বা প্যারামিটারে নির্ধারিত হতে পারে, পূর্বে বরাদ্দ করা অ্যারের কোনও (বিদ্যমান) উপাদানকে বরাদ্দ করা (বিদ্যমান) স্থিতিশীল বা অ-স্থিতিশীল সদস্যকে বরাদ্দ করা হয়, বা কেবল ব্যবহৃত এবং বাতিল করা যায়।

  • কোনও ক্ষেত্রেই নতুন সঞ্চয়স্থান রেফারেন্স বা আদিম মান ধরে রাখার প্রয়োজন হয় না।

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

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


আরও তথ্যের জন্য, দয়া করে এই সংস্থানগুলি দেখুন:

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