دستور java
از طیف
گستردهای
از
گزینهها
پشتیبانی
میکند که
میتوان
آنها را به
دستههای
زیر تقسیم
کرد:
•گزینههای
استاندارد
(Standard Options)
•گزینههای
غیراستاندارد
(Non-Standard Options)
•گزینههای
پیشرفته
زمان اجرا (Advanced
Runtime Options)
•گزینههای
پیشرفته
کامپایلر JIT (Advanced
JIT Compiler Options)
•گزینههای
پیشرفته
قابلیت
سرویسدهی
(Advanced Serviceability Options)
•گزینههای
پیشرفته
جمعآوری
زباله (Advanced Garbage Collection
Options)
پشتیبانی
از
گزینههای
استاندارد
توسط تمام
پیادهسازیهای
ماشین
مجازی جاوا
(JVM) تضمین شده
است. این
گزینهها
برای
کارهای
متداول، از
جمله بررسی
نسخه JRE،
تنظیم مسیر
کلاس (class path)،
فعالسازی
خروجی با
جزئیات
کامل (verbose)، و
غیره
استفاده
میشوند.
گزینههای
غیراستاندارد،
گزینههایی
با کاربرد
عمومی و
مختص ماشین
مجازی Java HotSpot
هستند؛
بنابراین
پشتیبانی
از آنها
توسط تمامی
پیادهسازیهای
JVM تضمین
نمیشود و
ممکن است
تغییر کنند.
این
گزینهها
با -X شروع
میشوند.
استفاده
از
گزینههای
پیشرفته
برای مصارف
عادی توصیه
نمیشود.
اینها
گزینههای
مخصوص
توسعهدهندگان
هستند که به
منظور
تنظیم
بخشهای
خاصی از
عملکرد
ماشین
مجازی Java HotSpot به
کار
میروند؛
این
گزینهها
اغلب
نیازمندیهای
سیستمی
خاصی دارند
و ممکن است
نیازمند
دسترسی
ویژه به
پارامترهای
پیکربندی
سیستم
باشند.
همچنین
پشتیبانی
از آنها
توسط تمامی
پیادهسازیهای
JVM تضمین
نمیشود و
ممکن است
تغییر کنند.
گزینههای
پیشرفته با
-XX شروع
میشوند.
برای
اطلاع از
گزینههایی
که در آخرین
نسخه منسوخ
یا حذف
شدهاند،
بخشی به نام
«گزینههای
منسوخ و
حذفشده» (Deprecated
and Removed Options) در
انتهای این
سند وجود
دارد.
گزینههای
بولی (Boolean) برای
فعالسازی
قابلیتی که
بهطور
پیشفرض
غیرفعال
است یا
غیرفعالسازی
قابلیتی که
بهطور
پیشفرض
فعال است به
کار
میروند.
چنین
گزینههایی
نیازی به
پارامتر
ندارند.
گزینههای
بولی -XX با
علامت مثبت
(-XX:+OptionName) فعال و
با علامت
منفی (-XX:-OptionName)
غیرفعال
میشوند.
برای
گزینههایی
که نیازمند
یک آرگومان
هستند،
آرگومان
ممکن است با
یک فاصله،
دونقطه (:) یا
علامت
مساوی (=) از
نام گزینه
جدا شود، یا
اینکه
آرگومان
مستقیماً
به دنبال
گزینه
بیاید (نحو
دقیق برای
هر گزینه
متفاوت است).
اگر انتظار
میرود
اندازه را
به بایت
مشخص کنید،
میتوانید
از هیچ
پسوندی
استفاده
نکنید، یا
از پسوند k
یا K برای
کیلوبایت
(KB)، m یا M
برای
مگابایت (MB)،
g یا G برای
گیگابایت (GB)
استفاده
نمایید. به
عنوان
مثال، برای
تنظیم
اندازه روی
۸
گیگابایت،
میتوانید
یکی از
مقادیر 8g،
8192m، 8388608k، یا
8589934592 را به
عنوان
آرگومان
مشخص کنید.
اگر انتظار
میرود
درصد مشخص
شود، از
عددی بین ۰
تا ۱
استفاده
کنید (به
عنوان
مثال،
مقدار 0.25 را
برای ۲۵٪
وارد کنید).
اینها
متداولترین
گزینههایی
هستند که
توسط تمام
پیادهسازیهای
JVM پشتیبانی
میشوند.
-agentlib:libname[=options]
کتابخانه
عامل بومی (native
agent library)
مشخصشده
را
بارگذاری
میکند. پس
از نام
کتابخانه،
میتوان از
فهرستی از
گزینههای
ویژه
کتابخانه
که با کاما
از هم جدا
شدهاند
استفاده
کرد.
اگر گزینه
-agentlib:foo مشخص
شود، در این
صورت JVM تلاش
میکند
کتابخانهای
با نام libfoo.so را
در مکانی که
توسط متغیر
سیستمی LD_LIBRARY_PATH
مشخص شده
است (در OS X این
متغیر DYLD_LIBRARY_PATH
است)
بارگذاری
کند.
مثال زیر
نحوه
بارگذاری
کتابخانه
ابزار
پروفایلسازی
هیپ (HPROF) و
دریافت
اطلاعات
نمونهبرداری
CPU در هر ۲۰
میلیثانیه
با عمق پشته
۳ را نشان
میدهد:
-agentlib:hprof=cpu=samples,interval=20,depth=3
مثال زیر
نحوه
بارگذاری
کتابخانه
پروتکل
ارتباط
خطایابی
جاوا (JDWP) و گوش
دادن به
اتصال سوکت
روی درگاه
۸۰۰۰، با
تعلیق JVM پیش
از
بارگذاری
کلاس اصلی
را نشان
میدهد:
-agentlib:jdwp=transport=dt_socket,server=y,address=8000
برای کسب
اطلاعات
بیشتر
درباره
کتابخانههای
عامل بومی،
به موارد
زیر مراجعه
کنید:
-agentpath:pathname[=options]
کتابخانه
عامل بومی
مشخصشده
با نام مسیر
مطلق را
بارگذاری
میکند. این
گزینه
معادل -agentlib
است، اما از
مسیر کامل و
نام فایل
کتابخانه
استفاده
میکند.
-client
-Dproperty=value
مقدار یک
ویژگی
سیستمی را
تنظیم
میکند.
متغیر property
رشتهای
بدون فاصله
است که نام
ویژگی را
نشان
میدهد.
متغیر value
رشتهای
است که
مقدار
ویژگی را
نشان
میدهد. اگر
value رشتهای
دارای
فاصله
باشد، آن را
درون علامت
نقلقول
قرار دهید
(برای مثال
-Dfoo="foo bar").
-d32
برنامه
را در یک
محیط
۳۲بیتی
اجرا
میکند. اگر
محیط
۳۲بیتی نصب
نشده باشد
یا
پشتیبانی
نشود،
خطایی
گزارش
خواهد شد.
بهطور
پیشفرض،
برنامه در
یک محیط
۳۲بیتی
اجرا
میشود مگر
اینکه از یک
سیستم
۶۴بیتی
استفاده
شود.
-d64
برنامه
را در یک
محیط
۶۴بیتی
اجرا
میکند. اگر
محیط
۶۴بیتی نصب
نشده باشد
یا
پشتیبانی
نشود،
خطایی
گزارش
خواهد شد.
بهطور
پیشفرض،
برنامه در
یک محیط
۳۲بیتی
اجرا
میشود مگر
اینکه از یک
سیستم
۶۴بیتی
استفاده
شود.
در حال
حاضر تنها Java
HotSpot Server VM از
عملکرد
۶۴بیتی
پشتیبانی
میکند و
گزینه -server با
استفاده از
-d64 بهطور
ضمنی اعمال
میشود.
گزینه -client با
استفاده از
-d64 نادیده
گرفته
میشود. این
مورد ممکن
است در
انتشارهای
آینده
تغییر کند.
-disableassertions[:[packagename]...|:classname]
-da[:[packagename]...|:classname]
گزارههای
شرطی (assertions) را
غیرفعال
میکند.
بهطور
پیشفرض،
گزارههای
شرطی در
تمام
بستهها و
کلاسها
غیرفعال
هستند.
بدون هیچ
آرگومانی،
-disableassertions (-da)
گزارههای
شرطی را در
تمام
بستهها و
کلاسها
غیرفعال
میکند. با
آرگومان packagename
که به ... ختم
میشود،
این سوییچ
گزارههای
شرطی را در
بسته
مشخصشده و
هرگونه
زیربسته
غیرفعال
میکند. اگر
آرگومان
صرفاً ...
باشد، این
سوییچ
گزارههای
شرطی را در
بسته
بینام در
دایرکتوری
کاری جاری
غیرفعال
میکند. با
آرگومان
classname، این
سوییچ
گزارههای
شرطی را در
کلاس
مشخصشده
غیرفعال
میکند.
گزینه -disableassertions
(-da) روی تمام
بارگذارندههای
کلاس و
کلاسهای
سیستمی (که
بارگذارنده
کلاس
ندارند)
اعمال
میشود. یک
استثنا
برای این
قاعده وجود
دارد: اگر
این گزینه
بدون هیچ
آرگومانی
ارائه شود،
روی
کلاسهای
سیستمی
اعمال
نمیشود.
این ویژگی
غیرفعال
کردن
گزارههای
شرطی را در
تمام
کلاسها به
جز
کلاسهای
سیستمی
آسان
میکند.
گزینه -disablesystemassertions
به شما
امکان
میدهد
گزارههای
شرطی را در
تمام
کلاسهای
سیستمی
غیرفعال
کنید.
برای
فعالسازی
صریح
گزارههای
شرطی در
بستهها یا
کلاسهای
خاص، از
گزینه -enableassertions
(-ea) استفاده
کنید. هر دو
گزینه را
میتوان
همزمان
استفاده
کرد. برای
مثال، جهت
اجرای
برنامه MyClass
با
گزارههای
شرطیِ فعال
در بسته com.wombat.fruitbat
(و هرگونه
زیربسته)
اما
غیرفعال در
کلاس com.wombat.fruitbat.Brickbat،
از دستور
زیر
استفاده
کنید:
java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat MyClass
-disablesystemassertions
-dsa
گزارههای
شرطی را در
تمام
کلاسهای
سیستمی
غیرفعال
میکند.
-enableassertions[:[packagename]...|:classname]
-ea[:[packagename]...|:classname]
گزارههای
شرطی (assertions) را
فعال
میکند.
بهطور
پیشفرض،
گزارههای
شرطی در
تمام
بستهها و
کلاسها
غیرفعال
هستند.
بدون هیچ
آرگومانی،
-enableassertions (-ea)
گزارههای
شرطی را در
تمام
بستهها و
کلاسها
فعال
میکند. با
آرگومان packagename
که به ... ختم
میشود،
این سوییچ
گزارههای
شرطی را در
بسته
مشخصشده و
هرگونه
زیربسته
فعال
میکند. اگر
آرگومان
صرفاً ...
باشد، این
سوییچ
گزارههای
شرطی را در
بسته
بینام در
دایرکتوری
کاری جاری
فعال
میکند. با
آرگومان
classname، این
سوییچ
گزارههای
شرطی را در
کلاس
مشخصشده
فعال
میکند.
گزینه -enableassertions
(-ea) روی تمام
بارگذارندههای
کلاس و
کلاسهای
سیستمی (که
بارگذارنده
کلاس
ندارند)
اعمال
میشود. یک
استثنا
برای این
قاعده وجود
دارد: اگر
این گزینه
بدون هیچ
آرگومانی
ارائه شود،
روی
کلاسهای
سیستمی
اعمال
نمیشود.
این ویژگی
فعال کردن
گزارههای
شرطی را در
تمام
کلاسها به
جز
کلاسهای
سیستمی
آسان
میکند.
گزینه -enablesystemassertions
یک سوییچ
جداگانه
برای فعال
کردن
گزارههای
شرطی در
تمام
کلاسهای
سیستمی
فراهم
میکند.
برای
غیرفعالسازی
صریح
گزارههای
شرطی در
بستهها یا
کلاسهای
خاص، از
گزینه -disableassertions
(-da) استفاده
کنید. اگر یک
دستور شامل
چندین
نمونه از
این
سوییچها
باشد،
آنها به
ترتیب قبل
از
بارگذاری
هر کلاسی
پردازش
میشوند.
برای مثال،
جهت اجرای
برنامه MyClass
با
گزارههای
شرطیِ فعال
فقط در بسته
com.wombat.fruitbat (و
هرگونه
زیربسته)
اما
غیرفعال در
کلاس com.wombat.fruitbat.Brickbat،
از دستور
زیر
استفاده
کنید:
java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat MyClass
-enablesystemassertions
-esa
گزارههای
شرطی را در
تمام
کلاسهای
سیستمی
فعال
میکند.
-help
-?
اطلاعات
نحوه
استفاده از
دستور java را
بدون اجرای
واقعی JVM
نمایش
میدهد.
-jar filename
برنامهای
را که درون
یک فایل JAR
بستهبندی
شده است
اجرا
میکند.
آرگومان
filename
نام یک فایل JAR
به همراه
مانیفستی
است که شامل
خطی به شکل
Main-Class:classname است؛
خطی که
کلاسی با
متد
public static void main(String[] args)
را که به
عنوان نقطه
شروع
برنامه شما
عمل میکند
تعریف
مینماید.
هنگامی که
از گزینه -jar
استفاده
میکنید،
فایل JAR
مشخصشده
منبع تمام
کلاسهای
کاربر است و
سایر
تنظیمات
مسیر کلاس (class
path) نادیده
گرفته
میشوند.
برای
اطلاعات
بیشتر
درباره
فایلهای JAR،
به منابع
زیر مراجعه
کنید:
•jar(1)
-javaagent:jarpath[=options]
-jre-restrict-search
محیطهای
JRE خصوصی
کاربر را در
جستجوی
نسخه لحاظ
میکند.
-no-jre-restrict-search
محیطهای
JRE خصوصی
کاربر را از
جستجوی
نسخه
مستثنی
میکند.
-server
-showversion
اطلاعات
نسخه را
نمایش
میدهد و به
اجرای
برنامه
ادامه
میدهد. این
گزینه
معادل
گزینه -version
است، با این
تفاوت که
گزینه اخیر
به JVM دستور
میدهد پس
از نمایش
اطلاعات
نسخه خارج
شود.
-splash:imgname
صفحه
آغازین (splash screen)
را با تصویر
مشخصشده
توسط
imgname
نمایش
میدهد.
برای مثال،
جهت نمایش
فایل
splash.gif از
پوشه
images
هنگام شروع
برنامه، از
گزینه زیر
استفاده
کنید:
-splash:images/splash.gif
-verbose:class
اطلاعات
مربوط به هر
کلاس
بارگذاریشده
را نمایش
میدهد.
-verbose:gc
اطلاعات
مربوط به هر
رویداد
جمعآوری
زباله (GC) را
نمایش
میدهد.
-verbose:jni
اطلاعات
مربوط به
استفاده از
متدهای
بومی و سایر
فعالیتهای
رابط بومی
جاوا (JNI) را
نمایش
میدهد.
-version
اطلاعات
نسخه را
نمایش
میدهد و
سپس خارج
میشود. این
گزینه
معادل
گزینه -showversion
است، با این
تفاوت که
گزینه اخیر
به JVM دستور
خروج پس از
نمایش
اطلاعات
نسخه را
نمیدهد.
-version:release
نسخه
انتشار
مورد
استفاده
برای اجرای
برنامه را
مشخص
میکند. اگر
نسخه دستور
java
فراخوانیشده
با این
مشخصات
مطابقت
نداشته
باشد و یک
پیادهسازی
مناسب روی
سیستم یافت
شود،
پیادهسازی
مناسب
استفاده
خواهد شد.
آرگومان
release یا رشته
نسخه دقیق و
یا فهرستی
از
رشتههای
نسخه و
محدودهها
را که با
فاصله از هم
جدا
شدهاند
مشخص
میکند. یک
رشته نسخه
تعیین
توسعهدهنده
برای شماره
نسخه به شکل
زیر است:
1.x.0_u (که در
آن x شماره
نسخه اصلی (major)
و u شماره
نسخه
بهروزرسانی
(update) است). یک
محدوده
نسخه شامل
یک رشته
نسخه است که
به دنبال آن
یک علامت
بعلاوه (+)
برای مشخص
کردن این
نسخه یا
بالاتر، یا
بخشی از یک
رشته نسخه
به همراه یک
ستاره (*)
برای تعیین
هر رشته
نسخه با
پیشوند
منطبق
میآید.
رشتهها و
محدودههای
نسخه را
میتوان با
استفاده از
یک فاصله
برای ترکیب
منطقی OR یا
علامت
امپرسند (&)
برای ترکیب
منطقی AND دو
رشته/محدوده
نسخه با
یکدیگر
ترکیب کرد.
برای مثال،
اگر اجرای
کلاس یا
فایل JAR به JRE 6u13 (1.6.0_13)
یا هر JRE 6 با
شروع از 6u10 (1.6.0_10)
نیاز دارد،
عبارت زیر
را مشخص
کنید:
-version:"1.6.0_13 1.6* & 1.6.0_10+"
علامت
نقلقول
تنها در
صورتی لازم
است که در
پارامتر
release
فاصله وجود
داشته باشد.
برای
فایلهای JAR،
اولویت بر
این است که
نیازمندیهای
نسخه به جای
خط فرمان،
در مانیفست
فایل JAR مشخص
شوند.
این
گزینهها،
گزینههایی
با کاربرد
عمومی
هستند که
مختص ماشین
مجازی
هاتاسپات
جاوا (Java HotSpot Virtual Machine)
میباشند.
-X
راهنمای
تمام
گزینههای
موجود -X را
نمایش
میدهد.
-Xbatch
کامپایل
در
پسزمینه
را غیرفعال
میکند.
بهطور
پیشفرض، JVM
متد را
بهعنوان
یک تسک
پسزمینه
کامپایل
میکند و تا
زمان پایان
کامپایل
پسزمینه،
متد را در
حالت مفسر
اجرا
مینماید.
فلگ
-Xbatch
کامپایل
پسزمینه
را غیرفعال
میکند تا
کامپایل
تمام متدها
بهعنوان
یک تسک
پیشزمینه
تا زمان
تکمیل پیش
برود.
این گزینه
معادل -XX:-BackgroundCompilation
است.
-Xbootclasspath:path
فهرستی
از
دایرکتوریها،
فایلهای JAR و
آرشیوهای ZIP
را مشخص
میکند که
با دونقطه (:)
از هم جدا
شدهاند تا
برای یافتن
فایلهای
کلاس بوت (Boot Class Files)
جستجو شوند.
این موارد
بهجای
فایلهای
کلاس بوت
گنجاندهشده
در JDK استفاده
میشوند.
برنامههایی
را که از این
گزینه برای
جایگزینی
یک کلاس در
rt.jar استفاده
میکنند
مستقر
نکنید،
زیرا این
کار مجوز کد
باینری JRE را
نقض
میکند.
-Xbootclasspath/a:path
فهرستی
از
دایرکتوریها،
فایلهای JAR و
آرشیوهای ZIP
جداشده با
دونقطه (:) را
جهت الحاق
به انتهای
مسیر کلاس
بوتاسترپ
پیشفرض (Bootstrap Class
Path) مشخص
میکند.
برنامههایی
را که از این
گزینه برای
جایگزینی
یک کلاس در
rt.jar استفاده
میکنند
مستقر
نکنید،
زیرا این
کار مجوز کد
باینری JRE را
نقض
میکند.
-Xbootclasspath/p:path
فهرستی
از
دایرکتوریها،
فایلهای JAR و
آرشیوهای ZIP
جداشده با
دونقطه (:) را
جهت افزودن
به ابتدای
مسیر کلاس
بوتاسترپ
پیشفرض (Bootstrap Class
Path) مشخص
میکند.
برنامههایی
را که از این
گزینه برای
جایگزینی
یک کلاس در
rt.jar استفاده
میکنند
مستقر
نکنید،
زیرا این
کار مجوز کد
باینری JRE را
نقض
میکند.
-Xcheck:jni
بررسیهای
تکمیلی را
برای توابع
رابط بومی
جاوا (Java Native Interface یا JNI)
انجام
میدهد.
بهطور
مشخص،
پارامترهای
ارائهشده
به تابع JNI و
دادههای
محیط زمان
اجرا را پیش
از پردازش
درخواست JNI
اعتبارسنجی
میکند.
مواجهه با
هرگونه
داده
نامعتبر
نشاندهنده
وجود مشکل
در کد بومی (Native
Code) است و JVM در
چنین
مواردی با
یک خطای
غیرقابلبازیابی
متوقف
خواهد شد.
هنگام
استفاده از
این گزینه،
افت کارایی
را انتظار
داشته
باشید.
-Xcomp
کامپایل
اجباری
متدها را در
اولین
فراخوانی
اعمال
میکند.
بهطور
پیشفرض، Client VM
(
-client) تعداد
۱,۰۰۰
فراخوانی
تفسیری متد
و Server VM (
-server) تعداد
۱۰,۰۰۰
فراخوانی
تفسیری متد
را برای
جمعآوری
اطلاعات
لازم جهت
کامپایل
بهینه
انجام
میدهند.
تعیین
گزینه
-Xcomp
فراخوانیهای
تفسیری متد
را غیرفعال
میکند تا
سرعت
کامپایل به
قیمت کاهش
بهرهوری
افزایش
یابد.
همچنین
میتوانید
با استفاده
از گزینه
-XX:CompileThreshold تعداد
فراخوانیهای
تفسیری متد
پیش از
کامپایل را
تغییر
دهید.
-Xdebug
هیچ کاری
انجام
نمیدهد؛
برای
سازگاری با
نسخههای
پیشین
ارائه شده
است.
-Xdiag
پیامهای
تشخیصی
اضافی را
نمایش
میدهد.
-Xfuture
بررسیهای
سختگیرانه
قالب فایل
کلاس (Class-File Format) را
فعال
میکند که
انطباق
دقیق با
مشخصات
قالب فایل
کلاس را
اعمال
مینماید.
به
توسعهدهندگان
توصیه
میشود
هنگام
توسعه
کدهای جدید
از این فلگ
استفاده
کنند، زیرا
بررسیهای
سختگیرانهتر
در
انتشارهای
آینده به
حالت
پیشفرض
تبدیل
خواهند شد.
-Xint
برنامه
را فقط در
حالت
تفسیری (Interpreted-Only)
اجرا
میکند.
کامپایل به
کد بومی
غیرفعال
است و تمام
بایتکد
توسط مفسر
اجرا
میشود.
مزایای
کارایی
ارائهشده
توسط
کامپایلر
درجا (JIT) در
این حالت
وجود
ندارد.
-Xinternalversion
اطلاعات
دقیقتری
از نسخه JVM را
نسبت به
گزینه -version
نمایش داده
و سپس خارج
میشود.
-Xloggc:filename
فایلی را
تنظیم
میکند که
اطلاعات
تفصیلی
رویدادهای
زبالهروب (GC)
باید برای
لاگگیری
به آن هدایت
شوند.
اطلاعات
نوشتهشده
در این فایل
مشابه
خروجی
-verbose:gc
است که زمان
سپریشده
از اولین
رویداد GC را
پیش از هر
رویداد
ثبتشده
درج میکند.
اگر هر دو
گزینه به یک
دستور
java
داده شوند،
گزینه
-Xloggc بر
گزینه
-verbose:gc
ارجحیت
داشته و آن
را
بازنویسی
میکند.
مثال:
-Xloggc:garbage-collection.log
-Xmaxjitcodesize=size
حداکثر
اندازه
حافظه موقت
کد (Code Cache) را (به
بایت) برای
کدهای
کامپایلشده
با JIT مشخص
میکند. حرف
k یا
K را
برای
کیلوبایت،
m یا
M را
برای
مگابایت و
g
یا
G را برای
گیگابایت
اضافه کنید.
حداکثر
اندازه
پیشفرض
کَش کد ۲۴۰
مگابایت
است؛ اگر
کامپایل
لایهای (Tiered Compilation)
را با گزینه
-XX:-TieredCompilation
غیرفعال
کنید،
اندازه
پیشفرض ۴۸
مگابایت
خواهد بود:
این گزینه
معادل
-XX:ReservedCodeCacheSize
است.
-Xmixed
تمام
بایتکدها
را از طریق
مفسر اجرا
میکند،
بهجز
متدهای داغ (Hot
Methods) که به کد
بومی
کامپایل
میشوند.
-Xmnsize
اندازه
اولیه و
حداکثر
اندازه (به
بایت) هیپ (Heap)
را برای نسل
جوان (Young Generation / Nursery)
تنظیم
میکند. حرف
k یا
K را
برای
کیلوبایت،
m یا
M را
برای
مگابایت و
g
یا
G را برای
گیگابایت
اضافه کنید.
ناحیه نسل
جوان در
حافظه هیپ
برای اشیاء
جدید
استفاده
میشود.
فرآیند
جمعآوری
زباله (GC) در
این ناحیه
بیشتر از
سایر نواحی
انجام
میگیرد.
اگر اندازه
نسل جوان
خیلی کوچک
باشد،
تعداد
زیادی
عملیات
جزئی
جمعآوری
زباله (Minor GC)
انجام
خواهد شد.
اگر این
اندازه
خیلی بزرگ
باشد، فقط
عملیاتهای
کامل
جمعآوری
زباله (Full GC)
اجرا
میشوند که
تکمیل
آنها ممکن
است زمان
زیادی ببرد.
شرکت
اوراکل
توصیه
میکند
اندازه نسل
جوان را بین
یکدوم تا
یکچهارم
کل اندازه
هیپ نگه
دارید.
مثالهای
زیر نحوه
تنظیم
اندازه
اولیه و
حداکثری
نسل جوان را
روی ۲۵۶
مگابایت با
واحدهای
مختلف نشان
میدهند:
-Xmn256m
-Xmn262144k
-Xmn268435456
بهجای
استفاده از
گزینه
-Xmn جهت
تنظیم
همزمان
اندازه
اولیه و
حداکثری
هیپ برای
نسل جوان،
میتوانید
از
-XX:NewSize برای
تنظیم
اندازه
اولیه و از
-XX:MaxNewSize برای
تنظیم
حداکثر
اندازه
استفاده
کنید.
-Xmssize
اندازه
اولیه (به
بایت) هیپ را
تنظیم
میکند. این
مقدار باید
مضربی از
۱۰۲۴ و
بزرگتر از
۱ مگابایت
باشد. حرف
k
یا
K را برای
مشخص کردن
کیلوبایت،
m یا
M را
برای
مگابایت و
g
یا
G را برای
گیگابایت
اضافه کنید.
مثالهای
زیر نحوه
تنظیم
اندازه
حافظه
تخصیصیافته
را روی ۶
مگابایت با
واحدهای
مختلف نشان
میدهند:
-Xms6291456
-Xms6144k
-Xms6m
اگر این
گزینه را
تنظیم
نکنید،
اندازه
اولیه
برابر با
مجموع
اندازههای
تخصیصیافته
برای نسل
قدیم (Old Generation) و
نسل جوان
تنظیم
خواهد شد.
اندازه
اولیه هیپ
برای نسل
جوان را
میتوان با
استفاده از
گزینه
-Xmn یا
گزینه
-XX:NewSize
تنظیم کرد.
-Xmxsize
حداکثر
اندازه (به
بایت) استخر
تخصیص
حافظه را
مشخص
میکند. این
مقدار باید
مضربی از
۱۰۲۴ و
بزرگتر از
۲ مگابایت
باشد. حرف
k
یا
K را برای
کیلوبایت،
m یا
M را
برای
مگابایت و
g
یا
G را برای
گیگابایت
اضافه کنید.
مقدار
پیشفرض در
زمان اجرا
بر اساس
پیکربندی
سیستم
انتخاب
میشود. در
استقرارهای
سرور،
معمولاً
-Xms و
-Xmx روی یک
مقدار
یکسان
تنظیم
میشوند.
بخش «Ergonomics» را
در
Java SE HotSpot Virtual Machine Garbage Collection Tuning
Guide به آدرس
http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html
ببینید.
مثالهای
زیر نحوه
تنظیم
حداکثر
اندازه
مجاز حافظه
تخصیصیافته
را روی ۸۰
مگابایت با
واحدهای
مختلف نشان
میدهند:
-Xmx83886080
-Xmx81920k
-Xmx80m
گزینه
-Xmx
معادل
-XX:MaxHeapSize
است.
-Xnoclassgc
عملیات
جمعآوری
زباله (GC) را
برای
کلاسها
غیرفعال
میکند. این
امر
میتواند
مقداری از
زمان GC را
ذخیره کرده
و وقفههای
اجرای
برنامه را
کوتاهتر
نماید.
هنگامی که
گزینه -Xnoclassgc را
در زمان
راهاندازی
تعیین
میکنید،
اشیاء کلاس
در برنامه
در طول GC
دستنخورده
باقی
میمانند و
همواره
زنده تلقی
خواهند شد.
این موضوع
میتواند
منجر به
اشغال
دائمی
حافظه
بیشتر شود و
در صورت عدم
دقت، خطای
اتمام
حافظه (Out Of Memory Exception)
رخ خواهد
داد.
-Xprof
برنامه
در حال اجرا
را
پروفایلبندی
(تحلیل
کارایی)
کرده و
دادههای
آن را به
خروجی
استاندارد
ارسال
میکند. این
گزینه
بهعنوان
ابزاری
کاربردی در
مرحله
توسعه
برنامه
ارائه شده و
برای
استفاده در
سیستمهای
عملیاتی (Production)
در نظر
گرفته نشده
است.
-Xrs
استفاده
از
سیگنالهای
سیستمعامل
توسط JVM را
کاهش
میدهد.
قلابهای
خاموشی (Shutdown Hooks)
امکان
بستهشدن
منظم
برنامه
جاوا را از
طریق اجرای
کدهای
پاکسازی
کاربر
(مانند بستن
اتصالات
پایگاهداده)
هنگام
خاموشی
فراهم
میسازند،
حتی اگر JVM
بهطور
ناگهانی
خاتمه
یابد.
ماشین
مجازی JVM
سیگنالها
را رهگیری
میکند تا
قلابهای
خاموشی را
برای
پایانهای
غیرمنتظره
اجرا کند.
ماشین
مجازی JVM از
سیگنالهای
SIGHUP، SIGINT و SIGTERM
برای شروع
اجرای
قلابهای
خاموشی
استفاده
میکند.
ماشین
مجازی JVM از
سازوکار
مشابهی
برای
پیادهسازی
قابلیت
تخلیه پشته
رشتهها (Thread Dump)
بهمنظور
اشکالزدایی
بهره
میبرد.
ماشین
مجازی JVM از
سیگنال SIGQUIT
برای تخلیه
پشته
رشتهها
استفاده
میکند.
برنامههایی
که JVM را درون
خود جای
دادهاند
(Embedded)، غالباً
نیاز به
گرفتن
سیگنالهایی
نظیر SIGINT یا
SIGTERM دارند که
میتواند
به تداخل با
گردانندههای
سیگنال JVM
منجر شود.
گزینه -Xrs
برای رفع
این مشکل در
دسترس است.
هنگامی که
از -Xrs
استفاده
میشود،
ماسکهای
سیگنال
برای SIGINT،
SIGTERM، SIGHUP و SIGQUIT
توسط JVM
تغییر
نمیکنند و
گردانندههای
سیگنال
برای این
سیگنالها
نصب
نمیشوند.
تعیین
گزینه -Xrs دو
پیامد به
همراه
دارد:
•تخلیه
پشته
رشتهها (Thread Dumps)
از طریق SIGQUIT
در دسترس
نخواهد
بود.
•کد
کاربر
مسئول
اجرای
قلابهای
خاموشی
خواهد بود،
بهعنوان
مثال با
فراخوانی
System.exit() هنگامی
که قرار است JVM
خاتمه
یابد.
-Xshare:mode
حالت
اشتراکگذاری
دادههای
کلاس (Class Data Sharing یا CDS)
را تعیین
میکند.
آرگومانهای
ممکن برای
mode
در این
گزینه
عبارتند از:
auto
در صورت
امکان از CDS
استفاده
شود. این
مقدار
پیشفرض
برای Java HotSpot 32-Bit Client VM
است.
on
استفاده
از CDS الزامی
است. در
صورتی که
نتوان از
اشتراکگذاری
دادههای
کلاس
استفاده
کرد، پیام
خطا چاپ
کرده و خارج
شود.
off
از CDS
استفاده
نشود. این
مقدار
پیشفرض
برای Java HotSpot 32-Bit Server VM، Java
HotSpot 64-Bit Client VM و Java HotSpot 64-Bit Server VM
است.
dump
تولید
دستی آرشیو CDS.
مسیر کلاس
برنامه را
همانطور
که در
«تنظیم
مسیر کلاس»
شرح داده
شده است
تعیین کنید.
شما باید
با هر
انتشار
جدید JDK
آرشیو CDS را
مجدداً
ایجاد
کنید.
-XshowSettings:category
تنظیمات
را نمایش
داده و
ادامه
میدهد.
آرگومانهای
ممکن برای
category در این
گزینه
عبارتند از:
all
تمام
دستهبندیهای
تنظیمات را
نمایش
میدهد. این
مقدار
پیشفرض
است.
locale
تنظیمات
مربوط به
محلیسازی
(Locale) را نمایش
میدهد.
properties
تنظیمات
مربوط به
ویژگیهای
سیستم (System Properties) را
نمایش
میدهد.
vm
تنظیمات
JVM را نمایش
میدهد.
-Xsssize
اندازه
پشته رشته (Thread
Stack Size) را (به
بایت) تنظیم
میکند. حرف
k یا
K را
برای
کیلوبایت (KB)،
m یا
M را
برای
مگابایت (MB) و
g یا
G را
برای
گیگابایت (GB)
اضافه کنید.
مقدار
پیشفرض
بستگی به
پلتفرم
دارد:
•Linux/ARM (32-bit): 320 KB
•Linux/i386 (32-bit): 320 KB
•Linux/x64 (64-bit): 1024 KB
•OS X (64-bit): 1024 KB
•Oracle Solaris/i386 (32-bit): 320 KB
•Oracle Solaris/x64 (64-bit): 1024 KB
مثالهای
زیر نحوه
تنظیم
اندازه
پشته رشته
را روی ۱۰۲۴
کیلوبایت
با واحدهای
مختلف نشان
میدهند:
-Xss1m
-Xss1024k
-Xss1048576
این گزینه
معادل
-XX:ThreadStackSize
است.
-Xusealtsigs
استفاده
از
سیگنالهای
جایگزین
بهجای SIGUSR1 و
SIGUSR2 برای
سیگنالهای
داخلی JVM. این
گزینه
معادل -XX:+UseAltSigs
است.
-Xverify:mode
حالت
اعتبارسنج
بایتکد (Bytecode Verifier)
را تنظیم
میکند.
اعتبارسنجی
بایتکد به
عیبیابی
برخی
مشکلات کمک
میکند،
اما سرباری
را نیز به
برنامه در
حال اجرا
اضافه
مینماید.
آرگومانهای
ممکن برای
mode
در این
گزینه
عبارتند از:
none
بایتکد
اعتبارسنجی
نشود. این
کار زمان
راهاندازی
را کاهش
میدهد و
همچنین
محافظت
ارائهشده
توسط جاوا
را کم
میکند.
remote
کلاسهایی
را که توسط
بارگذار
کلاس
بوتاسترپ
بارگذاری
نشدهاند
اعتبارسنجی
کند. اگر
گزینه -Xverify را
تعیین
نکنید، این
رفتار
پیشفرض
است.
all
تمام
کلاسها
اعتبارسنجی
شوند.
این
گزینهها
رفتار زمان
اجرای Java HotSpot VM را
کنترل
میکنند.
-XX:+CheckEndorsedAndExtDirs
گزینهای
را فعال
میکند که
از اجرای
برنامه
جاوا توسط
دستور
java در
صورتی که از
سازوکار
بازنویسی
استانداردهای
تاییدشده
(endorsed-standards override) یا
سازوکار
افزونهها
(extension mechanism) استفاده
کند،
جلوگیری
مینماید.
این گزینه
با بررسی
موارد زیر
تشخیص
میدهد که
آیا برنامه
از یکی از
این
سازوکارها
استفاده
میکند یا
خیر:
•ویژگی
سیستمی java.ext.dirs
یا java.endorsed.dirs
تنظیم شده
باشد.
•دایرکتوری
lib/endorsed وجود
داشته و
خالی
نباشد.
•دایرکتوری
lib/ext شامل
هرگونه
فایل JAR دیگری
غیر از
فایلهای
مربوط به JDK
باشد.
•دایرکتوری
افزونههای
سرتاسری
سیستم و
وابسته به
پلتفرم
شامل
هرگونه
فایل JAR باشد.
-XX:+DisableAttachMechanism
گزینهای
را فعال
میکند که
سازوکار
متصل شدن (attach)
ابزارها به JVM
را غیرفعال
میسازد.
بهطور
پیشفرض،
این گزینه
غیرفعال
است؛ به این
معنی که
سازوکار
اتصال فعال
بوده و
میتوانید
از
ابزارهایی
مانند jcmd،
jstack، jmap و jinfo
استفاده
کنید.
-XX:ErrorFile=filename
مسیر و
نام فایلی
را مشخص
میکند که
هنگام وقوع
خطای
غیرقابلجبران،
دادههای
خطا در آن
نوشته
میشوند.
بهطور
پیشفرض،
این فایل در
دایرکتوری
کاری جاری و
با نام
hs_err_pidpid.log
ایجاد
میشود که
در آن
pid
شناسه
فرآیندی
است که موجب
بروز خطا
شده است.
مثال زیر
نحوه تنظیم
فایل گزارش
پیشفرض را
نشان
میدهد
(توجه داشته
باشید که
شناسه
فرآیند
بهصورت
%p
مشخص
میشود):
-XX:ErrorFile=./hs_err_pid%p.log
مثال زیر
نحوه تنظیم
گزارش خطا
را روی
/var/log/java/java_error.log
نشان
میدهد:
-XX:ErrorFile=/var/log/java/java_error.log
اگر فایل
نتواند در
دایرکتوری
مشخصشده
ایجاد شود
(بهدلیل
کمبود فضا،
مشکل مجوز
یا هر مسئله
دیگری)،
فایل در
دایرکتوری
موقت
سیستمعامل
ایجاد
میشود.
دایرکتوری
موقت
/tmp است.
-XX:+FailOverToOldVerifier
جابهجایی
خودکار به
اعتبارسنج
قدیمی (failover) را
در صورت
شکست
بازبین نوع
جدید (new type checker)
فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و برای
کلاسهایی
با نسخه
بایتکد
جدید
نادیده
گرفته
میشود
(یعنی
بهصورت
غیرفعال در
نظر گرفته
میشود).
میتوانید
آن را برای
کلاسهایی
با
نسخههای
قدیمیتر
بایتکد
فعال کنید.
-XX:LargePageSizeInBytes=size
در
سیستمعامل
Solaris، حداکثر
اندازه (به
بایت) صفحات
بزرگ (large pages)
مورد
استفاده
برای هیپ
جاوا را
تعیین
میکند.
آرگومان
size
باید توانی
از ۲ (۲، ۴، ۸،
۱۶، ...) باشد.
حرف
k یا
K را
برای تعیین
کیلوبایت،
m یا
M را
برای تعیین
مگابایت،
g
یا
G را برای
تعیین
گیگابایت
اضافه کنید.
بهطور
پیشفرض،
مقدار
اندازه روی
۰ تنظیم شده
است، به این
معنی که JVM
اندازه
صفحات بزرگ
را بهطور
خودکار
انتخاب
میکند.
مثال زیر
نحوه تنظیم
اندازه
صفحه بزرگ
روی ۴
مگابایت (MB)
را نشان
میدهد:
-XX:LargePageSizeInBytes=4m
-XX:MaxDirectMemorySize=size
حداکثر
اندازه کل
(به بایت)
تخصیصهای
بافر
مستقیم
بسته New I/O (بسته
java.nio) را تعیین
میکند. حرف
k یا
K را
برای نشان
دادن
کیلوبایت،
m یا
M را
برای نشان
دادن
مگابایت،
g
یا
G را برای
نشان دادن
گیگابایت
اضافه کنید.
بهطور
پیشفرض،
مقدار
اندازه روی
۰ تنظیم شده
است، به این
معنی که JVM
اندازه
تخصیصهای
بافر
مستقیم NIO را
بهطور
خودکار
انتخاب
میکند.
مثالهای
زیر نحوه
تنظیم
اندازه NIO
روی ۱۰۲۴
کیلوبایت
را با
واحدهای
مختلف نشان
میدهند:
-XX:MaxDirectMemorySize=1m
-XX:MaxDirectMemorySize=1024k
-XX:MaxDirectMemorySize=1048576
-XX:NativeMemoryTracking=mode
حالت
ردیابی
مصرف حافظه
بومی (native memory)
ماشین
مجازی جاوا
(JVM) را مشخص
میکند.
مقادیر
ممکن برای
آرگومان
mode
در این
گزینه شامل
موارد زیر
است:
off
مصرف
حافظه بومی JVM
ردیابی
نمیشود.
اگر گزینه
-XX:NativeMemoryTracking را
مشخص
نکنید، این
رفتار
پیشفرض
است.
summary
فقط مصرف
حافظه توسط
زیرسیستمهای
JVM، مانند هیپ
جاوا،
کلاس، کد و
ریسمان (thread)
ردیابی
میشود.
detail
علاوه بر
ردیابی
مصرف حافظه
توسط
زیرسیستمهای
JVM، مصرف
حافظه توسط
هر CallSite
بهطور
مجزا، هر
ناحیه
حافظه
مجازی و
نواحی
ثبتشده (committed)
آن نیز
ردیابی
میشود.
-XX:ObjectAlignmentInBytes=alignment
تراز
حافظه
اشیای جاوا
را (به بایت)
تعیین
میکند.
بهطور
پیشفرض،
مقدار روی ۸
بایت تنظیم
شده است.
مقدار
مشخصشده
باید توانی
از دو بوده و
در محدوده
بین ۸ تا ۲۵۶
(شامل هر دو)
باشد. این
گزینه
استفاده از
اشارهگرهای
فشرده (compressed pointers)
را در
اندازههای
بزرگ هیپ
جاوا
امکانپذیر
میسازد.
محدودیت
اندازه هیپ
به بایت
بهصورت
زیر محاسبه
میشود:
4GB * ObjectAlignmentInBytes
نکته: با
افزایش
مقدار تراز
(alignment)، فضای
استفادهنشده
بین اشیا
نیز افزایش
مییابد. در
نتیجه،
ممکن است از
استفاده از
اشارهگرهای
فشرده در
اندازههای
بزرگ هیپ
جاوا مزیتی
حاصل نشود.
-XX:OnError=string
یک دستور
سفارشی یا
مجموعهای
از دستورات
جداشده با
نقطه-ویرگول
(semicolon) را برای
اجرا در
هنگام وقوع
خطای
غیرقابلجبران
تعیین
میکند. اگر
رشته شامل
فاصله
باشد، باید
داخل علامت
نقلقول
قرار گیرد.
مثال زیر
نشان
میدهد
چگونه
میتوان از
گزینه -XX:OnError
برای اجرای
دستور gcore
جهت ایجاد
ایمیج core و
راهاندازی
دیباگر
برای اتصال
به فرآیند
در هنگام
وقوع خطای
غیرقابلجبران
استفاده
کرد (شناسه %p
نشاندهنده
فرآیند
جاری است):
-XX:OnError="gcore %p;dbx - %p"
-XX:OnOutOfMemoryError=string
یک دستور
سفارشی یا
مجموعهای
از دستورات
جداشده با
نقطه-ویرگول
را برای
اجرا در
زمانی که
استثنای
OutOfMemoryError برای
نخستین بار
پرتاب
میشود،
تعیین
میکند. اگر
رشته شامل
فاصله
باشد، باید
داخل علامت
نقلقول
قرار گیرد.
برای دیدن
مثالی از
رشته
دستوری، به
توضیحات
گزینه -XX:OnError
مراجعه
کنید.
-XX:+PerfDataSaveToFile
در صورت
فعال بودن،
دادههای
باینری jstat(1) را
هنگام خروج
برنامه
جاوا ذخیره
میکند. این
دادههای
باینری در
فایلی با
نام
hsperfdata_<pid>
ذخیره
میشوند که
در آن
<pid>
شناسه
فرآیند
برنامه
جاوای
اجراشده
توسط شما
است. برای
نمایش
دادههای
عملکردی
موجود در
این فایل،
از
jstat
بهصورت
زیر
استفاده
کنید:
jstat -class file:///<path>/hsperfdata_<pid>
jstat -gc file:///<path>/hsperfdata_<pid>
-XX:+PrintCommandLineFlags
چاپ
فلگهای JVM که
بهصورت
ارگونومیک
انتخاب شده
و در خط
فرمان ظاهر
شدهاند را
فعال
میکند.
دانستن
مقادیر
ارگونومیک
تنظیمشده
توسط JVM،
مانند
اندازه
فضای هیپ و
زبالهروب
(garbage collector)
انتخابشده،
میتواند
مفید باشد.
بهطور
پیشفرض،
این گزینه
غیرفعال
بوده و
فلگها چاپ
نمیشوند.
-XX:+PrintNMTStatistics
چاپ
دادههای
جمعآوریشده
ردیابی
حافظه بومی
را در هنگام
خروج JVM، در
زمانی که
ردیابی
حافظه بومی
فعال است (به
-XX:NativeMemoryTracking
مراجعه
کنید)، فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
بوده و
دادههای
ردیابی
حافظه بومی
چاپ
نمیشوند.
-XX:+RelaxAccessControlCheck
میزان
بررسیهای
کنترل
دسترسی در
اعتبارسنج
را کاهش
میدهد.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و برای
کلاسهایی
با نسخه
بایتکد
جدید
نادیده
گرفته
میشود
(یعنی
غیرفعال در
نظر گرفته
میشود).
میتوانید
آن را برای
کلاسهایی
با
نسخههای
قدیمیتر
بایتکد
فعال کنید.
-XX:+ShowMessageBoxOnError
نمایش یک
کادر
محاورهای
(dialog box) را در
هنگام
مواجهه JVM با
خطای
غیرقابلجبران
فعال
میکند. این
کار از خروج JVM
جلوگیری
کرده و
فرآیند را
فعال نگه
میدارد تا
بتوانید یک
دیباگر را
برای بررسی
علت خطا به
آن متصل
کنید.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
-XX:ThreadStackSize=size
اندازه
پشته
ریسمان (thread stack)
را (به بایت)
تعیین
میکند. حرف
k یا
K را
برای تعیین
کیلوبایت،
m یا
M را
برای تعیین
مگابایت،
g
یا
G را برای
تعیین
گیگابایت
اضافه کنید.
مقدار
پیشفرض به
پلتفرم
بستگی دارد:
•پلتفرم
Linux/ARM (نسخه ۳۲
بیتی): ۳۲۰
کیلوبایت
•پلتفرم
Linux/i386 (نسخه ۳۲
بیتی): ۳۲۰
کیلوبایت
•پلتفرم
Linux/x64 (نسخه ۶۴
بیتی): ۱۰۲۴
کیلوبایت
•پلتفرم
OS X (نسخه ۶۴
بیتی): ۱۰۲۴
کیلوبایت
•پلتفرم
Oracle Solaris/i386 (نسخه ۳۲
بیتی): ۳۲۰
کیلوبایت
•پلتفرم
Oracle Solaris/x64 (نسخه ۶۴
بیتی): ۱۰۲۴
کیلوبایت
مثالهای
زیر نحوه
تعیین
اندازه
پشته
ریسمان را
روی ۱۰۲۴
کیلوبایت
با واحدهای
مختلف نشان
میدهند:
-XX:ThreadStackSize=1m
-XX:ThreadStackSize=1024k
-XX:ThreadStackSize=1048576
این گزینه
معادل
-Xss
است.
-XX:+TraceClassLoading
ردیابی
کلاسها را
هنگام
بارگذاری
فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و
کلاسها
ردیابی
نمیشوند.
-XX:+TraceClassLoadingPreorder
ردیابی
همه
کلاسهای
بارگذاریشده
را به
ترتیبی که
به آنها
ارجاع داده
شده است
فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و
کلاسها
ردیابی
نمیشوند.
-XX:+TraceClassResolution
ردیابی
تفکیکهای
استخر
مقادیر
ثابت (constant pool resolutions) را
فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و
تفکیکهای
استخر ثابت
ردیابی
نمیشوند.
-XX:+TraceClassUnloading
ردیابی
کلاسها را
هنگام
تخلیه شدن
از حافظه (unload)
فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و
کلاسها
ردیابی
نمیشوند.
-XX:+TraceLoaderConstraints
ردیابی
ثبت
محدودیتهای
بارگذار (loader constraints
recording) را فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و ثبت
محدودیتهای
بارگذار
ردیابی
نمیشود.
-XX:+UseAltSigs
استفاده
از
سیگنالهای
جایگزین
بهجای SIGUSR1 و
SIGUSR2 را برای
سیگنالهای
داخلی JVM فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و از
سیگنالهای
جایگزین
استفاده
نمیشود.
این گزینه
معادل -Xusealtsigs
است.
-XX:-UseBiasedLocking
استفاده
از
قفلگذاری
متمایل (biased locking)
را غیرفعال
میکند.
برخی
برنامهها
با حجم
قابلتوجهی
از
همگامسازی
بدون رقابت
(uncontended synchronization) ممکن
است با فعال
بودن این
فلگ به
بهبود سرعت
چشمگیری
دست یابند،
در حالی که
برنامههایی
با الگوهای
قفلگذاری
خاص ممکن
است دچار
افت سرعت
شوند. برای
کسب
اطلاعات
بیشتر
درباره روش
قفلگذاری
متمایل، به
مثال موجود
در Java Tuning White Paper در
نشانی
http://www.oracle.com/technetwork/java/tuning-139912.html#section4.2.5
مراجعه
کنید.
بهطور
پیشفرض،
این گزینه
فعال است.
-XX:-UseCompressedOops
استفاده
از
اشارهگرهای
فشرده (compressed pointers)
را غیرفعال
میکند.
بهطور
پیشفرض،
این گزینه
فعال است و
زمانی که
اندازه هیپ
جاوا کمتر
از ۳۲
گیگابایت
باشد،
اشارهگرهای
فشرده به
کار گرفته
میشوند.
زمانی که
این قابلیت
فعال است،
ارجاعات
اشیا
بهجای
اشارهگرهای
۶۴ بیتی
بهصورت
آفستهای
۳۲ بیتی
نمایش داده
میشوند که
معمولاً
هنگام
اجرای
برنامه با
اندازههای
هیپ جاوا
کمتر از ۳۲
گیگابایت،
کارایی را
افزایش
میدهد. این
گزینه فقط
برای JVMهای ۶۴
بیتی کار
میکند.
همچنین در
اندازههای
هیپ جاوا
بزرگتر از
۳۲
گیگابایت
نیز امکان
استفاده از
اشارهگرهای
فشرده وجود
دارد. به
گزینه -XX:ObjectAlignmentInBytes
مراجعه
کنید.
-XX:+UseHugeTLBFS
این
گزینه برای
لینوکس
معادل مشخص
کردن
-XX:+UseLargePages
است. این
گزینه
بهطور
پیشفرض
غیرفعال
است. این
گزینه تمام
صفحات بزرگ
را از ابتدا
(up-front) در زمان
رزرو حافظه
از پیش
تخصیص
میدهد؛ در
نتیجه JVM
نمیتواند
نواحی
حافظه
صفحات بزرگ
را بهطور
پویا بزرگ
یا کوچک
کند؛ اگر
چنین
رفتاری مد
نظرتان است
به
-XX:UseTransparentHugePages
مراجعه
کنید.
برای
اطلاعات
بیشتر، بخش
«صفحات
بزرگ (Large Pages)» را
ببینید.
-XX:+UseLargePages
استفاده
از حافظه
صفحات بزرگ
(large page memory) را فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و از
حافظه
صفحات بزرگ
استفاده
نمیشود.
برای
اطلاعات
بیشتر، بخش
«صفحات
بزرگ (Large Pages)» را
ببینید.
-XX:+UseMembar
صدور
موانع
حافظه (membars) در
هنگام
انتقال
وضعیت
ریسمانها
را فعال
میکند. این
گزینه
بهطور
پیشفرض در
تمام
پلتفرمها
به جز
سرورهای ARM
غیرفعال
است، که در
آن سرورها
فعال
میباشد.
(توصیه
میشود این
گزینه را در
سرورهای ARM
غیرفعال
نکنید.)
-XX:+UsePerfData
قابلیت
perfdata را فعال
میکند. این
گزینه
بهطور
پیشفرض
فعال است تا
امکان
نظارت بر JVM و
تست عملکرد
فراهم باشد.
غیرفعال
کردن آن
مانع از
ایجاد
دایرکتوریهای
hsperfdata_userid میشود.
برای
غیرفعال
کردن
قابلیت perfdata،
گزینه -XX:-UsePerfData
را مشخص
کنید.
-XX:+UseTransparentHugePages
در
لینوکس،
استفاده از
صفحات
بزرگی را که
میتوانند
بهطور
پویا بزرگ
یا کوچک
شوند فعال
میکند. این
گزینه
بهطور
پیشفرض
غیرفعال
است. ممکن
است با
صفحات بزرگ
شفاف (transparent huge pages) با
مشکلات
عملکردی
مواجه شوید
زیرا
سیستمعامل
برای ایجاد
صفحات
بزرگ،
صفحات دیگر
را جابهجا
میکند؛
این گزینه
برای
آزمایش
تجربی
ارائه شده
است.
برای
اطلاعات
بیشتر، بخش
«صفحات
بزرگ (Large Pages)» را
ببینید.
-XX:+AllowUserSignalHandlers
امکان
نصب
گردانندههای
سیگنال (signal handlers)
توسط
برنامه را
فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و
برنامه
اجازه نصب
گردانندههای
سیگنال را
ندارد.
این
گزینهها
کامپایل
پویا درجا
یا
درزماننیاز
(JIT: Just-in-Time) را که
توسط Java HotSpot VM
انجام
میشود،
کنترل
میکنند.
-XX:+AggressiveOpts
استفاده
از
قابلیتهای
بهینهسازی
تهاجمی
کارایی را
فعال
میکند که
انتظار
میرود در
نسخههای
آینده به
صورت
پیشفرض
درآیند. به
طور
پیشفرض،
این گزینه
غیرفعال
است و از
ویژگیهای
آزمایشی
بهبود
کارایی
استفاده
نمیشود.
-XX:AllocateInstancePrefetchLines=lines
تعداد
خطوطی را که
باید
پیشاپیش
اشارهگر
تخصیص
نمونه
واکشی
اولیه (prefetch)
شوند،
تنظیم
میکند. به
طور
پیشفرض،
تعداد خطوط
واکشی
اولیه
برابر با 1
تنظیم شده
است:
-XX:AllocateInstancePrefetchLines=1
تنها Java HotSpot Server VM از
این گزینه
پشتیبانی
میکند.
-XX:AllocatePrefetchDistance=size
اندازه
(به بایت)
فاصله
واکشی
اولیه (prefetch)
برای تخصیص
اشیاء را
تعیین
میکند.
حافظهای
که قرار است
با مقادیر
اشیاء جدید
نوشته شود،
با شروع از
آدرس آخرین
شیء
تخصیصیافته
تا این
فاصله
پیشاپیش
واکشی
میشود. هر
رشته (thread) جاوا
نقطه تخصیص
مخصوص به
خود را دارد.
مقادیر
منفی
نشاندهنده
آن است که
فاصله
واکشی
اولیه بر
اساس
پلتفرم
انتخاب
میشود.
مقادیر
مثبت،
بایتهای
مورد نظر
برای واکشی
اولیه
هستند. حرف k
یا K را برای
مشخص کردن
کیلوبایت،
m یا M را
برای
مگابایت، و
g یا G را
برای
گیگابایت
اضافه کنید.
مقدار
پیشفرض
روی -1 تنظیم
شده است.
مثال زیر
نحوه تنظیم
فاصله
واکشی
اولیه روی 1024
بایت را
نشان
میدهد:
-XX:AllocatePrefetchDistance=1024
تنها Java HotSpot Server VM از
این گزینه
پشتیبانی
میکند.
-XX:AllocatePrefetchInstr=instruction
دستورالعمل
واکشی
اولیه را
برای واکشی
پیشاپیش
اشارهگر
تخصیص
تعیین
میکند.
تنها Java HotSpot Server VM از
این گزینه
پشتیبانی
میکند.
مقادیر
ممکن از 0 تا 3
هستند.
دستورالعملهای
واقعی
متناظر با
این مقادیر
به پلتفرم
بستگی
دارند. به
طور
پیشفرض،
دستورالعمل
واکشی
اولیه روی 0
تنظیم شده
است:
-XX:AllocatePrefetchInstr=0
تنها Java HotSpot Server VM از
این گزینه
پشتیبانی
میکند.
-XX:AllocatePrefetchLines=lines
تعداد
خطوط حافظه
نهان (cache lines) را
برای
بارگذاری
پس از آخرین
تخصیص شیء
با استفاده
از
دستورالعملهای
واکشی
اولیه
تولید شده
در کد
کامپایلشده
تنظیم
میکند. در
صورتی که
آخرین شیء
تخصیصیافته
یک نمونه (instance)
باشد،
مقدار
پیشفرض 1
است و اگر یک
آرایه (array)
باشد،
مقدار
پیشفرض 3
است.
مثال زیر
نحوه تنظیم
تعداد خطوط
حافظه نهان
بارگذاریشده
روی 5 را نشان
میدهد:
-XX:AllocatePrefetchLines=5
تنها Java HotSpot Server VM از
این گزینه
پشتیبانی
میکند.
-XX:AllocatePrefetchStepSize=size
اندازه
گام (به بایت)
را برای
دستورالعملهای
متوالی
واکشی
اولیه
تعیین
میکند. حرف
k یا
K را
برای مشخص
کردن
کیلوبایت،
m یا
M را
برای
مگابایت، و
g یا
G را
برای
گیگابایت
اضافه کنید.
به طور
پیشفرض،
اندازه گام
برابر با 16
بایت تنظیم
شده است:
-XX:AllocatePrefetchStepSize=16
تنها Java HotSpot Server VM از
این گزینه
پشتیبانی
میکند.
-XX:AllocatePrefetchStyle=style
سبک کد
تولیدشده
برای
دستورالعملهای
واکشی
اولیه را
تعیین
میکند.
آرگومان
style
یک عدد صحیح
از 0 تا 3 است:
0
دستورالعملهای
واکشی
اولیه
تولید
نشوند.
1
دستورالعملهای
واکشی
اولیه پس از
هر تخصیص
اجرا شوند.
این
پارامتر
پیشفرض
است.
2
از
اشارهگر
نشان سطح (watermark)
در بلوک
تخصیص محلی
رشته (TLAB) برای
تعیین زمان
اجرای
دستورالعملهای
واکشی
اولیه
استفاده
شود.
3
استفاده
از
دستورالعمل
BIS در
پردازندههای
SPARC برای
واکشی
اولیه
تخصیص.
تنها Java HotSpot Server VM
از این
گزینه
پشتیبانی
میکند.
-XX:+BackgroundCompilation
کامپایل
در
پسزمینه
را فعال
میکند. این
گزینه به
صورت
پیشفرض
فعال است.
برای
غیرفعال
کردن
کامپایل در
پسزمینه،
گزینه -XX:-BackgroundCompilation
را مشخص
کنید (این
کار معادل
مشخص کردن
-Xbatch است).
-XX:CICompilerCount=threads
تعداد
رشتههای
کامپایلر
را برای
استفاده در
کامپایل
تنظیم
میکند. به
طور
پیشفرض،
تعداد
رشتهها
برای JVM سرور
برابر با 2 و
برای JVM
کلاینت
برابر با 1
تنظیم شده
است، و در
صورت
استفاده از
کامپایل
لایهای (tiered
compilation)، متناسب
با تعداد
هستهها
مقیاسبندی
میشود.
مثال زیر
نحوه تنظیم
تعداد
رشتهها
روی 2 را نشان
میدهد:
-XX:CodeCacheMinimumFreeSpace=size
حداقل
فضای خالی
(به بایت)
مورد نیاز
برای
کامپایل را
تعیین
میکند. حرف
k یا
K را
برای مشخص
کردن
کیلوبایت،
m یا
M را
برای
مگابایت، و
g یا
G را
برای
گیگابایت
اضافه کنید.
زمانی که
کمتر از
حداقل فضای
خالی باقی
بماند،
کامپایل
متوقف
میشود. به
طور
پیشفرض،
این گزینه
روی 500
کیلوبایت
تنظیم شده
است. مثال
زیر نحوه
تنظیم
حداقل فضای
خالی روی 1024
مگابایت را
نشان
میدهد:
-XX:CodeCacheMinimumFreeSpace=1024m
-XX:CompileCommand=command,method[,option]
دستوری
را برای
اعمال روی
یک متد مشخص
میکند. به
عنوان
مثال، برای
مستثنی
کردن متد
indexOf()
از کلاس
String
از کامپایل
شدن، از
دستور زیر
استفاده
کنید:
-XX:CompileCommand=exclude,java/lang/String.indexOf
توجه داشته
باشید که
نام کامل
کلاس شامل
تمام
بستهها و
زیربستهها
که با اسلش (
/)
از یکدیگر
جدا
شدهاند
مشخص
میشود.
برای
عملیات برش
و چسباندن (cut and
paste) آسانتر،
همچنین
میتوانید
از قالب نام
متد
تولیدشده
توسط
گزینههای
-XX:+PrintCompilation و
-XX:+LogCompilation
استفاده
نمایید:
-XX:CompileCommand=exclude,java.lang.String::indexOf
اگر متد
بدون امضا (signature)
مشخص شود،
دستور روی
تمامی
متدهایی با
نام
مشخصشده
اعمال
خواهد شد. با
این حال،
میتوانید
امضای متد
را نیز در
قالب فایل
کلاس مشخص
کنید. در این
حالت، باید
آرگومانها
را درون
علامتهای
نقلقول
قرار دهید،
زیرا در غیر
این صورت شل
کاراکتر
نقطهویرگول
را به عنوان
پایان
دستور در
نظر
میگیرد. به
عنوان
مثال، اگر
میخواهید
فقط متد
indexOf(String)
از کلاس
String
را از
کامپایل
شدن مستثنی
کنید، از
دستور زیر
استفاده
نمایید:
-XX:CompileCommand="exclude,java/lang/String.indexOf,(Ljava/lang/String;)I"
همچنین
میتوانید
از علامت
ستاره (*) به
عنوان
نویسه
عمومی (wildcard)
برای
نامهای
کلاس و متد
استفاده
کنید. برای
مثال، جهت
مستثنی
کردن تمامی
متدهای
indexOf()
در تمام
کلاسها از
کامپایل
شدن، دستور
زیر را به
کار ببرید:
-XX:CompileCommand=exclude,*.indexOf
کاماها و
نقطهها
نامهای
مستعار
برای
فاصلهها
هستند که
ارسال
دستورات
کامپایلر
را از طریق
شل آسانتر
میکنند.
شما
میتوانید
با قرار
دادن
آرگومان
درون
علامتهای
نقلقول،
آرگومانها
را با
استفاده از
فاصله به
عنوان
جداکننده
به
-XX:CompileCommand
ارسال کنید:
-XX:CompileCommand="exclude java/lang/String indexOf"
توجه داشته
باشید که پس
از تجزیه
دستورات
ارسالشده
در خط فرمان
با استفاده
از
گزینههای
-XX:CompileCommand،
کامپایلر JIT
سپس
دستورات را
از فایل
.hotspot_compiler
میخواند.
میتوانید
دستوراتی
را به این
فایل اضافه
کنید یا با
استفاده از
گزینه
-XX:CompileCommandFile
فایل
متفاوتی را
مشخص
نمایید.
برای
افزودن
چندین
دستور،
میتوانید
گزینه -XX:CompileCommand
را چندین
بار مشخص
کنید، یا هر
آرگومان را
با
جداکننده
خط جدید (\n)
جدا سازید.
دستورات
زیر در
دسترس
هستند:
break
تنظیم یک
نقطه توقف (breakpoint)
هنگام
دیباگ JVM برای
توقف در
آغاز
کامپایل
متد
مشخصشده.
compileonly
مستثنی
کردن تمام
متدها از
کامپایل به
جز متد
مشخصشده.
به عنوان یک
جایگزین،
میتوانید
از گزینه
-XX:CompileOnly
استفاده
کنید که
امکان
تعیین
چندین متد
را فراهم
میسازد.
dontinline
جلوگیری
از
درونخطیسازی
(inlining) متد
مشخصشده.
exclude
مستثنی
کردن متد
مشخصشده
از فرایند
کامپایل.
help
چاپ یک
پیام
راهنما
برای گزینه
-XX:CompileCommand.
inline
تلاش
برای
درونخطی
کردن متد
مشخصشده.
log
مستثنی
کردن ثبت
گزارش
کامپایل (با
گزینه -XX:+LogCompilation)
برای تمام
متدها به جز
متد
مشخصشده.
به طور
پیشفرض،
ثبت گزارش
برای تمام
متدهای
کامپایلشده
انجام
میشود.
option
این
دستور
میتواند
برای ارسال
یک گزینه
کامپایل JIT به
متد
مشخصشده
به جای
آخرین
آرگومان (
option)
استفاده
شود. گزینه
کامپایل در
انتهای
دستور، پس
از نام متد
تنظیم
میشود. به
عنوان
مثال، برای
فعال کردن
گزینه
BlockLayoutByFrequency
برای متد
append()
از کلاس
StringBuffer،
دستور زیر
را به کار
ببرید:
-XX:CompileCommand=option,java/lang/StringBuffer.append,BlockLayoutByFrequency
میتوانید
چندین
گزینه
کامپایل را
که با کاما
یا فاصله از
هم جدا
شدهاند،
مشخص کنید.
print
چاپ کد
اسمبلی
تولیدشده
پس از
کامپایل
متد
مشخصشده.
quiet
دستورات
کامپایل را
چاپ نکن. به
طور
پیشفرض،
دستوراتی
که با گزینه
-XX:CompileCommand مشخص
میکنید
چاپ
میشوند؛
برای مثال،
اگر متد
indexOf()
از کلاس
String
را از
کامپایل
مستثنی
کنید،
عبارت زیر
در خروجی
استاندارد
چاپ خواهد
شد:
CompilerOracle: exclude java/lang/String.indexOf
میتوانید
با مشخص
کردن گزینه
-XX:CompileCommand=quiet پیش از
سایر
گزینههای
-XX:CompileCommand از چاپ
این موارد
جلوگیری
نمایید.
-XX:CompileCommandFile=filename
فایلی را
که دستورات
کامپایلر JIT
از آن
خوانده
میشوند
تعیین
میکند. به
طور
پیشفرض،
فایل
.hotspot_compiler
برای ذخیره
دستورات
اعمالشده
توسط
کامپایلر JIT
استفاده
میشود.
هر خط در
فایل
دستورات
نشاندهنده
یک دستور،
یک نام کلاس
و یک نام متد
است که
دستور برای
آن استفاده
میشود.
برای مثال،
این خط کد
اسمبلی متد
toString() از کلاس
String را چاپ
میکند:
print java/lang/String toString
برای کسب
اطلاعات
بیشتر در
مورد تعیین
دستورات
اعمالی
کامپایلر JIT
روی متدها،
به گزینه
-XX:CompileCommand مراجعه
فرمایید.
-XX:CompileOnly=methods
فهرستی
از متدها
(جداشده با
کاما) را که
کامپایل
باید به
آنها
محدود شود
تنظیم
میکند.
تنها
متدهای
مشخصشده
کامپایل
خواهند شد.
هر متد را با
نام کامل
کلاس (شامل
بستهها و
زیربستهها)
مشخص کنید.
برای مثال،
جهت
کامپایل
انحصاری
متد
length() از
کلاس
String و
متد
size() از
کلاس
List،
دستور زیر
را به کار
ببرید:
-XX:CompileOnly=java/lang/String.length,java/util/List.size
توجه داشته
باشید که
نام کامل
کلاس شامل
تمام
بستهها و
زیربستهها
که با اسلش (
/)
از یکدیگر
جدا
شدهاند
مشخص
میشود.
برای
عملیات برش
و چسباندن
آسانتر،
همچنین
میتوانید
از قالب نام
متد
تولیدشده
توسط
گزینههای
-XX:+PrintCompilation و
-XX:+LogCompilation
استفاده
نمایید:
-XX:CompileOnly=java.lang.String::length,java.util.List::size
اگرچه
نویسههای
عمومی
پشتیبانی
نمیشوند،
میتوانید
تنها نام
کلاس یا
بسته را
مشخص کنید
تا تمام
متدهای آن
کلاس یا
بسته
کامپایل
شوند، یا
صرفاً نام
متد را مشخص
نمایید تا
متدهایی با
این نام در
هر کلاسی
کامپایل
شوند:
-XX:CompileOnly=java/lang/String
-XX:CompileOnly=java/lang
-XX:CompileOnly=.length
-XX:CompileThreshold=invocations
تعداد
فراخوانیهای
متد در حالت
تفسیری را
پیش از
کامپایل
تعیین
میکند. به
طور
پیشفرض،
در JVM سرور،
کامپایلر JIT
تعداد 10,000
فراخوانی
تفسیری متد
را برای
جمعآوری
اطلاعات به
منظور
کامپایل
بهینه
انجام
میدهد.
برای JVM
کلاینت،
تنظیم
پیشفرض 1,500
فراخوانی
است. در صورت
فعال بودن
کامپایل
لایهای (tiered
compilation)، این
گزینه
نادیده
گرفته
میشود؛ به
گزینه
-XX:+TieredCompilation
مراجعه
فرمایید.
مثال زیر
نحوه تنظیم
تعداد
فراخوانیهای
تفسیری متد
روی 5000 را
نشان
میدهد:
-XX:CompileThreshold=5000
میتوانید
تفسیر
متدهای
جاوا پیش از
کامپایل را
با مشخص
کردن گزینه
-Xcomp به طور
کامل
غیرفعال
کنید.
-XX:+DoEscapeAnalysis
استفاده
از تحلیل
فرار (escape analysis) را
فعال
میکند. این
گزینه به
صورت
پیشفرض
فعال است.
برای
غیرفعال
کردن تحلیل
فرار،
گزینه -XX:-DoEscapeAnalysis
را مشخص
نمایید.
تنها Java HotSpot Server VM از
این گزینه
پشتیبانی
میکند.
-XX:InitialCodeCacheSize=size
اندازه
اولیه
حافظه نهان
کد (به بایت)
را تعیین
میکند. حرف
k یا
K را
برای مشخص
کردن
کیلوبایت،
m یا
M را
برای
مگابایت، و
g یا
G را
برای
گیگابایت
اضافه کنید.
مقدار
پیشفرض
روی 500
کیلوبایت
تنظیم شده
است. اندازه
اولیه
حافظه نهان
کد نباید
کمتر از
حداقل
اندازه
صفحه حافظه
سیستم باشد.
مثال زیر
نحوه تنظیم
اندازه
اولیه
حافظه نهان
کد روی 32
کیلوبایت
را نشان
میدهد:
-XX:InitialCodeCacheSize=32k
-XX:+Inline
درونخطیسازی
متدها (method inlining) را
فعال
میکند. این
گزینه برای
افزایش
کارایی به
صورت
پیشفرض
فعال است.
برای
غیرفعال
کردن
درونخطیسازی
متدها،
گزینه -XX:-Inline را
مشخص کنید.
-XX:InlineSmallCode=size
حداکثر
اندازه کد
(به بایت) را
برای
متدهای
کامپایلشدهای
که باید
درونخطی
شوند تعیین
میکند. حرف
k یا
K را
برای مشخص
کردن
کیلوبایت،
m یا
M را
برای
مگابایت، و
g یا
G را
برای
گیگابایت
اضافه کنید.
تنها
متدهای
کامپایلشدهای
با اندازه
کوچکتر از
مقدار
مشخصشده
درونخطی
خواهند شد.
به طور
پیشفرض،
حداکثر
اندازه کد
برابر با 1000
بایت تنظیم
شده است:
-XX:+LogCompilation
ثبت
گزارش
فعالیتهای
کامپایل را
در فایلی با
نام
hotspot.log در
دایرکتوری
کاری جاری
فعال
میکند.
میتوانید
مسیر و نام
متفاوتی را
برای فایل
گزارش با
استفاده از
گزینه
-XX:LogFile
مشخص
نمایید.
به طور
پیشفرض،
این گزینه
غیرفعال
است و
فعالیتهای
کامپایل
ثبت
نمیشوند.
گزینه -XX:+LogCompilation
باید به
همراه
گزینه
-XX:UnlockDiagnosticVMOptions
استفاده
شود که قفل
گزینههای
عیبیابی JVM
را باز
میکند.
میتوانید
با استفاده
از گزینه
-XX:+PrintCompilation خروجی
تشخیصی
مشروح را
فعال کنید
که با هر بار
کامپایل یک
متد، پیامی
را در کنسول
چاپ
میکند.
-XX:MaxInlineSize=size
حداکثر
اندازه
بایتکد (به
بایت) یک متد
را برای
درونخطی
شدن تعیین
میکند. حرف
k یا
K را
برای مشخص
کردن
کیلوبایت،
m یا
M را
برای
مگابایت، و
g یا
G را
برای
گیگابایت
اضافه کنید.
به طور
پیشفرض،
حداکثر
اندازه
بایتکد
برابر با 35
بایت تنظیم
شده است:
-XX:MaxNodeLimit=nodes
حداکثر
تعداد
گرههای
مورد
استفاده در
طول
کامپایل یک
متد منفرد
را تعیین
میکند. به
طور
پیشفرض،
حداکثر
تعداد
گرهها
برابر با 65,000
تنظیم شده
است:
-XX:MaxTrivialSize=size
حداکثر
اندازه
بایتکد (به
بایت) یک متد
ساده (trivial) را
برای
درونخطی
شدن تعیین
میکند. حرف
k یا
K را
برای مشخص
کردن
کیلوبایت،
m یا
M را
برای
مگابایت، و
g یا
G را
برای
گیگابایت
اضافه کنید.
به طور
پیشفرض،
حداکثر
اندازه
بایتکد یک
متد ساده
برابر با 6
بایت تنظیم
شده است:
-XX:+OptimizeStringConcat
بهینهسازی
عملیات
الحاق
رشتههای String
را فعال
میکند. این
گزینه به
صورت
پیشفرض
فعال است.
برای
غیرفعال
کردن
بهینهسازی
عملیات
الحاق
رشتههای
String، گزینه
-XX:-OptimizeStringConcat را
مشخص
نمایید.
تنها Java HotSpot Server VM از
این گزینه
پشتیبانی
میکند.
-XX:+PrintAssembly
چاپ کد
اسمبلی
برای
متدهای
دارای
بایتکد و
بومی (native) را با
استفاده از
کتابخانه
خارجی
disassembler.so
فعال
میکند. این
قابلیت به
شما امکان
میدهد کد
تولیدشده
را مشاهده
کنید، که
ممکن است به
بررسی و
عیبیابی
مشکلات
کارایی کمک
کند.
به طور
پیشفرض،
این گزینه
غیرفعال
است و کد
اسمبلی چاپ
نمیشود.
گزینه -XX:+PrintAssembly
باید به
همراه
گزینه
-XX:UnlockDiagnosticVMOptions
استفاده
شود که قفل
گزینههای
تشخیصی JVM را
باز
میکند.
-XX:+PrintCompilation
با چاپ
یک پیام در
کنسول با هر
بار
کامپایل
شدن یک متد،
خروجی
تشخیصی
مشروح را از JVM
فعال
میسازد.
این قابلیت
به شما
امکان
میدهد
متدهایی را
که واقعاً
کامپایل
میشوند
مشاهده
نمایید. به
طور
پیشفرض،
این گزینه
غیرفعال
است و خروجی
تشخیصی چاپ
نمیشود.
همچنین
میتوانید
با استفاده
از گزینه
-XX:+LogCompilation
فعالیتهای
کامپایل را
در یک فایل
ثبت کنید.
-XX:+PrintInlining
چاپ
تصمیمات
مربوط به
درونخطیسازی
(inlining) را فعال
میکند. این
ویژگی شما
را قادر
میسازد تا
ببینید
کدام متدها
در حال
درونخطی
شدن هستند.
به طور
پیشفرض،
این گزینه
غیرفعال
است و
اطلاعات
درونخطیسازی
چاپ
نمیشود.
گزینه -XX:+PrintInlining
باید به
همراه
گزینه
-XX:UnlockDiagnosticVMOptions
استفاده
شود که
گزینههای
تشخیصی JVM را
فعال
میکند.
-XX:ReservedCodeCacheSize=size
حداکثر
اندازه
حافظه نهان
کد (به بایت)
را برای
کدهای
کامپایلشده
توسط JIT تعیین
میکند. حرف
k یا K را
برای مشخص
کردن
کیلوبایت،
m یا M را
برای
مگابایت، و
g یا G را
برای
گیگابایت
اضافه کنید.
حداکثر
اندازه
پیشفرض
حافظه نهان
کد برابر با 240
مگابایت
است؛ اگر
کامپایل
لایهای را
با گزینه
-XX:-TieredCompilation
غیرفعال
کنید،
اندازه
پیشفرض
برابر با 48
مگابایت
خواهد بود.
این گزینه
محدودیتی
معادل 2
گیگابایت
دارد؛ در
غیر این
صورت، خطا
ایجاد
خواهد شد.
حداکثر
اندازه
حافظه نهان
کد نباید
کمتر از
اندازه
اولیه
حافظه نهان
کد باشد؛ به
گزینه -XX:InitialCodeCacheSize
مراجعه
فرمایید.
این گزینه
معادل با
-Xmaxjitcodesize است.
-XX:RTMAbortRatio=abort_ratio
نسبت سقط
(لغو) RTM به
عنوان
درصدی (%) از کل
تراکنشهای
RTM اجرا شده
مشخص
میشود. اگر
تعداد
تراکنشهای
سقطشده
بیشتر از
این نسبت
شود، کد
کامپایلشده
از حالت
بهینهسازی
خارج (deoptimized)
خواهد شد.
این نسبت
زمانی
استفاده
میشود که
گزینه -XX:+UseRTMDeopt
فعال باشد.
مقدار
پیشفرض
این گزینه 50
است. این
بدان
معناست که
در صورت سقط
شدن 50% از کل
تراکنشها،
کد
کامپایلشده
deoptimize خواهد شد.
-XX:RTMRetryCount=number_of_retries
کد
قفلگذاری
RTM، در هنگام
سقط شدن یا
مشغول
بودن، پیش
از بازگشت
به سازوکار
قفلگذاری
عادی، به
تعداد
دفعات
مشخصشده
توسط این
گزینه
مجدداً
تلاش خواهد
کرد. مقدار
پیشفرض
این گزینه 5
است. گزینه
-XX:UseRTMLocking باید
فعال باشد.
-XX:-TieredCompilation
استفاده
از کامپایل
لایهای (tiered compilation)
را غیرفعال
میکند. به
طور
پیشفرض،
این گزینه
فعال است.
تنها Java HotSpot Server VM از
این گزینه
پشتیبانی
میکند.
-XX:+UseAES
دستورالعملهای
ذاتی (intrinsics)
سختافزاری
AES را برای
سختافزارهای
Intel، AMD و SPARC فعال
میکند.
سختافزارهای
Intel Westmere (سال 2010 و
جدیدتر)، AMD Bulldozer
(سال 2011 و
جدیدتر) و SPARC
(مدل T4 و
جدیدتر)
پشتیبانی
میشوند.
گزینه UseAES
همراه با UseAESIntrinsics
استفاده
میشود.
-XX:+UseAESIntrinsics
فلگهای
UseAES و UseAESIntrinsics به طور
پیشفرض
فعال هستند
و تنها برای
نسخههای 32
بیتی و 64 بیتی
Java HotSpot Server VM
پشتیبانی
میشوند.
برای
غیرفعال
کردن توابع
ذاتی
سختافزاری
AES، عبارت
-XX:-UseAES
-XX:-UseAESIntrinsics را مشخص
نمایید. به
عنوان
مثال، برای
فعال کردن
سختافزاری
AES، از
فلگهای
زیر
استفاده
کنید:
-XX:+UseAES -XX:+UseAESIntrinsics
برای
پشتیبانی
از فلگهای
UseAES و UseAESIntrinsics در
نسخههای 32
بیتی و 64
بیتی، از
گزینه
-server
جهت انتخاب Java
HotSpot Server VM استفاده
کنید. این
فلگها در Client VM
پشتیبانی
نمیشوند.
-XX:+UseCodeCacheFlushing
تخلیه و
پاکسازی
حافظه نهان
کد را پیش از
خاموش شدن
کامپایلر
فعال
میکند. این
گزینه به
صورت
پیشفرض
فعال است.
برای
غیرفعال
کردن تخلیه
حافظه نهان
کد پیش از
خاموش شدن
کامپایلر،
گزینه -XX:-UseCodeCacheFlushing
را مشخص
کنید.
-XX:+UseCondCardMark
بررسی
اینکه آیا
کارت از قبل
علامتگذاری
شده است یا
خیر را قبل
از
بهروزرسانی
جدول کارت
فعال
میسازد.
این گزینه
به طور
پیشفرض
غیرفعال
است و فقط
باید در
سیستمهای
دارای چند
سوکت
پردازنده
استفاده
شود، جایی
که کارایی
برنامههای
جاوا را که
به شدت متکی
به عملیات
همزمان
هستند،
افزایش
میدهد.
تنها Java HotSpot Server VM از
این گزینه
پشتیبانی
میکند.
-XX:+UseRTMDeopt
قفلگذاری
RTM را بسته به
نسبت سقط به
صورت
خودکار
تنظیم
میکند. این
نسبت توسط
گزینه -XX:RTMAbortRatio
مشخص
میشود. اگر
تعداد
تراکنشهای
سقطشده از
نسبت سقط
فراتر رود،
متد حاوی
قفل deoptimize شده و
با تمام
قفلها به
عنوان
قفلهای
عادی
مجدداً
کامپایل
خواهد شد.
این گزینه
به طور
پیشفرض
غیرفعال
است. گزینه
-XX:+UseRTMLocking باید
فعال باشد.
-XX:+UseRTMLocking
کد
قفلگذاری
حافظه
تراکنشی
محدود (RTM: Restricted Transactional
Memory) را برای
تمام
قفلهای
متورم (inflated locks) با
سازوکار
قفلگذاری
عادی به
عنوان
گرداننده
پشتیبان
تولید
میکند. این
گزینه به
طور
پیشفرض
غیرفعال
است.
گزینههای
مربوط به RTM
فقط برای Java HotSpot Server
VM در
پردازندههای
x86 که از
الحاقات
همگامسازی
تراکنشی (TSX)
پشتیبانی
میکنند،
در دسترس
هستند.
فناوری RTM
بخشی از TSX
اینتل است
که یک الحاق
به مجموعه
دستورالعملهای
x86 بوده و
ایجاد
برنامههای
چندرشتهای
را تسهیل
میبخشد.
فناوری RTM
دستورالعملهای
جدید XBEGIN، XABORT،
XEND و XTEST را
معرفی
میکند.
دستورالعملهای
XBEGIN و XEND
مجموعهای
از
دستورالعملها
را برای
اجرا به
عنوان یک
تراکنش در
بر
میگیرند.
اگر در حین
اجرای
تراکنش هیچ
تداخلی رخ
ندهد،
تغییرات
حافظه و
ثباتها (registers)
با هم در
دستورالعمل
XEND ثبت (commit)
میشوند. از
دستورالعمل
XABORT میتوان
برای سقط
صریح یک
تراکنش و از
دستورالعمل
XEND برای
بررسی
اینکه آیا
مجموعهای
از
دستورالعملها
درون یک
تراکنش
اجرا
میشوند یا
خیر،
استفاده
کرد.
قفل روی یک
تراکنش
زمانی
متورم (inflated)
میشود که
رشته دیگری
تلاش کند به
همان
تراکنش
دسترسی
یابد، که در
نتیجه
رشتهای را
که در ابتدا
درخواست
دسترسی به
تراکنش را
نداشته است
مسدود
میکند.
فناوری RTM
نیازمند آن
است که
مجموعهای
از عملیات
پشتیبان در
صورت سقط یا
شکست یک
تراکنش
تعیین شود.
یک قفل RTM
قفلی است که
به سیستم TSX
واگذار شده
است.
فناوری RTM
کارایی را
برای
قفلهای
بسیار
رقابتی با
تداخل کم در
یک ناحیه
بحرانی (critical region،
کدی که بیش
از یک رشته
نباید
همزمان به
آن دسترسی
داشته باشد)
بهبود
میبخشد.
همچنین RTM
کارایی
قفلگذاری
درشتدانه
(coarse-grain locking) را که
معمولاً در
برنامههای
چندرشتهای
عملکرد
خوبی
ندارد،
بهبود
میبخشد.
(قفلگذاری
درشتدانه
راهبرد نگه
داشتن
قفلها
برای مدت
طولانی به
منظور به
حداقل
رساندن بار
اضافی ناشی
از گرفتن و
آزادسازی
قفل است، در
حالی که
قفلگذاری
ریزدانه (fine-grained
locking) راهبرد
تلاش برای
دستیابی به
حداکثر
همزمانی با
قفل کردن
تنها در
زمان نیاز و
آزادسازی
در
سریعترین
زمان ممکن
است.)
همچنین،
برای
قفلهای با
رقابت کم که
توسط
رشتههای
مختلف
استفاده
میشوند، RTM
میتواند
اشتراک
کاذب خط
حافظه نهان
(false cache line sharing) را که
به عنوان
پینگپنگ
خط حافظه
نهان نیز
شناخته
میشود،
کاهش دهد.
این حالت
زمانی رخ
میدهد که
چندین رشته
از
پردازندههای
مختلف به
منابع
متفاوتی
دسترسی
پیدا
میکنند،
اما این
منابع از یک
خط حافظه
نهان مشترک
استفاده
میکنند. در
نتیجه،
پردازندهها
مکرراً
خطوط حافظه
نهان
پردازندههای
دیگر را
باطل
میکنند که
آنها را
مجبور
میسازد به
جای حافظه
نهان،
اطلاعات را
از حافظه
اصلی
بخوانند.
-XX:+UseSHA
دستورالعملهای
ذاتی مبتنی
بر
سختافزار
را برای
توابع
درهمسازی
رمزنگاری SHA
در
سختافزار SPARC
فعال
میکند.
UseSHA
همراه با
گزینههای
UseSHA1Intrinsics،
UseSHA256Intrinsics و
UseSHA512Intrinsics
استفاده
میشود.
فلگهای
UseSHA و UseSHA*Intrinsics به
طور
پیشفرض
فعال هستند
و تنها برای
نسخه 64 بیتی Java
HotSpot Server VM روی SPARC T4 و
جدیدتر
پشتیبانی
میشوند.
این
قابلیت
تنها در
صورت
استفاده از
ارائهدهنده
sun.security.provider.Sun برای
عملیات SHA
کاربرد
دارد.
برای
غیرفعال
کردن تمامی
توابع ذاتی
سختافزاری
SHA، گزینه -XX:-UseSHA
را مشخص
کنید. برای
غیرفعال
کردن تنها
یک تابع
ذاتی خاص SHA،
از گزینه
متناظر
مربوطه
استفاده
نمایید؛
برای مثال:
-XX:-UseSHA256Intrinsics.
-XX:+UseSHA1Intrinsics
توابع
ذاتی را
برای تابع
درهمسازی
رمزنگاری SHA-1
فعال
میکند.
-XX:+UseSHA256Intrinsics
توابع
ذاتی را
برای توابع
درهمسازی
رمزنگاری SHA-224
و SHA-256 فعال
میکند.
-XX:+UseSHA512Intrinsics
توابع
ذاتی را
برای توابع
درهمسازی
رمزنگاری SHA-384
و SHA-512 فعال
میکند.
-XX:+UseSuperWord
تبدیل
عملیات
اسکالر (scalar) به
عملیات
ابرکلمه (superword)
را فعال
میکند. این
گزینه به
طور
پیشفرض
فعال است.
برای
غیرفعال
کردن تبدیل
عملیات
اسکالر به
ابرکلمه،
گزینه -XX:-UseSuperWord
را مشخص
نمایید.
تنها Java HotSpot Server VM از
این گزینه
پشتیبانی
میکند.
این
گزینهها
امکان
جمعآوری
اطلاعات
سیستم و
انجام
اشکالزدایی
گسترده را
فراهم
میکنند.
-XX:+ExtendedDTraceProbes
پروبهای
اضافی
ابزار dtrace را
که بر
کارایی
تأثیر
میگذارند،
فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و dtrace
تنها
پروبهای
استاندارد
را انجام
میدهد.
-XX:+HeapDumpOnOutOfMemory
هنگام
پرتاب
استثنای
java.lang.OutOfMemoryError، دامپ
کردن هیپ
جاوا (Java heap) در
فایلی در
دایرکتوری
جاری با
استفاده از
پروفایلر
هیپ (HPROF) را
فعال
میکند.
میتوانید
مسیر و نام
فایل دامپ
هیپ را
صراحتاً با
استفاده از
گزینه -XX:HeapDumpPath
تنظیم کنید.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و هنگام
پرتاب
استثنای
OutOfMemoryError هیپ
دامپ
نمیشود.
-XX:HeapDumpPath=path
مسیر و
نام فایل را
برای نوشتن
دامپ هیپ
ارائهشده
توسط
پروفایلر
هیپ (HPROF)
هنگامی که
گزینه
-XX:+HeapDumpOnOutOfMemoryError
تنظیم شده
باشد، مشخص
میکند.
بهطور
پیشفرض،
فایل در
دایرکتوری
کاری جاری
ایجاد
میشود و به
صورت
java_pidpid.hprof
نامگذاری
میشود که
در آن
pid
شناسه
فرآیندی
است که موجب
بروز خطا
شده است.
مثال زیر
نحوه تنظیم
صریح فایل
پیشفرض را
نشان
میدهد (
%p
نشاندهنده
شناسه
فرآیند
جاری است):
-XX:HeapDumpPath=./java_pid%p.hprof
مثال زیر
نحوه تنظیم
فایل دامپ
هیپ به
/var/log/java/java_heapdump.hprof را
نشان
میدهد:
-XX:HeapDumpPath=/var/log/java/java_heapdump.hprof
-XX:LogFile=path
مسیر و
نام فایلی
که
دادههای
لاگ در آن
نوشته
میشوند را
تعیین
میکند.
بهطور
پیشفرض،
فایل در
دایرکتوری
کاری جاری
ایجاد
میشود و
نام آن
hotspot.log
است.
مثال زیر
نحوه تنظیم
فایل لاگ به
/var/log/java/hotspot.log را
نشان
میدهد:
-XX:LogFile=/var/log/java/hotspot.log
-XX:+PrintClassHistogram
چاپ
هیستوگرام
نمونههای
کلاس پس از
رویداد
Control+C
(
SIGTERM) را فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
تنظیم این
گزینه
معادل
اجرای
دستور jmap -histo یا
دستور jcmd pid
GC.class_histogram است که
در آن pid
شناسه
فرآیند
جاری جاوا
است.
-XX:+PrintConcurrentLocks
چاپ
قفلها را
پس از یک
رویداد
فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
چاپ
قفلهای
java.util.concurrent را پس
از یک
رویداد Control+C
(SIGTERM) فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
تنظیم این
گزینه
معادل
اجرای
دستور jstack -l یا
دستور jcmd pid
Thread.print -l است، که
در آن pid
شناسه
فرآیند
جاری جاوا
است.
-XX:+UnlockDiagnosticVMOptions
گزینههای
مربوط به
عیبیابی و
تشخیص JVM را
بازگشایی
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و
گزینههای
عیبیابی
در دسترس
نیستند.
این
گزینهها
نحوه انجام
جمعآوری
زباله (GC)
توسط ماشین
مجازی Java HotSpot را
کنترل
میکنند.
-XX:+AggressiveHeap
بهینهسازی
هیپ جاوا را
فعال
میکند. این
گزینه
پارامترهای
مختلفی را
بر اساس
پیکربندی
رایانه (رم و
پردازنده)
بهگونهای
تنظیم
میکند که
برای
کارهای
طولانیمدت
با تخصیص
شدید حافظه
بهینه
باشند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و هیپ
بهینهسازی
نمیشود.
-XX:+AlwaysPreTouch
دسترسی
و لمس (touching)
تکتک
صفحات در
هیپ جاوا را
هنگام
مقداردهی
اولیه JVM فعال
میکند. این
کار تمام
صفحات را
پیش از ورود
به متد main()
وارد حافظه
میکند. این
گزینه
میتواند
در
آزمایشها
برای
شبیهسازی
یک سیستم
طولانیمدت
با نگاشت
تمام حافظه
مجازی به
حافظه
فیزیکی
استفاده
شود. بهطور
پیشفرض،
این گزینه
غیرفعال
است و تمامی
صفحات به
موازات پر
شدن فضای
هیپ JVM تخصیص
داده (commit)
میشوند.
-XX:+CMSClassUnloadingEnabled
تخلیه
کلاسها (class unloading)
را هنگام
استفاده از
جمعآورنده
زباله
علامتگذاری
و جاروب
همزمان (CMS)
فعال
میکند. این
گزینه
بهطور
پیشفرض
فعال است.
برای
غیرفعال
کردن تخلیه
کلاس برای
جمعآورنده
زباله CMS،
گزینه -XX:-CMSClassUnloadingEnabled
را مشخص
کنید.
-XX:CMSExpAvgFactor=percent
درصد
زمان (۰ تا
۱۰۰) را
تعیین
میکند که
برای
وزندهی به
نمونه فعلی
هنگام
محاسبه
میانگینهای
نمایی برای
آمارهای
جمعآوری
همزمان
استفاده
میشود.
بهطور
پیشفرض،
ضریب
میانگینهای
نمایی روی
۲۵٪ تنظیم
شده است.
مثال زیر
نحوه تنظیم
این ضریب
روی ۱۵٪ را
نشان
میدهد:
-XX:CMSInitiatingOccupancyFraction=percent
درصد
اشغال نسل
قدیمی (old generation) را
بین ۰ تا ۱۰۰
تعیین
میکند که
چرخه
جمعآوری CMS
در آن مقدار
آغاز
میشود.
مقدار
پیشفرض
روی
-1 تنظیم
شده است. هر
مقدار منفی
(از جمله
مقدار
پیشفرض)
نشان
میدهد که
از
-XX:CMSTriggerRatio برای
تعیین
مقدار کسر
اشغال
آغازین
استفاده
میشود.
مثال زیر
نحوه تنظیم
کسر اشغال
را به ۲۰٪
نشان
میدهد:
-XX:CMSInitiatingOccupancyFraction=20
-XX:+CMSScavengeBeforeRemark
تلاش
برای روبش (scavenging)
را قبل از
مرحله
علامتگذاری
مجدد (remark) در CMS
فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
-XX:CMSTriggerRatio=percent
درصدی (۰
تا ۱۰۰) از
مقدار
مشخصشده
توسط
-XX:MinHeapFreeRatio را
تعیین
میکند که
پیش از آغاز
چرخه
جمعآوری CMS
تخصیص
مییابد.
مقدار
پیشفرض
روی ۸۰٪
تنظیم شده
است.
مثال زیر
نحوه تنظیم
کسر اشغال
به ۷۵٪ را
نشان
میدهد:
-XX:ConcGCThreads=threads
تعداد
نخهای
مورد
استفاده
برای GC
همزمان را
تعیین
میکند.
مقدار
پیشفرض به
تعداد
پردازندههای
در دسترس JVM
بستگی دارد.
برای
مثال، برای
تنظیم
تعداد
نخهای GC
همزمان روی
۲، گزینه
زیر را مشخص
کنید:
-XX:+DisableExplicitGC
گزینهای
را فعال
میکند که
پردازش
فراخوانیهای
System.gc() را
غیرفعال
میسازد.
این گزینه
بهطور
پیشفرض
غیرفعال
است، به این
معنی که
فراخوانیهای
System.gc() پردازش
میشوند.
اگر پردازش
فراخوانیهای
System.gc() غیرفعال
شود، JVM
همچنان در
صورت لزوم
عملیات GC را
انجام
میدهد.
-XX:+ExplicitGCInvokesConcurrent
فراخوانی
GC همزمان را
با استفاده
از درخواست
System.gc() فعال
میکند. این
گزینه
بهطور
پیشفرض
غیرفعال
است و تنها
میتواند
همراه با
گزینه -XX:+UseConcMarkSweepGC
فعال شود.
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
فراخوانی
GC همزمان با
استفاده از
درخواست System.gc()
و تخلیه
کلاسها در
طول چرخه GC
همزمان را
فعال
میکند. این
گزینه
بهطور
پیشفرض
غیرفعال
است و تنها
میتواند
همراه با
گزینه -XX:+UseConcMarkSweepGC
فعال شود.
-XX:G1HeapRegionSize=size
اندازه
ناحیههایی
را که هیپ
جاوا هنگام
استفاده از
جمعآورنده
اولویت-زباله
(G1) به آنها
تقسیم
میشود،
تعیین
میکند. این
مقدار
میتواند
بین ۱
مگابایت تا
۳۲ مگابایت
باشد.
اندازه
پیشفرض
ناحیه
بهصورت
ارگونومیک
و بر اساس
اندازه هیپ
تعیین
میشود.
مثال زیر
نحوه تنظیم
اندازه
بخشها روی
۱۶ مگابایت
را نشان
میدهد:
-XX:+G1PrintHeapRegions
چاپ
اطلاعات
مربوط به
اینکه کدام
ناحیهها
توسط
جمعآورنده
G1 تخصیص داده
شده و کدام
ناحیهها
بازپسگرفته
شدهاند را
فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
-XX:G1ReservePercent=percent
درصدی از
هیپ (۰ تا ۵۰)
را تعیین
میکند که
بهعنوان
یک سقف کاذب
برای کاهش
احتمال
شکست ارتقا
(promotion failure) در
جمعآورنده
G1 رزرو
میشود.
بهطور
پیشفرض،
این گزینه
روی ۱۰٪
تنظیم شده
است.
مثال زیر
نحوه تنظیم
هیپ
رزروشده
روی ۲۰٪ را
نشان
میدهد:
-XX:InitialHeapSize=size
اندازه
اولیه (به
بایت) استخر
تخصیص
حافظه را
تعیین
میکند. این
مقدار باید
۰ یا مضربی
از ۱۰۲۴ و
بزرگتر از
۱ مگابایت
باشد. برای
مشخص کردن
کیلوبایت
حرف
k یا
K،
برای
مگابایت
حرف
m یا
M، و
برای
گیگابایت
حرف
g یا
G را
الحاق کنید.
مقدار
پیشفرض در
زمان اجرا
بر اساس
پیکربندی
سیستم
انتخاب
میشود. بخش
«Ergonomics» را در
Java SE
HotSpot Virtual Machine Garbage Collection Tuning Guide در
نشانی
http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html
ببینید.
مثالهای
زیر نحوه
تنظیم
اندازه
حافظه
تخصیصیافته
به ۶
مگابایت را
با استفاده
از واحدهای
مختلف نشان
میدهند:
-XX:InitialHeapSize=6291456
-XX:InitialHeapSize=6144k
-XX:InitialHeapSize=6m
اگر این
گزینه را
روی ۰ تنظیم
کنید،
اندازه
اولیه
برابر با
مجموع
اندازههای
تخصیصیافته
برای نسل
قدیم و نسل
جوان تنظیم
خواهد شد.
اندازه هیپ
برای نسل
جوان را
میتوان با
استفاده از
گزینه
-XX:NewSize
تنظیم کرد.
-XX:InitialSurvivorRatio=ratio
نسبت
اولیه فضای
بازماندگان
(survivor space) مورد
استفاده
توسط
جمعآورنده
زباله با
کارایی
بالا (که با
گزینههای
-XX:+UseParallelGC یا -
XX:+UseParallelOldGC
فعال
میشود) را
تعیین
میکند.
تغییر
اندازه
تطبیقی (adaptive sizing)
بهطور
پیشفرض در
جمعآورنده
زباله با
کارایی
بالا با
استفاده از
گزینههای
-XX:+UseParallelGC و
-XX:+UseParallelOldGC
فعال است، و
فضای
بازماندگان
بر اساس
رفتار
برنامه، با
شروع از
مقدار
اولیه،
تغییر
اندازه
میدهد. اگر
اندازهگیری
تطبیقی
غیرفعال
باشد (با
استفاده از
گزینه
-XX:-UseAdaptiveSizePolicy)،
آنگاه باید
از گزینه
-XX:SurvivorRatio برای
تنظیم
اندازه
فضای
بازماندگان
در کل طول
اجرای
برنامه
استفاده
شود.
فرمول زیر
میتواند
برای
محاسبه
اندازه
اولیه فضای
بازماندگان
(S) بر اساس
اندازه نسل
جوان (Y) و
نسبت اولیه
فضای
بازماندگان
(R) استفاده
شود:
عدد ۲ در
معادله
نشاندهنده
دو فضای
بازماندگان
است. هرچه
مقدار
مشخصشده
برای نسبت
اولیه فضای
بازماندگان
بزرگتر
باشد،
اندازه
اولیه فضای
بازماندگان
کوچکتر
خواهد بود.
بهطور
پیشفرض،
نسبت اولیه
فضای
بازماندگان
روی ۸ تنظیم
شده است. اگر
از مقدار
پیشفرض
برای
اندازه
فضای نسل
جوان (۲
مگابایت)
استفاده
شود،
اندازه
اولیه فضای
بازماندگان
۰.۲ مگابایت
خواهد بود.
مثال زیر
نحوه تنظیم
نسبت اولیه
فضای
بازماندگان
به ۴ را نشان
میدهد:
-XX:InitialSurvivorRatio=4
-XX:InitiatingHeapOccupancyPercent=percent
درصد
اشغال هیپ (۰
تا ۱۰۰) را
تعیین
میکند که
در آن چرخه GC
همزمان
آغاز
میشود. این
گزینه توسط
جمعآورندههای
زبالهای
استفاده
میشود که
چرخه GC
همزمان را
بر اساس
اشغال کل
هیپ، و نه
فقط یکی از
نسلها،
آغاز
میکنند
(برای مثال،
جمعآورنده
زباله G1).
بهطور
پیشفرض،
مقدار
آغازین روی
۴۵٪ تنظیم
شده است.
مقدار ۰ به
معنای
چرخههای GC
مداوم و
بدون توقف
است. مثال
زیر نحوه
تنظیم
اشغال
آغازین هیپ
روی ۷۵٪ را
نشان
میدهد:
-XX:InitiatingHeapOccupancyPercent=75
-XX:MaxGCPauseMillis=time
هدفی را
برای
حداکثر
زمان توقف GC
(به
میلیثانیه)
تعیین
میکند. این
یک هدف
انعطافپذیر
(soft goal) است و JVM
تمام تلاش
خود را برای
رسیدن به آن
انجام
خواهد داد.
بهطور
پیشفرض،
هیچ مقداری
برای
حداکثر
زمان توقف
وجود ندارد.
مثال زیر
نحوه تنظیم
حداکثر
زمان توقف
هدف به ۵۰۰
میلیثانیه
را نشان
میدهد:
-XX:MaxHeapSize=size
حداکثر
اندازه (به
بایت) استخر
تخصیص
حافظه را
تعیین
میکند. این
مقدار باید
مضربی از
۱۰۲۴ و
بزرگتر از
۲ مگابایت
باشد. برای
مشخص کردن
کیلوبایت
حرف
k یا
K،
برای
مگابایت
حرف
m یا
M، و
برای
گیگابایت
حرف
g یا
G را
الحاق کنید.
مقدار
پیشفرض در
زمان اجرا
بر اساس
پیکربندی
سیستم
انتخاب
میشود. در
استقرارهای
سرور،
معمولاً
-XX:InitialHeapSize و
-XX:MaxHeapSize
روی یک
مقدار
تنظیم
میشوند.
بخش «Ergonomics» را
در
Java SE HotSpot Virtual Machine Garbage Collection Tuning
Guide در نشانی
http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html
ببینید.
مثالهای
زیر نحوه
تعیین
حداکثر
اندازه
مجاز حافظه
تخصیصیافته
به ۸۰
مگابایت را
با استفاده
از واحدهای
مختلف نشان
میدهند:
-XX:MaxHeapSize=83886080
-XX:MaxHeapSize=81920k
-XX:MaxHeapSize=80m
در
پلتفرمهای
Oracle Solaris 7 و Oracle Solaris 8 SPARC، حد
بالای این
مقدار
تقریباً
۴٬۰۰۰
مگابایت
منهای
مقادیر
سربار است.
در
پلتفرمهای
Oracle Solaris
2.6 و x86، حد
بالا
تقریباً
۲٬۰۰۰
مگابایت
منهای
مقادیر
سربار است.
در
پلتفرمهای
لینوکس، حد
بالا
تقریباً
۲٬۰۰۰
مگابایت
منهای
مقادیر
سربار است.
گزینه -XX:MaxHeapSize
معادل -Xmx
است.
-XX:MaxHeapFreeRatio=percent
حداکثر
درصد مجاز
فضای خالی
هیپ (۰ تا ۱۰۰)
را پس از یک
رویداد GC
تعیین
میکند. اگر
فضای خالی
هیپ فراتر
از این
مقدار
گسترش
یابد، هیپ
کوچک خواهد
شد. بهطور
پیشفرض،
این مقدار
روی ۷۰٪
تنظیم شده
است.
مثال زیر
نحوه تنظیم
حداکثر
نسبت هیپ
خالی به ۷۵٪
را نشان
میدهد:
-XX:MaxMetaspaceSize=size
حداکثر
مقدار
حافظه
نیتیو (native memory) را
که
میتواند
برای
فرادادههای
کلاس (class metadata)
تخصیص داده
شود تعیین
میکند.
بهطور
پیشفرض،
این اندازه
محدود نیست.
مقدار
فراداده
برای یک
برنامه به
خود
برنامه،
سایر
برنامههای
در حال اجرا
و مقدار
حافظه در
دسترس
سیستم
بستگی دارد.
مثال زیر
نحوه تعیین
حداکثر
اندازه
فرادادههای
کلاس به ۲۵۶
مگابایت را
نشان
میدهد:
-XX:MaxMetaspaceSize=256m
-XX:MaxNewSize=size
حداکثر
اندازه (به
بایت) هیپ را
برای نسل
جوان (nursery)
تعیین
میکند.
مقدار
پیشفرض
بهصورت
ارگونومیک
تعیین
میشود.
-XX:MaxTenuringThreshold=threshold
حداکثر
آستانه
تصدی/ماندگاری
(tenuring threshold) را برای
استفاده در
تغییر
اندازه
تطبیقی GC
تعیین
میکند.
بزرگترین
مقدار ۱۵
است. مقدار
پیشفرض
برای
جمعآورنده
موازی (throughput)
برابر ۱۵ و
برای
جمعآورنده
CMS برابر ۶
است.
مثال زیر
نحوه تنظیم
حداکثر
آستانه
تصدی به ۱۰
را نشان
میدهد:
-XX:MaxTenuringThreshold=10
-XX:MetaspaceSize=size
اندازه
فضای
تخصیصیافته
فرادادههای
کلاس را
تعیین
میکند که
اولین بار
پس از فراتر
رفتن از آن،
جمعآوری
زباله آغاز
میشود. این
آستانه
برای
جمعآوری
زباله بسته
به مقدار
فراداده
استفادهشده
کاهش یا
افزایش
مییابد.
اندازه
پیشفرض به
پلتفرم
بستگی
دارد.
-XX:MinHeapFreeRatio=percent
حداقل
درصد مجاز
فضای خالی
هیپ (۰ تا ۱۰۰)
را پس از یک
رویداد GC
تعیین
میکند. اگر
فضای خالی
هیپ به کمتر
از این
مقدار
برسد، هیپ
گسترش
خواهد یافت.
بهطور
پیشفرض،
این مقدار
روی ۴۰٪
تنظیم شده
است.
مثال زیر
نحوه تنظیم
حداقل نسبت
هیپ خالی به
۲۵٪ را نشان
میدهد:
-XX:NewRatio=ratio
نسبت بین
اندازه نسل
جوان و نسل
قدیم را
تعیین
میکند.
بهطور
پیشفرض،
این گزینه
روی ۲ تنظیم
شده است.
مثال زیر
نحوه تنظیم
نسبت جوان
به قدیم را
روی ۱ نشان
میدهد:
-XX:NewSize=size
اندازه
اولیه (به
بایت) هیپ را
برای نسل
جوان (nursery)
تعیین
میکند.
برای مشخص
کردن
کیلوبایت
حرف
k یا
K،
برای
مگابایت
حرف
m یا
M، و
برای
گیگابایت
حرف
g یا
G را
الحاق کنید.
ناحیه نسل
جوان در هیپ
برای اشیاء
جدید
استفاده
میشود.
عملیات GC در
این ناحیه
بیش از سایر
نواحی
انجام
میشود. اگر
اندازه نسل
جوان بیش از
حد کم باشد،
تعداد
زیادی GC جزئی
(minor GC) انجام
خواهد شد.
اگر اندازه
بیش از حد
زیاد باشد،
فقط GC کامل (full GC)
اجرا خواهد
شد که تکمیل
آن ممکن است
زمان زیادی
ببرد.
اوراکل
توصیه
میکند
اندازه نسل
جوان را بین
یکدوم تا
یکچهارم
کل اندازه
هیپ نگه
دارید.
مثالهای
زیر نحوه
تعیین
اندازه
اولیه نسل
جوان به ۲۵۶
مگابایت را
با استفاده
از واحدهای
مختلف نشان
میدهند:
-XX:NewSize=256m
-XX:NewSize=262144k
-XX:NewSize=268435456
گزینه
-XX:NewSize
معادل
-Xmn
است.
-XX:ParallelGCThreads=threads
تعداد
نخهای
مورد
استفاده
برای
جمعآوری
موازی
زباله در
نسلهای
جوان و قدیم
را تعیین
میکند.
مقدار
پیشفرض به
تعداد
پردازندههای
در دسترس JVM
بستگی دارد.
برای
مثال، برای
تنظیم
تعداد
نخهای GC
موازی به ۲،
گزینه زیر
را مشخص
کنید:
-XX:+ParallelRefProcEnabled
پردازش
موازی
ارجاعات (reference
processing) را فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
-XX:+PrintAdaptiveSizePolicy
چاپ
اطلاعات
مربوط به
تغییر
اندازه
تطبیقی
نسلها را
فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
-XX:+PrintGC
چاپ
پیامها در
هر بار
اجرای GC را
فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
-XX:+PrintGCApplicationConcurrentTime
چاپ
مقدار زمان
سپریشده
از آخرین
توقف (برای
مثال، توقف GC)
را فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
-XX:+PrintGCApplicationStoppedTime
چاپ
مدتزمان
طول کشیدن
توقف (برای
مثال، توقف GC)
را فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
-XX:+PrintGCDateStamps
چاپ
برچسب
تاریخ (date stamp) را
در هر بار
اجرای GC فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
-XX:+PrintGCDetails
چاپ
پیامهای
تفصیلی را
در هر بار
اجرای GC فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
-XX:+PrintGCTaskTimeStamps
چاپ
برچسبهای
زمانی را
برای هر تسک
جداگانه
نخهای
کارگر GC فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
-XX:+PrintGCTimeStamps
چاپ
برچسبهای
زمانی را در
هر بار
اجرای GC فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
-XX:+PrintStringDeduplicationStatistics
آمارهای
تفصیلی حذف
دادههای
تکراری
رشتهها (deduplication)
را چاپ
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است. گزینه
-XX:+UseStringDeduplication را
ببینید.
-XX:+PrintTenuringDistribution
چاپ
اطلاعات سن
تصدی (tenuring age) را
فعال
میکند.
مثال زیر
نمونهای
از این
خروجی است:
Desired survivor size 48286924 bytes, new threshold 10 (max 10)
- age 1: 28992024 bytes, 28992024 total
- age 2: 1366864 bytes, 30358888 total
- age 3: 1425912 bytes, 31784800 total
...
اشیاء با سن
۱
جوانترین
بازماندگان
هستند
(آنها پس از
روبش قبلی
ایجاد
شدند، از
آخرین روبش
جان سالم به
در بردند و
از فضای eden به
فضای
بازماندگان
منتقل شدند).
اشیاء با سن
۲ از دو روبش
جان سالم به
در
بردهاند
(در طول روبش
دوم از یک
فضای
بازماندگان
به فضای
بعدی کپی
شدهاند). و
به همین
ترتیب.
در مثال
بالا،
۲۸٬۹۹۲٬۰۲۴
بایت از یک
روبش باقی
مانده و از eden
به فضای
بازماندگان
کپی
شدهاند،
۱٬۳۶۶٬۸۶۴
بایت توسط
اشیاء با سن
۲ اشغال شده
است، و غیره.
مقدار سوم
در هر ردیف،
اندازه
تجمعی
اشیاء با سن n
یا کمتر
است.
بهطور
پیشفرض،
این گزینه
غیرفعال
است.
-XX:+ScavengeBeforeFullGC
عملیات GC
نسل جوان را
قبل از هر GC
کامل (full GC) فعال
میکند. این
گزینه
بهطور
پیشفرض
فعال است.
اوراکل
توصیه
میکند که
آن را
غیرفعال
نکنید،
زیرا روبش
نسل جوان
قبل از یک GC
کامل
میتواند
تعداد
اشیاء قابل
دسترسی از
فضای نسل
قدیم به
فضای نسل
جوان را
کاهش دهد.
برای
غیرفعال
کردن GC نسل
جوان قبل از
هر GC کامل،
گزینه -XX:-ScavengeBeforeFullGC
را مشخص
کنید.
-XX:SoftRefLRUPolicyMSPerMB=time
مدت
زمانی (به
میلیثانیه)
را که یک شیء
با ارجاع
ضعیف (softly reachable) پس
از آخرین
باری که به
آن ارجاع
داده شده
است روی هیپ
فعال نگه
داشته
میشود،
تعیین
میکند.
مقدار
پیشفرض،
یک ثانیه
طول عمر به
ازای هر
مگابایت
فضای خالی
در هیپ است.
گزینه
-XX:SoftRefLRUPolicyMSPerMB
مقادیر
صحیحی را
میپذیرد
که
نشاندهنده
میلیثانیه
به ازای هر
مگابایت از
اندازه
فعلی هیپ
(برای ماشین
مجازی Java HotSpot Client) یا
حداکثر
اندازه
ممکن هیپ
(برای ماشین
مجازی Java HotSpot Server)
هستند. این
تفاوت به
این معنی
است که Client VM
تمایل دارد
به جای بزرگ
کردن هیپ،
ارجاعات
نرم (soft references) را
پاکسازی
کند، در
حالی که Server VM
تمایل دارد
به جای
پاکسازی
ارجاعات
نرم، هیپ را
رشد دهد. در
مورد اخیر،
مقدار
گزینه
-Xmx
تأثیر
قابلتوجهی
بر سرعت
جمعآوری
زباله
ارجاعات
نرم دارد.
مثال زیر
نحوه تنظیم
مقدار را
روی ۲.۵
ثانیه نشان
میدهد:
-XX:SoftRefLRUPolicyMSPerMB=2500
-XX:StringDeduplicationAgeThreshold=threshold
اشیاء String
که به سن
مشخصشده
میرسند،
کاندیدای
حذف تکرار
(deduplication) در نظر
گرفته
میشوند. سن
یک شیء
معیاری از
تعداد
دفعاتی است
که از
جمعآوری
زباله جان
سالم به در
برده است.
این مورد
گاهی اوقات
تصدی (tenuring)
نامیده
میشود؛
گزینه -XX:+PrintTenuringDistribution
را ببینید.
توجه داشته
باشید
اشیاء String که
پیش از
رسیدن به
این سن به
ناحیه
قدیمی هیپ
ارتقا
مییابند،
همیشه
کاندیدای
حذف تکرار
در نظر
گرفته
میشوند.
مقدار
پیشفرض
این گزینه 3
است. گزینه
-XX:+UseStringDeduplication را
ببینید.
-XX:SurvivorRatio=ratio
نسبت بین
اندازه
فضای eden و
اندازه
فضای
بازماندگان
(survivor) را تعیین
میکند.
بهطور
پیشفرض،
این گزینه
روی ۸ تنظیم
شده است.
مثال زیر
نحوه تنظیم
نسبت فضای eden
به فضای
بازماندگان
را به ۴ نشان
میدهد:
-XX:TargetSurvivorRatio=percent
درصد
مورد نظر
فضای
بازماندگان
(۰ تا ۱۰۰)
مورد
استفاده پس
از GC نسل جوان
را تعیین
میکند.
بهطور
پیشفرض،
این گزینه
روی ۵۰٪
تنظیم شده
است.
مثال زیر
نحوه تنظیم
نسبت هدف
فضای
بازماندگان
به ۳۰٪ را
نشان
میدهد:
-XX:TargetSurvivorRatio=30
-XX:TLABSize=size
اندازه
اولیه (به
بایت) یک
بافر تخصیص
محلی نخ (TLAB) را
تعیین
میکند.
برای مشخص
کردن
کیلوبایت
حرف
k یا
K،
برای
مگابایت
حرف
m یا
M، و
برای
گیگابایت
حرف
g یا
G را
الحاق کنید.
اگر این
گزینه روی ۰
تنظیم شود، JVM
اندازه
اولیه را
بهطور
خودکار
انتخاب
میکند.
مثال زیر
نحوه تعیین
اندازه
اولیه TLAB به
۵۱۲
کیلوبایت
را نشان
میدهد:
-XX:+UseAdaptiveSizePolicy
استفاده
از تغییر
اندازه
تطبیقی
نسلها را
فعال
میکند. این
گزینه
بهطور
پیشفرض
فعال است.
برای
غیرفعال
کردن تغییر
اندازه
تطبیقی
نسلها،
گزینه -XX:-UseAdaptiveSizePolicy
را مشخص
کرده و
اندازه
استخر
تخصیص
حافظه را
صراحتاً
تنظیم کنید
(گزینه -XX:SurvivorRatio
را ببینید).
-XX:+UseCMSInitiatingOccupancyOnly
استفاده
از مقدار
اشغال را
بهعنوان
تنها معیار
برای آغاز
به کار
جمعآورنده
CMS فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و ممکن
است از
معیارهای
دیگر
استفاده
شود.
-XX:+UseConcMarkSweepGC
استفاده
از
جمعآورنده
زباله CMS را
برای نسل
قدیم فعال
میکند.
اوراکل
توصیه
میکند در
صورتی که
الزامات
تاخیر
برنامه
توسط
جمعآورنده
زباله
موازی (
-XX:+UseParallelGC)
برآورده
نمیشود،
از
جمعآورنده
زباله CMS
استفاده
کنید.
جمعآورنده
زباله G1 (
-XX:+UseG1GC)
گزینه
جایگزین
دیگری است.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و
جمعآورنده
بهطور
خودکار بر
اساس
پیکربندی
دستگاه و
نوع JVM
انتخاب
میشود.
هنگامی که
این گزینه
فعال است،
گزینه -XX:+UseParNewGC
بهطور
خودکار
تنظیم
میشود و
نباید آن را
غیرفعال
کنید، زیرا
ترکیب
گزینههای
زیر در JDK 8
منسوخ شده
است: -XX:+UseConcMarkSweepGC
-XX:-UseParNewGC.
-XX:+UseG1GC
استفاده
از
جمعآورنده
زباله
اولویت-زباله
(G1) را فعال
میکند. این
یک
جمعآورنده
زباله
سروری است
که برای
ماشینهای
چندپردازندهای
با مقدار
زیادی رم
طراحی شده
است. این
ابزار
اهداف زمان
توقف GC را با
احتمال
بالایی
برآورده
میکند و در
عین حال
توان کاری (throughput)
بالایی را
حفظ
مینماید.
جمعآورنده
G1 برای
برنامههایی
توصیه
میشود که
به هیپهای
بزرگ
(اندازههای
حدود ۶
گیگابایت
یا بزرگتر)
با الزامات
تأخیر GC
محدود (زمان
توقف
پایدار و
قابل
پیشبینی
زیر ۰.۵
ثانیه) نیاز
دارند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و
جمعآورنده
بهطور
خودکار بر
اساس
پیکربندی
دستگاه و
نوع JVM
انتخاب
میشود.
-XX:+UseGCOverheadLimit
استفاده
از سیاستی
را فعال
میکند که
نسبت زمان
صرفشده
توسط JVM برای GC
را قبل از
پرتاب
استثنای
OutOfMemoryError محدود
میسازد.
این گزینه
بهطور
پیشفرض
فعال است و GC
موازی در
صورتی که
بیش از ۹۸٪
از کل زمان
صرف
جمعآوری
زباله شود و
کمتر از ۲٪
از هیپ
بازیابی
شود، یک
استثنای
OutOfMemoryError پرتاب
خواهد کرد.
هنگامی که
هیپ کوچک
است، این
ویژگی
میتواند
برای
جلوگیری از
اجرای
برنامهها
برای
دورههای
زمانی
طولانی با
پیشرفت کم
یا بدون
پیشرفت
استفاده
شود. برای
غیرفعال
کردن این
گزینه،
-XX:-UseGCOverheadLimit را
مشخص کنید.
-XX:+UseNUMA
بهینهسازی
عملکرد یک
برنامه را
در سیستمی
با معماری
حافظه
غیریکنواخت
(NUMA) با افزایش
استفاده
برنامه از
حافظه با
تاخیر کمتر
فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و هیچ
بهینهسازی
برای NUMA انجام
نمیشود.
این گزینه
تنها زمانی
در دسترس
است که از
جمعآورنده
زباله
موازی (-XX:+UseParallelGC)
استفاده
شود.
-XX:+UseParallelGC
استفاده
از
جمعآورنده
زباله روبش
موازی (که به
عنوان
جمعآورنده
throughput نیز
شناخته
میشود) را
فعال
میکند تا
با
بهرهگیری
از چندین
پردازنده،
عملکرد
برنامه شما
را بهبود
بخشد.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و
جمعآورنده
بهطور
خودکار بر
اساس
پیکربندی
سیستم و نوع
JVM انتخاب
میشود. در
صورت فعال
بودن،
گزینه -XX:+UseParallelOldGC
نیز بهطور
خودکار
فعال
میشود،
مگر اینکه
صراحتاً آن
را غیرفعال
کنید.
-XX:+UseParallelOldGC
استفاده
از
جمعآورنده
زباله
موازی را
برای GCهای
کامل (full GCs) فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است. فعال
کردن آن،
گزینه -XX:+UseParallelGC
را نیز
بهطور
خودکار
فعال
میسازد.
-XX:+UseParNewGC
استفاده
از نخهای
موازی برای
جمعآوری
در نسل جوان
را فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است. هنگامی
که گزینه
-XX:+UseConcMarkSweepGC را
تنظیم
میکنید،
بهطور
خودکار
فعال
میشود.
استفاده از
گزینه -XX:+UseParNewGC
بدون گزینه
-XX:+UseConcMarkSweepGC در JDK 8
منسوخ شده
است.
-XX:+UseSerialGC
استفاده
از
جمعآورنده
زباله
سریالی را
فعال
میکند. این
گزینه
عموماً
بهترین
انتخاب
برای
برنامههای
کوچک و
سادهای
است که به
هیچ قابلیت
خاصی از
جمعآوری
زباله نیاز
ندارند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است و
جمعآورنده
بهطور
خودکار بر
اساس
پیکربندی
سیستم و نوع JVM
انتخاب
میشود.
-XX:+UseSHM
در
لینوکس، JVM را
قادر
میسازد تا
از حافظه
اشتراکی
برای
راهاندازی
صفحات بزرگ
(large pages) استفاده
کند.
برای
اطلاعات
بیشتر، بخش
«صفحات
بزرگ» (Large Pages) را
ببینید.
-XX:+UseStringDeduplication
حذف
دادههای
تکراری
رشتهها (string
deduplication) را فعال
میکند.
بهطور
پیشفرض،
این گزینه
غیرفعال
است. برای
استفاده از
این گزینه،
باید
جمعآورنده
اولویت-زباله
(G1) را فعال
کنید. گزینه
-XX:+UseG1GC را
ببینید.
حذف
دادههای
تکراری
رشتهها
با
بهرهگیری
از این
واقعیت که
بسیاری از
اشیاء String
یکسان
هستند،
ردپای
حافظه
اشیاء String را
در هیپ جاوا
کاهش
میدهد. به
جای اینکه
هر شیء String به
آرایه
کاراکتری
اختصاصی
خود اشاره
کند، اشیاء
یکسان String
میتوانند
به یک آرایه
کاراکتری
مشترک
اشاره کرده
و آن را به
اشتراک
بگذارند.
-XX:+UseTLAB
استفاده
از
بلوکهای
تخصیص محلی
نخ (TLAB) را در
فضای نسل
جوان فعال
میکند. این
گزینه
بهطور
پیشفرض
فعال است.
برای
غیرفعال
کردن
استفاده از
TLABها، -XX:-UseTLAB را
مشخص کنید.
این
گزینهها
در
نسخههای
پیشین
گنجانده
شده بودند،
اما از آن
زمان به بعد
غیرضروری
تشخیص داده
شدهاند.
-Xincgc
جمعآوری
زباله
افزایشی (incremental garbage
collection) را فعال
میکند. این
گزینه در JDK 8
بدون هیچ
جایگزینی
منسوخ شد.
-Xrunlibname
کتابخانه
اشکالزدایی/ارزیابی
عملکرد (debugging/profiling)
مشخصشده
را
بارگذاری
میکند.
گزینه -agentlib
جایگزین
این گزینه
شده است.
-XX:CMSIncrementalDutyCycle=percent
درصد
زمانی (۰ تا
۱۰۰) میان
جمعآوریهای
جزئی را
تنظیم
میکند که
به
جمعآورنده
همگام
اجازه اجرا
داده
میشود. این
گزینه به
دنبال
منسوخ شدن
گزینه -XX:+CMSIncrementalMode
در JDK 8 بدون
هیچ
جایگزینی
منسوخ شد.
-XX:CMSIncrementalDutyCycleMin=percent
درصد
زمانی (۰ تا
۱۰۰) میان
جمعآوریهای
جزئی را
تعیین
میکند که
حد پایین
چرخه کاری
در هنگام
فعال بودن
-XX:+CMSIncrementalPacing محسوب
میشود. این
گزینه به
دنبال
منسوخ شدن
گزینه -XX:+CMSIncrementalMode
در JDK 8 بدون
هیچ
جایگزینی
منسوخ شد.
-XX:+CMSIncrementalMode
حالت
افزایشی را
برای
جمعآورنده
CMS فعال
میکند. این
گزینه به
همراه سایر
گزینههایی
که با CMSIncremental
آغاز
میشوند،
در JDK 8 بدون
هیچ
جایگزینی
منسوخ شد.
-XX:CMSIncrementalOffset=percent
درصد
زمانی (۰ تا
۱۰۰) را
تعیین
میکند که
چرخه کاری
حالت
افزایشی در
طول بازه
زمانی میان
جمعآوریهای
جزئی به سمت
راست
جابهجا (shift)
میشود. این
گزینه به
دنبال
منسوخ شدن
گزینه -XX:+CMSIncrementalMode
در JDK 8 بدون
هیچ
جایگزینی
منسوخ شد.
-XX:+CMSIncrementalPacing
تنظیم
خودکار
چرخه کاری
حالت
افزایشی را
بر اساس
آمارهای
جمعآوریشده
در حین
اجرای JVM فعال
میکند. این
گزینه به
دنبال
منسوخ شدن
گزینه -XX:+CMSIncrementalMode
در JDK 8 بدون
هیچ
جایگزینی
منسوخ شد.
-XX:CMSIncrementalSafetyFactor=percent
درصد
زمانی (۰ تا
۱۰۰) مورد
استفاده
برای
افزودن
حاشیه
اطمینان در
هنگام
محاسبه
چرخه کاری
را تنظیم
میکند. این
گزینه به
دنبال
منسوخ شدن
گزینه -XX:+CMSIncrementalMode
در JDK 8 بدون
هیچ
جایگزینی
منسوخ شد.
-XX:CMSInitiatingPermOccupancyFraction=percent
درصد
اشغال فضای
نسل دائمی (۰
تا ۱۰۰) را
برای شروع
فرآیند GC
تنظیم
میکند. این
گزینه در JDK 8
بدون هیچ
جایگزینی
منسوخ شد.
-XX:MaxPermSize=size
حداکثر
اندازه
فضای نسل
دائمی را (به
بایت) تنظیم
میکند. این
گزینه در JDK 8
منسوخ شده و
گزینه -XX:MaxMetaspaceSize
جایگزین آن
گردید.
-XX:PermSize=size
فضای
تخصیصیافته
به نسل
دائمی (به
بایت) را
تنظیم
میکند که
در صورت
فراتر رفتن
از آن، یک
عملیات
جمعآوری
زباله آغاز
میشود. این
گزینه در JDK 8
منسوخ شده و
گزینه -XX:MetaspaceSize
جایگزین آن
گردید.
-XX:+UseSplitVerifier
تقسیم
فرآیند
اعتبارسنجی
را فعال
میکند.
بهطور
پیشفرض،
این گزینه
در
نسخههای
پیشین فعال
بود و
اعتبارسنجی
به دو فاز
تقسیم
میشد:
ارجاع نوع
(انجامشده
توسط
کامپایلر) و
بررسی نوع
(انجامشده
توسط زمان
اجرای JVM). این
گزینه در JDK 8
منسوخ شده
است و اکنون
اعتبارسنجی
بهطور
پیشفرض به
دو فاز
تقسیم
میشود و
راهی برای
غیرفعال
کردن آن
وجود
ندارد.
-XX:+UseStringCache
حافظه
پنهان
رشتههای
متداول
تخصیصیافته
را فعال
میکند. این
گزینه در JDK 8
بدون هیچ
جایگزینی
حذف شد.