জাভা স্মৃতি পুলকে কীভাবে ভাগ করা হয়?


224

আমি বর্তমানে jconsole সহ একটি জাভা অ্যাপ্লিকেশন পর্যবেক্ষণ করছি। মেমরি ট্যাব আপনাকে এর মধ্যে চয়ন করতে দেয়:

Heap Memory Usage
Non-Heap Memory Usage
Memory Pool “Eden Space”
Memory Pool “Survivor Space”
Memory Pool “Tenured Gen”
Memory Pool “Code Cache”
Memory Pool “Perm Gen”

তাদের মধ্যে পার্থক্য কী ?


ধরে নিই যে আপনি সান জেডিকে ব্যবহার করছেন, সর্বোত্তম উত্তরটি তাদের ডকুমেন্টেশনে পাওয়া যাবে: টিউনিং আবর্জনা সংগ্রহ (জেডিকে 1.5) এবং আবর্জনা সংগ্রহের প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (
জেডিকে

উত্তর:


327

গাদা স্মৃতি

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

  • ইডেন স্পেস : যে পুলটি থেকে প্রাথমিকভাবে বেশিরভাগ অবজেক্টের জন্য মেমরি বরাদ্দ করা হয়।

  • বেঁচে থাকার স্থান : পুলটি ইডেনের জায়গার আবর্জনা সংগ্রহ করে বেঁচে থাকা অবজেক্টগুলি সমেত।

  • টেনিউড জেনারেশন বা ওল্ড জেনার : পুলে বেঁচে থাকার জায়গাতে কিছু সময়ের জন্য বিদ্যমান বস্তুযুক্ত পুল রয়েছে।

নন-হিপ মেমরি

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

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

  • কোড ক্যাশে : হটস্পট জাভা ভিএম-তে একটি কোড ক্যাশেও রয়েছে যা মেমরি ধারণ করে যা স্থানীয় কোডের সংকলন এবং সঞ্চয় করার জন্য ব্যবহৃত হয়।

জকনসোল কীভাবে ব্যবহার করবেন সে সম্পর্কে এখানে কিছু ডকুমেন্টেশন রয়েছে


4
আমি নিশ্চিত নই যে জাভা ভার্চুয়াল মেশিনের স্পেসিফিকেশনে স্পষ্টভাবে বলা হয়েছে যে @ ডিএফএ সম্পূর্ণরূপে সঠিক: "যদিও পদ্ধতিটি অঞ্চলটি যৌক্তিকভাবে স্তূপের অংশ, তবে সাধারণ বাস্তবায়নগুলি আবর্জনা সংগ্রহ বা সংহত না করা বেছে নিতে পারে।" তবে এটি স্পষ্ট যে jconsole কোড ক্যাশে এবং স্থায়ী জেনারেশনকে নন-হিপ হিসাবে দেখায়, এটি স্পেসিফিকেশনের বিরোধিতা বলে মনে হচ্ছে। কেউ কি এই দ্বন্দ্ব সম্পর্কে আরও স্পষ্টতা দিতে পারেন?
জেমস ব্লুম

@ জেমস ব্লুম - আমিও একই ভাবছিলাম। যদিও মুল সংজ্ঞাটি জানিয়েছে যে কোন মেমরি পুলটি কোন ধরণের (হিপ / নন-হিপ) এর সাথে সম্পর্কিত, এটি কি স্পষ্টভাবে রাষ্ট্র পরিবর্তন করতে পারে?
উমং দেশাই

2
এই দস্তাবেজটি এটিকে নিখুঁতভাবে উপাহ্য করা হয়েছিল: docs.intergral.com/pages/viewpage.action?pageId=22478944 ডকিতে একটি ব্রাউজারের মূল্যবান জেভিএম সম্পর্কে কিছু অন্যান্য ভাল তথ্য রয়েছে
স্টিভ সিবার্ট

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

এবং স্ট্যাকটি ভুলে যাবেন না (নন-হ্যাপ দিকে) :)
টুথলেস সিয়ার

70

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

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

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

চতুর্থ প্রজন্মের নামও রয়েছে, যাকে স্থায়ী জেনারেশন বা পার্মজেন বলা হয় en এখানে থাকা অবজেক্টগুলি আবর্জনা সংগ্রহের জন্য উপযুক্ত নয় এবং সাধারণত জেভিএম চালানোর জন্য প্রয়োজনীয় একটি অপরিবর্তনীয় অবস্থা থাকে যেমন শ্রেণি সংজ্ঞা এবং স্ট্রিং ধ্রুবক পুল। নোট করুন যে পারমজেন স্পেসটি জাভা 8 থেকে অপসারণের পরিকল্পনা করা হয়েছে, এবং মেটাসস্পেস নামক একটি নতুন স্পেসের সাথে প্রতিস্থাপন করা হবে যা দেশীয় স্মৃতিতে অনুষ্ঠিত হবে। তথ্যসূত্র ww http://www.programcreek.com/2013/04/jvm-run-time-data-areas/

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন


ডায়াগ্রামটি খুব স্ব-বর্ণনামূলক বলে মনে হচ্ছে ... এটি কোনও জিসি অ্যালগরিদমের জন্য বৈধ কি? জি 1 এর আলাদা সেট রয়েছে।
ভেঙ্কটেশ্বর রাও

@ পাইথনার আমি মনে করি গা dark় বেগুনি রঙের পতাকাটি হওয়া উচিত -XX:PermSizeএবং এর -XX:MaxPermSizeউপরে এটি ইতিমধ্যে সংজ্ঞায়িত হয়নি।
অনুরাগ

35

জাভা 8 এর সাথে নন হিপ অঞ্চলে আর পার্মগেন নেই তবে মেটাস্পেস যা জাভা 8-র একটি বড় পরিবর্তন, যা জাভা সহ স্মৃতি ত্রুটি থেকে মুক্তি পেতে পারে বলে ক্লাসের ডেটাগুলির জন্য জেভিএম দ্বারা প্রয়োজনীয় স্থানের উপর নির্ভর করে মেটাস্পেসের আকার বাড়ানো যেতে পারে।


1
প্রকৃতপক্ষে, মেটাস্পেস এবং শ্রেণি স্পেস রয়েছে: ডকস.ওরকল
জাভাসে

23

অপারেটিং সিস্টেম দ্বারা জেভিএমকে বরাদ্দ করা মেমরির অংশ জাভা হ্যাপ মেমোরি

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

এখানে চিত্র বর্ণনা লিখুন

আপনি নীচে এসই প্রশ্নের নীচে ইডেন স্পেস, বেঁচে থাকার স্থান, টেনিউড স্পেস এবং স্থায়ী জেনারেশন সম্পর্কে আরও বিশদ জানতে পারেন :

ইয়াং, টেনার্ড এবং পারম প্রজন্ম

জাভা 8 প্রকাশের পর থেকে পেরমগেনকে মেটাস্পেসের সাথে প্রতিস্থাপন করা হয়েছে।

আপনার প্রশ্নগুলি সম্পর্কিত:

  1. ইডেন স্পেস, সার্ভাইভার স্পেস, টেনার্ড স্পেস হিপ মেমোরির অংশ
  2. মেটাস্পেস এবং কোড ক্যাশে অ-হিপ মেমরির অংশ।

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

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