পার্মজেন এবং মেটাস্পেসের মধ্যে পার্থক্য কী?


118

জাভা 7 অবধি JVM মেমরির একটি জায়গা ছিল PermGen নামে , যেখানে জেভিএম তার ক্লাসগুলি রাখত । ইন জাভা 8 এটি সরানো নামক এলাকায় তার স্থলাভিষিক্ত হন Metaspace

পার্মজেন এবং মেটাস্পেসের মধ্যে সবচেয়ে গুরুত্বপূর্ণ পার্থক্যগুলি কী কী ?

আমি জানি কেবলমাত্র java.lang.OutOfMemoryError: PermGen spaceতফাতটি MaxPermSizeহ'ল আর ফেলে দেওয়া যাবে না এবং ভিএম প্যারামিটার উপেক্ষা করা হবে।


প্রথম গুগলের
The8472

@ the8472 হ্যাঁ, তবে এটি (এবং আরও অনেক) গুগল ফলাফল কেবলমাত্র মেটাস্পেস প্রক্রিয়া বর্ণনা করে, এই এবং পার্মজেনের মধ্যে সঠিক পার্থক্য সম্পর্কে কিছুই উল্লেখ করে না।
কাও

উত্তর:


137

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

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

উভয়েরই java.lang.Classউদাহরণ রয়েছে এবং তারা উভয়ই ClassLoader ফুটোয় ভুগছে । কেবলমাত্র পার্থক্যটি হ'ল মেটাস্পেস ডিফল্ট সেটিংসের সাথে, আপনি লক্ষণগুলি লক্ষ্য না করা পর্যন্ত এটি বেশি সময় নেয় (যেহেতু এটি স্বয়ংক্রিয়ভাবে যতটা সম্ভব বেড়ে যায়), অর্থাৎ আপনি সমস্যাটিকে সমাধান না করেই কেবল আরও দূরে ঠেলে রাখুন। OTOH আমি কল্পনা করেছি যে ওএস মেমরির বাইরে চলে যাওয়ার প্রভাব কেবল জেভিএম পারমজেনের বাইরে চলে যাওয়ার চেয়ে মারাত্মক হতে পারে, সুতরাং আমি নিশ্চিত নই যে এটির অনেক উন্নতি হয়েছে।

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


17
পার্মজেন বা মেটাস্পেসের মধ্যে ক্লাস ক্লাসের উদাহরণ নেই। তারা কেবল বোঝা ক্লাস সম্পর্কে মেটা তথ্য রাখে। ক্লাস শ্রেণির উদাহরণগুলি অন্যান্য ক্লাসের উদাহরণগুলির মতো নিয়মিত গাদা রাখা হয়।
গড় জো

ভাল তুলনা। ধন্যবাদ
সন্দীপ

1
যাইহোক, OTOH এর অর্থ, "অন্যদিকে"
সোফাস 1

43

বিদায়, বিদায় PermGen, হ্যালো মেটাস্পেস

PermGen সম্পূর্ণরূপে সরানো হয়েছে।

মেটাস্পেসের আবর্জনা সংগ্রহ - ক্লাস মেটাডেটার ব্যবহার পৌঁছে যাওয়ার পরে মৃত শ্রেণির এবং শ্রেণিবদ্ধদের আবর্জনা সংগ্রহের সূত্রপাত হয় MaxMetaspaceSize

স্থানটি Metadataএখন আর স্পষ্ট নয় Java heap, দ্যা metadataএখন স্থানীয় মেমরিতে একটি হিসাবে পরিচিত অঞ্চলে চলে গেছে Metaspace

সহজ কথায় ,

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

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

বিশ্লেষণ সহ আরও কিছু নিবন্ধ: লিংক 1 , লিংক 2 এবং এটি


6
ম্যাক্স্পার্মজেনের পরিবর্তে আপনার ম্যাক্সমেটাসস্পেস সাইজ রয়েছে, সুতরাং এটি বেশি, বা কম স্মৃতি ব্যবহার করবে বা আপনার নিয়ন্ত্রণ কম থাকবে এমন কোনও কারণ নেই।
পিটার লরে

2
আমরা এখানে কোন স্মৃতি নিয়ে কথা বলছি? র‌্যাম মেমরি বা এইচডিডি মেমরি।
দিনেশ

1
@ দিনেশ র‌্যাম (অভ্যন্তরীণ স্মৃতি)
আদিত্য গুপ্ত

10

সংক্ষেপে, মেটাসস্পেস আকারের স্বয়ংক্রিয় নেটিভ মেমরিতে বৃদ্ধি হয় বর্ধিত মেটাডেটা লোড করার জন্য যেমন সীমাবদ্ধ না করা হয় -XX:MaxMetaspaceSize

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