জেভিএমের জন্য সর্বাধিক মেমরির ব্যবহার কীভাবে সেট করবেন?


132

আমি JVM দ্বারা ব্যবহৃত সর্বাধিক স্মৃতি সীমাবদ্ধ করতে চাই। দ্রষ্টব্য, এটি কেবল স্তূপ নয়, আমি এই প্রক্রিয়াটি দ্বারা ব্যবহৃত মোট স্মৃতি সীমাবদ্ধ করতে চাই।

উত্তর:


94

যুক্তি ব্যবহার করুন -Xms<memory> -Xmx<memory>। বাইটসের মেগস এবং জিগস নির্দেশ করার জন্য সংখ্যাগুলি পরে Mবা ব্যবহার করুন Gafter -Xmsসর্বনিম্ন এবং -Xmxসর্বাধিক নির্দেশ করে ।


1
আপনি ম্যাক্সপার্মসাইজও দেখতে চাইতে পারেন।
urmalp

89
তিনি জেভিএম স্মৃতি সম্পর্কে জিজ্ঞাসা করছেন। আপনি যা বলেছেন তা হ'ল মাপ। তারা উভয়ই আলাদা
vsingh

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

2
uhu। তাই আমি সেট করেছি -Xmx524Mএবং প্রক্রিয়াটি 1.2 গিগাবাইট র‌্যাম নেয়। (?)
ফিলি 294

7
এটি সঠিক উত্তর নয়, -Xms এবং -Xmx বিকল্পগুলি কেবল jvm হিপ আকারকে নিয়ন্ত্রণ করে, মোট মেমরির বরাদ্দ নয়।
পিটার ডি উইন্টার

31

স্ট্যাক ফাঁস মেমরি সম্পর্কে আপনার চিন্তা করার দরকার নেই (এটি অত্যন্ত অস্বাভাবিক)। কেবলমাত্র যখন আপনি স্ট্যাকটি নিয়ন্ত্রণের বাইরে চলে যেতে পারেন তা হল অসীম (বা সত্যই গভীর) পুনরাবৃত্তি।

এটি কেবল গাদা ap দুঃখিত, প্রথমে আপনার প্রশ্নটি পুরোপুরি পড়েনি।

আপনাকে নিম্নলিখিত কমান্ড লাইনের যুক্তি দিয়ে JVM চালানো দরকার।

-Xmx<ammount of memory>

উদাহরণ:

-Xmx1024m

এটি JVM এর জন্য সর্বাধিক 1GB মেমরির অনুমতি দেবে allow


1
যে এই থ্রেড অনুযায়ী, সত্য নয়, সেখানে একাধিক উপায়ে আপনি গাদা বাইরে লিক করতে পারেন stackoverflow.com/questions/1475290/...
erotsppa

আপনি সঠিক, স্ট্যাকের সাথে সম্পর্কিত নয় মেমরির সমস্যা রয়েছে এমন অনেকগুলি উপায় রয়েছে। তবে এগুলি খুব সাধারণ নয়।
jjnguy

9
খুব নিশ্চিত যে আপনি নন-হ্যাপ মেমরির আকারটি নিয়ন্ত্রণ করতে পারবেন না, আপনি কি পারবেন?
ম্যাট বি 19

খুব নিশ্চিত যে আপনি এটির মাধ্যমে নিয়ন্ত্রণ করতে পারবেন -XX:MaxDirectMemorySize। এটি নিশ্চিত করার জন্য আমি ভারী প্রোফাইল দিয়েছি তবে এখনও নয়;)
আলেকজান্দারগুনারসন

2
@alexendergunnarson MaxDirectMemorySizeকেবলমাত্র NIO বাফারগুলিকেই প্রভাবিত করে। সমস্ত ধরণের অন্যান্য নেটিভ মেমরি JVM দ্বারা ব্যবহৃত হয়।
ক্রিস্টোফার শুল্টজ

16

আপনি jvm এর জন্য মেমরি সীমাবদ্ধ করতে চান (গাদা আকার নয়) ulimit -v

JVM এবং গাদা মেমরি মধ্যে পার্থক্য একটি ধারণা পেতে, এই চমৎকার নিবন্ধ কটাক্ষপাত করা http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the- জাভা process.html


8
কি ulimitলিনাক্স কমান্ড? আমি একটি দ্রুত গুগল অনুসন্ধান করেছি এবং ulimitJVM এর মধ্যে কোনও সম্পর্ক দেখতে পেলাম না । Y
স্যাম

হ্যাঁ এটি লিনাক্স কমান্ড। tldp.org/LDP/solrhe/Securing- Opticalization
Linux-

11

উপরের উত্তরটি একধরনের সঠিক, আপনি জাভা প্রক্রিয়াটি কতটা নেটিভ মেমরি বরাদ্দ করে তা কৃপণভাবে নিয়ন্ত্রণ করতে পারবেন না। এটি আপনার অ্যাপ্লিকেশনটি কী করছে তার উপর নির্ভর করে।

প্ল্যাটফর্মের উপর নির্ভর করে আপনি জাভা বা অন্য কোনও প্রক্রিয়াটির আকার সীমাবদ্ধ করতে উদাহরণস্বরূপ কিছুটা পদ্ধতি ব্যবহার করতে পারবেন।

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


1

নেটিভহীপ -XX দ্বারা বাড়ানো যেতে পারে: ম্যাক্সডাইরেক্টমিউরিসাইজ = 256 এম (ডিফল্ট 128)

আমি কখনই ব্যবহার করিনি। সম্ভবত আপনি এটি দরকারী পাবেন।


1
আমি সন্দেহ করি যে এই বিকল্পটি চেয়েছিল: আপনি জাভা থেকে সি / সি ++ কোডে কল করার সময় নেটিভ মেমরি ব্যবহৃত হয়।
ওম-মনোনীত-

6
নেও কল করার সময় নেটিভ মেমরিটিও ব্যবহৃত হয় যদি আপনি সরাসরি মেমরির সাথে বাফারগুলি বরাদ্দ করেন। (... এবং শ্রেণিবদ্ধকারী এবং থ্রেড তথ্য ....)
স্টু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.