"অন-হিপ" এবং "অফ-হিপ" এর মধ্যে পার্থক্য


145

Ehcache সম্পর্কে আলোচনা অন গাদা এবং অফ-গাদা মেমরি। পার্থক্য কি? এগুলি কনফিগার করতে কোন JVM আরগ ব্যবহার করা হয়?


: কিভাবে বন্ধ-গাদা মেমরি ব্যবহার জন্য, দেখুন stackoverflow.com/a/30027374/895245
সিরো Santilli郝海东冠状病六四事件法轮功

উত্তর:


169

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

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


18
আরও অনুসন্ধানের জন্য সরাসরি বাইটবফারগুলি উল্লেখ করার জন্য +1;)
ম্যাক্স

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

অবৈধ বিষয়বস্তু বরাদ্দ করতে অনিরাপদ ব্যবহার করা দেখে মনে হচ্ছে অনেহেপ / ডাইরেক্টবাইটবার্ফার্স / বাইটবফারগুলির চেয়ে আরও ভালভাবে পড়ার এবং লেখার পারফরম্যান্স রয়েছে। ashkrit.blogspot.com/2013/07/…
জো সি

98

http://code.google.com/p/fast-serialization/wiki/QuickStartHeapOff থেকে

হিপ-অফলোডিং কী?

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

তবে আজকের সার্ভার অ্যাপ্লিকেশনগুলি (ঘন ঘন ফুলফ্র্যাড ফ্রেমওয়ার্কের শীর্ষে নির্মিত ;-)) সহজেই 4 জিবি ছাড়িয়ে অনেক বেশি স্তূপ প্রয়োজন।

এই মেমরির প্রয়োজনীয়তার একটি সমাধান হ'ল বস্তুগুলির অংশগুলি 'অফলোড' নন-জাভা হিপ (সরাসরি ওএস থেকে বরাদ্দ) করা to ভাগ্যক্রমে java.nio 'অব্যবহৃত' মেমরির অংশগুলি (এমনকি মেমরি ম্যাপযুক্ত ফাইলগুলি) সরাসরি বরাদ্দ / পড়ার এবং লেখার জন্য ক্লাস সরবরাহ করে।

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

জাভা ভিএম দ্বারা পরিচালিত হিপ সাইজটি ছোট রাখা যেতে পারে, তাই জিসি বিরতি মিলিতে থাকে, সকলেই খুশি, কাজ শেষ।

এটা স্পষ্ট, যে এই ধরনের একটি হিপ বাফারের কর্মক্ষমতা বেশিরভাগ সিরিয়ালাইজেশন বাস্তবায়নের কর্মক্ষমতা উপর নির্ভর করে। সুসংবাদ: কোনও কারণে এফএসটি-সিরিয়ালাইজেশন বেশ দ্রুত :-)।

নমুনা ব্যবহারের পরিস্থিতি:

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

সম্পাদনা করুন: কিছু পরিস্থিতির জন্য কেউ আরও বেশি পরিশীলিত আবর্জনা সংগ্রহের অ্যালগরিদম যেমন কনকন্টারমার্কঅ্যান্ডস্বীপ বা জি 1 আরও বড় গাদা সমর্থন করতে পারেন (তবে এটির সীমা 16 গিগাবাইটের স্তূপের বাইরেও রয়েছে) choose উন্নত 'বিরামহীন' জিসি (আজুল) সহ উপলব্ধ একটি বাণিজ্যিক জেভিএমও রয়েছে।


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

41

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

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


এটি কেবল এখনও স্তূপে নয় তবে ক্রমিক রূপ হিসাবে রয়েছে?
পেসারিয়ার

1
কীভাবে এটি আরও কার্যকর করে তোলে?
পেসারিয়ার

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

1
হটস্পটে, জিসি বিরতি সময় সরাসরি গাদা আকারের উপর নির্ভর করে। বিগমিওরির জিসি বিরতি ন্যূনতম রাখার জন্য এবং ডিস্ক অ্যাক্সেসের আইও খরচ এড়াতে, গাদা পরিবর্তে র‌্যাম ব্যবহার করে এই বাণিজ্য সরবরাহ করে off
চন্দর শিবদাসানী

17

সংক্ষিপ্ত ছবিতে

সংক্ষেপে জাভা অন / অফ হিপ স্টোরেজ

ক্রেডিট পিক করুন


বিস্তারিত ছবি

জাভা অন / অফ হিপ স্টোরেজ বিশদ

ক্রেডিট পিক করুন


-Xmx দ্বারা নিয়ন্ত্রিত হিপ মেমরিটি বন্ধ করে দেয়? নীল এক পুরানো জেন না হিপ অফ?
হিমাংশু আহিরে 17

না এটি গাদাতে অব্যবহৃত স্থান, এটি অনেকগুলি বস্তু যখন গাদাতে তৈরি করা হয় তা পূরণ করা হবে।
mrsrinivas

1

জেভিএম অফ-হিপ মেমরির বিষয়ে কিছুই জানে না। এহছে একটি অন-ডিস্ক ক্যাশে পাশাপাশি একটি মেমোরি ক্যাশে প্রয়োগ করে।


1

100% নয়; যাইহোক, মনে হচ্ছে হিপ এমন কোনও বস্তু বা বরাদ্দ স্থানের সেট (র‌্যামে) যা জাভা নিজেই বা এহচেচে থেকে সম্ভবত সম্ভাব্য কার্যকারিতা কোডের কার্যকারিতার মধ্যে তৈরি হয়েছে এবং অফ-হিপ র‌্যামের নিজস্ব সিস্টেম রয়েছে as আমরা হব; তবে এটি মনে হচ্ছে এটি এক মাত্রার ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে সংগঠিত নয়, যার অর্থ এটি কোনও গাদা (ম্যামের জায়গার দীর্ঘ দীর্ঘ সেট) ব্যবহার করতে পারে না এবং পরিবর্তে ঠিকানার চেয়ে আলাদা স্পেস ব্যবহার করে যা এটি সামান্য কম দক্ষ করে তোলে।

তারপরে অবশ্যই পরবর্তী স্তরটি হার্ড-ড্রাইভের স্থান।

আমি ইচ্ছু ব্যবহার করি না, তাই আপনি আমার উপর বিশ্বাস রাখতে নাও চান, তবে তাদের নথি থেকে আমি কী সংগ্রহ করেছি।

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