আমি -Xmxnজাভা কমান্ড লাইন থেকে বিকল্পটি বাদ দিলে একটি ডিফল্ট মান ব্যবহার করা হবে। জাভা ডকুমেন্টেশন অনুযায়ী
"সিস্টেম কনফিগারেশনের উপর ভিত্তি করে রানটাইমে ডিফল্ট মান নির্বাচন করা হয়"
কোন সিস্টেম কনফিগারেশন সেটিংস ডিফল্ট মানকে প্রভাবিত করে?
আমি -Xmxnজাভা কমান্ড লাইন থেকে বিকল্পটি বাদ দিলে একটি ডিফল্ট মান ব্যবহার করা হবে। জাভা ডকুমেন্টেশন অনুযায়ী
"সিস্টেম কনফিগারেশনের উপর ভিত্তি করে রানটাইমে ডিফল্ট মান নির্বাচন করা হয়"
কোন সিস্টেম কনফিগারেশন সেটিংস ডিফল্ট মানকে প্রভাবিত করে?
উত্তর:
উইন্ডোজে, আপনি যেখানে আপনার অ্যাপ্লিকেশনগুলি চালিত হয় সেখানে ডিফল্টগুলি জানতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন।
জাভা-এক্সএক্স: + প্রিন্টফ্লেগস ফাইনাল-রূপান্তর | সন্ধানকারী হিপসাইজ
বিকল্পগুলি MaxHeapSize(এর জন্য -Xmx) এবং এর InitialHeapSizeজন্য দেখুন -Xms।
ইউনিক্স / লিনাক্স সিস্টেমে আপনি এটি করতে পারেন
জাভা-এক্সএক্স: + প্রিন্টফ্লেগস ফাইনাল-রূপান্তর | গ্রেপ হিপসাইজ
আমি বিশ্বাস করি ফলস্বরূপ আউটপুট বাইটে রয়েছে।
InitialHeapSize = 262803264এবং MaxHeapSize = 4206886912যা আমার ভুল না হলে প্রায় 256 এমবি এবং 4 জিবি । এর অর্থ কি প্রতিটি জেভিএম এমনভাবে শুরু হয় যেন এটি -Xms256m -Xmx4gবিকল্পগুলির সাথে চালু হয়েছিল ?
java -XX:+PrintFlagsFinal -version | findstr /R /C:"HeapSize"
-versionদীর্ঘ "ব্যবহার" পাঠ্যটিকে দমন করে stderr।
জাভা এসই 5 এর জন্য: আবর্জনা সংগ্রাহক এরগনোমিক্স [ওরাকল] অনুসারে :
প্রাথমিক স্তূপ আকার:
মেশিনের মেশিনের শারীরিক মেমরির 1/64 তম বড় বা কিছু যুক্তিসঙ্গত সর্বনিম্ন। জে 2 এসই 5.0 এর আগে, ডিফল্ট প্রাথমিক স্তূপের আকারটি একটি যুক্তিসঙ্গত ন্যূনতম ছিল, যা প্ল্যাটফর্মের দ্বারা পরিবর্তিত হয়। আপনি -Xms কমান্ড-লাইন বিকল্পটি ব্যবহার করে এই ডিফল্টটিকে ওভাররাইড করতে পারেন।
সর্বাধিক গাদা আকার:
দৈহিক মেমরির 1/4 র্থ বা 1 জিবি এর ছোট। J2SE 5.0 এর আগে, ডিফল্ট সর্বাধিক হ্যাপের আকার ছিল 64MB B আপনি -Xmx কমান্ড-লাইন বিকল্পটি ব্যবহার করে এই ডিফল্টটিকে ওভাররাইড করতে পারেন।
হালনাগাদ:
টম অ্যান্ডারসন তার মন্তব্যে যেমন উল্লেখ করেছেন, উপরেরটি সার্ভার-ক্লাস মেশিনগুলির জন্য। 5.0 জাভাটিএম ভার্চুয়াল মেশিনে এরগনমিক্স থেকে :
জেএসইএস প্ল্যাটফর্ম সংস্করণ ৫.০-তে একটি সার্ভার-ক্লাস মেশিন হিসাবে চিহ্নিত মেশিনের একটি শ্রেণিকে একটি মেশিন হিসাবে সংজ্ঞায়িত করা হয়েছে
- 2 বা ততোধিক শারীরিক প্রসেসর
- 2 বা ততোধিক গিগাবাইট শারীরিক স্মৃতি
উইন্ডোজ অপারেটিং সিস্টেমের একটি সংস্করণ চলমান 32 বিট প্ল্যাটফর্ম ব্যতীত। অন্যান্য সমস্ত প্ল্যাটফর্মে ডিফল্ট মানগুলি 1.4.2 সংস্করণের ডিফল্ট মানগুলির সমান।
ডিফল্টরূপে J2SE প্ল্যাটফর্ম সংস্করণে 1.4.2 এ নিম্নলিখিত নির্বাচনগুলি করা হয়েছিল
- 4 এমবিতে প্রাথমিক স্তরের আকার
- M৪ এমবিতে সর্বাধিক স্তরের আকার
জাভা 8 বেশী সময় লাগে 1/64 তম আপনার জন্য আপনার শারীরিক মেমরি Xmssize (নূন্যতম HeapSize) এবং কম 1 / 4th আপনার জন্য আপনার শারীরিক মেমরি -Xmxsize (সর্বোচ্চ HeapSize)।
আপনি এটি দ্বারা ডিফল্ট জাভা হ্যাপের আকারটি পরীক্ষা করতে পারেন :
ইন উইন্ডোজ :
java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"
ইন লিনাক্স :
java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
কোন সিস্টেম কনফিগারেশন সেটিংস ডিফল্ট মানকে প্রভাবিত করে?
মেশিনের শারীরিক মেমরি এবং জাভা সংস্করণ।
এটি জাভা 6 আপডেট 18 এ পরিবর্তিত হয়েছে ।
ধরে নিই যে আমাদের কাছে 1 গিগাবাইটেরও বেশি দৈহিক মেমরি রয়েছে (এই দিনগুলিতে বেশ সাধারণ), সার্ভার ভিএম এর জন্য এটি আপনার শারীরিক মেমরির সর্বদা 1/4 তম v
greater than or equal to 1 gigabyte of physical memory results in a maximum heap size of 256 megabytes
আর্নেস্তো ঠিক বলেছেন। লিঙ্ক অনুযায়ী তিনি পোস্ট করেছেন [1]:
ক্লায়েন্ট জেভিএম হিপ কনফিগারেশন আপডেট হয়েছে
ক্লায়েন্ট জেভিএম ...
ডিফল্ট সর্বাধিক হিপ আকারটি দৈহিক মেমরির 192 মগাবাইটের শারীরিক মেমরির অর্ধেক এবং অন্যথায় 1 গিগাবাইটের দৈহিক মেমরির আকারের দৈহিক মেমরির এক চতুর্থাংশ।
উদাহরণস্বরূপ, যদি আপনার মেশিনে 128 মেগাবাইট দৈহিক মেমরি থাকে তবে সর্বাধিক হ্যাপের আকারটি 64 মেগাবাইট এবং 1 গিগাবাইটের চেয়ে বেশি বা সমান দৈহিক মেমরির সর্বাধিক 256 মেগাবাইটের হিপ আকারে ফলাফল হয়।
আপনার প্রোগ্রামটির প্রয়োজনের জন্য পর্যাপ্ত অবজেক্ট তৈরি না করা সর্বাধিক গাদা আকার জেভিএম ব্যবহার করবে না। প্রারম্ভিক হিপ সাইজ হিসাবে চিহ্নিত অনেক ছোট পরিমাণ, জেভিএম আরম্ভের সময় বরাদ্দ করা হয়। ...
- ...
- সার্ভার জেভিএম হিপ কনফিগারেশন এরর্গোনমিক্স এখন ক্লায়েন্টের সমান, ব্যতীত 32-বিট জেভিএম-এর জন্য ডিফল্ট সর্বাধিক হিপ আকারটি 1 গিগাবাইট , 4 গিগাবাইটের শারীরিক মেমরি আকারের সাথে সম্পর্কিত এবং 64-বিট জেভিএমের সাথে 32 গিগাবাইট সম্পর্কিত 128 গিগাবাইটের শারীরিক স্মৃতি আকারে।
[1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html
আইবিএম জেভিএম-এর জন্য কমান্ডটি নিম্নলিখিত:
java -verbose:sizes -version
জাভা 8 এর জন্য আইবিএম এসডিকে সম্পর্কে আরও তথ্যের জন্য: http://www-01.ibm.com/support/ জ্ঞানসেন্টিটার / এসএসইকেই 2_8.0.0/com.ibm.java.lnx.80.doc/diag/appendixes/ defaults.html ? lang = en
অবশেষে!
জাভা 8u191 হিসাবে আপনার এখন বিকল্প রয়েছে:
-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage
যেটি ব্যবহারযোগ্য শারীরিক র্যামের শতাংশ হিসাবে গাদা আকারে ব্যবহার করতে পারে। (যা কার্নেল ব্যবহার করে র্যাম ইনস্টল করা তেমনই কম)।
আরও তথ্যের জন্য জাভা 8 u191 এর জন্য রিলিজ নোটগুলি দেখুন । নোট করুন বিকল্পগুলি একটি ডকার শিরোনামে উল্লেখ করা হয়েছে তবে বাস্তবে আপনি ডকার পরিবেশে বা aতিহ্যবাহী পরিবেশে তা প্রয়োগ করে।
এর জন্য ডিফল্ট মান MaxRAMPercentage25%। এটি অত্যন্ত রক্ষণশীল।
আমার নিজস্ব নিয়ম: যদি আপনার হোস্ট প্রদত্ত জাভা অ্যাপ্লিকেশনটি চালানোর জন্য কম বেশি উত্সর্গীকৃত হয়, তবে আপনি সমস্যা ছাড়াই নাটকীয়ভাবে বৃদ্ধি করতে পারেন। আপনি যদি লিনাক্সে থাকেন তবে কেবলমাত্র স্ট্যান্ডার্ড ডেমোনগুলি চালাচ্ছেন এবং 1 গিগাবাইটের কাছাকাছি কোথাও থেকে র্যাম ইনস্টল করেছেন এবং আমি জেভিএম এর হিপটির জন্য 75% ব্যবহার করতে দ্বিধা করব না। আবার মনে রাখবেন যে এটি র্যামের 75% উপলব্ধ , র্যাম ইনস্টলড নয় । যা অবশিষ্ট রয়েছে তা হ'ল হোস্ট এবং জেভিএমের প্রয়োজন মতো অন্যান্য ধরণের মেমরির (যেমন স্ট্যাকের জন্য) চলমান অন্যান্য ব্যবহারকারীর জমি প্রক্রিয়াগুলি। সব মিলিয়ে, এই 25% যে খুব ভাল বাকি তা পুরোপুরি ফিট হবে। স্পষ্টতই, আরও ইনস্টল করা র্যামের সাথে 75% একটি নিরাপদ এবং সুরক্ষিত বাজি। (আমি আশা করি জেডিকে লোকেরা এমন কোনও বিকল্প প্রয়োগ করেছে যেখানে আপনি মই নির্দিষ্ট করতে পারবেন)
MaxRAMPercentageবিকল্পটি সেটিংয়ের মতো দেখাচ্ছে:
java -XX:MaxRAMPercentage=75.0 ....
নোট করুন যে এই শতাংশের মানগুলি 'ডাবল' প্রকারের এবং তাই আপনাকে অবশ্যই দশমিক ডট দিয়ে সেগুলি নির্দিষ্ট করতে হবে । আপনি যদি "75.0" এর পরিবর্তে "75" ব্যবহার করেন তবে আপনি কিছুটা বিজোড় ত্রুটি পাবেন।
ডিফল্ট মান সিস্টেম কনফিগারেশনের উপর ভিত্তি করে রানটাইমে বেছে নেওয়া হয়
ডকুমেন্টেশন পৃষ্ঠাটি দেখুন
ডিফল্ট গাদা আকার
কমান্ড লাইনে প্রাথমিক এবং সর্বাধিক হিপ মাপগুলি নির্দিষ্ট না করা না হলে তারা মেশিনে মেমরির পরিমাণের ভিত্তিতে গণনা করা হয়।
ক্লায়েন্ট জেভিএম ডিফল্ট প্রাথমিক এবং সর্বাধিক হ্যাপ আকার:
ডিফল্ট সর্বাধিক হিপ আকারটি দৈহিক মেমরির 192 মগাবাইট (এমবি) অবধি শারীরিক মেমরির অর্ধেক এবং অন্যথায় শারীরিক মেমরির এক চতুর্থাংশ 1 গিগাবাইটের (গিগাবাইট) দৈহিক মেমরি আকারের হয় ।
সার্ভার জেভিএম ডিফল্ট প্রাথমিক এবং সর্বাধিক হ্যাপ আকার:
৩২-বিট জেভিএম-তে, 4 গিগাবাইট বা আরও বেশি শারীরিক মেমরি থাকলে ডিফল্ট সর্বাধিক হিপ আকারটি 1 গিগাবাইট পর্যন্ত হতে পারে । -৪-বিট জেভিএম-তে, 128 গিগাবাইট বা আরও বেশি শারীরিক মেমরি থাকলে ডিফল্ট সর্বাধিক হিপ আকার 32 গিগাবাইট পর্যন্ত হতে পারে
কোন সিস্টেম কনফিগারেশন সেটিংস ডিফল্ট মানকে প্রভাবিত করে?
আপনি ফ্ল্যাগ- এক্সএমএস (প্রাথমিক হিপ আকার) এবং- এক্সএমএক্স (সর্বোচ্চ গাদা আকার) ব্যবহার করে প্রাথমিক এবং সর্বাধিক হ্যাপ মাপ নির্দিষ্ট করতে পারেন । আপনি যদি জানেন যে আপনার অ্যাপ্লিকেশনটি কত ভালভাবে কাজ করতে পারে তবে আপনি XX এবং -Xmx একই মানতে সেট করতে পারেন
Xmsএবং Xmxজাভা ভার্চুয়াল মেশিন হয় পতাকা (জেভিএম):
Xms: initial and minimumজেভিএমheap size
Format: -Xmx<size>[g|G|m|M|k|K]Default Size:
-server মোড: ফ্রি শারীরিক মেমরির 25%,> = 8 এমবি এবং <= 64 এমবি-client mode: বিনামূল্যে শারীরিক মেমরির 25%,> = 8 এমবি এবং <= 16 এমবিTypical Size:
-Xms128M-Xms256M-Xms512MFunction/ Effect:
Xmsআকার মেমরি দিয়ে শুরুXmx: maximumজেভিএমheap size
Format: -Xmx<size>[g|G|m|M|k|K]Default Size:
<= R27.2
Windows: 75%মোট শারীরিক স্মৃতি পর্যন্ত1GBLinux/Solaris: 50%উপলব্ধ শারীরিক মেমরি পর্যন্ত1GB>= R27.3
Windows X64: 75%মোট শারীরিক স্মৃতি পর্যন্ত2GBLinux/Solaris X64: 50%উপলব্ধ শারীরিক মেমরি পর্যন্ত2GBWindows x86: 75%মোট শারীরিক স্মৃতি পর্যন্ত1GBLinux/Solaris X86: 50%উপলব্ধ শারীরিক মেমরি পর্যন্ত1GBTypical Size:
-Xmx1g-Xmx2084M-Xmx4g-Xmx6g-Xmx8gFunction/ Effect:
Xmxআকারের মেমরির
সর্বোচ্চ ব্যবহার করতে দেয়Xmx, হবেjava.lang.OutOfMemoryError
OutOfMemoryError?
Xmxমান
অতিক্রম-Xmx4gথেকে-Xmx8gঅফিসিয়াল ডকটি দেখুন: এক্স কমান্ড-লাইন বিকল্প
বেশ কয়েকটি পরামিতি প্রজন্মের আকারকে প্রভাবিত করে। নিম্নলিখিত চিত্রটি স্তূপে প্রতিশ্রুতিবদ্ধ স্থান এবং ভার্চুয়াল স্থানের মধ্যে পার্থক্য চিত্রিত করে। ভার্চুয়াল মেশিনের সূচনাতে, গাদা করার জন্য পুরো স্থানটি সংরক্ষিত থাকে। সংরক্ষিত স্থানের আকারটি -Xmxবিকল্পের সাথে নির্দিষ্ট করা যেতে পারে । যদি -Xmsপ্যারামিটারের মানটি প্যারামিটারের মানের চেয়ে ছোট -Xmxহয় তবে সংরক্ষিত সমস্ত স্থান তত্ক্ষণাত ভার্চুয়াল মেশিনে প্রতিশ্রুতিবদ্ধ হয় না। এই চিত্রটিতে অনাবৃত স্থানটিকে "ভার্চুয়াল" লেবেলযুক্ত করা হয়েছে। স্তূপের বিভিন্ন অংশ (স্থায়ী প্রজন্ম, মেয়াদী প্রজন্ম এবং তরুণ প্রজন্ম) প্রয়োজন হিসাবে ভার্চুয়াল স্পেসের সীমাতে বাড়তে পারে।
ডিফল্টরূপে, ভার্চুয়াল মেশিনটি প্রতিটি সংগ্রহের একটি নির্দিষ্ট সীমার মধ্যে লাইভ অবজেক্টের জন্য মুক্ত জায়গার অনুপাত রাখার চেষ্টা করার জন্য প্রতিটি সংগ্রহের স্তূপে বড় হয় বা সঙ্কুচিত হয়। এই লক্ষ্য পরিসীমাটি পরামিতিগুলির দ্বারা শতাংশ হিসাবে সেট করা হয়েছে - XX:MinHeapFreeRatio=<minimum>এবং -XX:MaxHeapFreeRatio=<maximum>এবং মোট আকারটি নীচে -Xms<min>এবং উপরের দ্বারা সীমাবদ্ধ -Xmx<max>।
পরামিতি ডিফল্ট মান
MinHeapFreeRatio 40
ম্যাক্সহ্যাপফ্রিআরটিও 70
-এক্সএমএস 3670 কে
-এক্সএমএক্স 64 মি
-৪-বিট সিস্টেমে হ্যাপ সাইজের প্যারামিটারগুলির ডিফল্ট মানগুলি প্রায় 30% দ্বারা ছোট করে দেওয়া হয়। এই বৃদ্ধিটি একটি 64-বিট সিস্টেমে বৃহত আকারের অবজেক্টের ক্ষতিপূরণ দেওয়ার জন্য।
এই পরামিতিগুলির সাথে, যদি কোনও প্রজন্মের মুক্ত স্থানের শতাংশ 40% এর নিচে নেমে আসে তবে প্রজন্মের সর্বাধিক অনুমোদিত আকার পর্যন্ত 40% মুক্ত স্থান বজায় রাখতে প্রসারিত করা হবে। একইভাবে, যদি মুক্ত স্থানটি 70% এর বেশি হয়ে যায়, তবে প্রজন্মকে চুক্তিবদ্ধ করা হবে যাতে কেবলমাত্র 70% স্থানটি বিনামূল্যে প্রজন্মের সর্বনিম্ন আকারের সাপেক্ষে।
বড় সার্ভার অ্যাপ্লিকেশনগুলি প্রায়শই এই ডিফল্টগুলির সাথে দুটি সমস্যা অনুভব করে। একটি হ'ল ধীরে ধীরে শুরু, কারণ প্রাথমিক স্তূপটি ছোট এবং অবশ্যই অনেকগুলি বড় সংগ্রহের মধ্যে এটি পুনরায় আকার দিতে হবে। আরও চাপ দেওয়ার সমস্যাটি হ'ল বেশিরভাগ সার্ভার অ্যাপ্লিকেশনগুলির জন্য ডিফল্ট সর্বাধিক হিপ আকারটি অযৌক্তিকভাবে ছোট। সার্ভার অ্যাপ্লিকেশনগুলির জন্য থাম্বের বিধিগুলি হ'ল:
সাধারণত, প্রসেসরের সংখ্যা বাড়ার সাথে সাথে স্মৃতিশক্তি বাড়ান, যেহেতু বরাদ্দ সমান্তরাল করা যায়।
নেই সম্পূর্ণ নিবন্ধ