java(1) Basic Tools java(1)

java - برنامه راه‌انداز برنامه‌های کاربردی جاوا

java [options] classname [args]
java [options] -jar filename [args]

options

گزینه‌های خط فرمان که با فاصله از هم جدا می‌شوند. بخش گزینه‌ها را ببینید.

classname

نام کلاسی که باید راه‌اندازی شود.

filename

نام فایل آرشیو جاوا (JAR) که باید فراخوانی شود. تنها با گزینه -jar استفاده می‌شود.

args

آرگومان‌هایی که با فاصله از هم جدا شده و به متد main() پاس داده می‌شوند.

دستور java یک برنامه کاربردی جاوا را اجرا می‌کند. این کار با راه‌اندازی محیط زمان اجرای جاوا (JRE)، بارگذاری کلاس مشخص‌شده، و فراخوانی متد main() آن کلاس انجام می‌شود. این متد باید به صورت public و static تعریف شده باشد، نباید هیچ مقداری را بازگرداند، و باید یک آرایه از نوع String را به عنوان پارامتر بپذیرد. تعریف این متد ساختار زیر را دارد:

public static void main(String[] args)

دستور java می‌تواند برای اجرای برنامه‌های JavaFX با بارگذاری کلاسی که یا دارای متد main() است یا کلاس javafx.application.Application را گسترش می‌دهد (extends)، استفاده شود. در حالت دوم، راه‌انداز یک نمونه از کلاس Application ایجاد کرده، متد init() آن را فراخوانی می‌کند، و سپس متد start(javafx.stage.Stage) را فرا می‌خواند.

به‌طور پیش‌فرض، نخستین آرگومانی که گزینه دستور java نباشد، نام کاملاً واجد شرایط (fully qualified name) کلاسی است که باید فراخوانی شود. اگر گزینه -jar مشخص شده باشد، آرگومان آن نام فایل JAR حاوی کلاس‌ها و فایل‌های منابع برنامه خواهد بود. کلاس آغازین باید توسط هدر مانیفست Main-Class در کد منبع آن تعیین شده باشد.

محیط JRE برای یافتن کلاس آغازین (و سایر کلاس‌های مورد استفاده برنامه) سه مجموعه از مکان‌ها را جستجو می‌کند: مسیر کلاس راه‌اندازی (bootstrap class path)، افزونه‌های نصب‌شده، و مسیر کلاس کاربر (user class path).

آرگومان‌های پس از نام فایل کلاس یا نام فایل JAR به متد main() پاس داده می‌شوند.

دستور 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
برای کسب اطلاعات بیشتر درباره کتابخانه‌های عامل بومی، به موارد زیر مراجعه کنید:
•بخش Agent Command Line Options در راهنمای رابط ابزارهای JVM در http://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#starting

-agentpath:pathname[=options]

کتابخانه عامل بومی مشخص‌شده با نام مسیر مطلق را بارگذاری می‌کند. این گزینه معادل -agentlib است، اما از مسیر کامل و نام فایل کتابخانه استفاده می‌کند.

-client

ماشین مجازی Java HotSpot Client VM را انتخاب می‌کند. نسخه ۶۴بیتی کیت توسعه جاوا (JDK) در حال حاضر این گزینه را نادیده گرفته و به جای آن از Server JVM استفاده می‌کند.

برای انتخاب پیش‌فرض JVM، بخش Server-Class Machine Detection را در http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html ببینید.

-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)
•راهنمای The Java Archive (JAR) Files در http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html
•بخش Lesson: Packaging Programs in JAR Files در

http://docs.oracle.com/javase/tutorial/deployment/jar/index.html

-javaagent:jarpath[=options]

عامل زبان برنامه‌نویسی جاوا مشخص‌شده را بارگذاری می‌کند. برای اطلاعات بیشتر درباره ابزارسازی برنامه‌های جاوا (instrumenting)، به توضیحات بسته java.lang.instrument در مستندات Java API در http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html مراجعه کنید.

-jre-restrict-search

محیط‌های JRE خصوصی کاربر را در جستجوی نسخه لحاظ می‌کند.

-no-jre-restrict-search

محیط‌های JRE خصوصی کاربر را از جستجوی نسخه مستثنی می‌کند.

-server

ماشین مجازی Java HotSpot Server VM را انتخاب می‌کند. نسخه ۶۴بیتی JDK فقط از Server VM پشتیبانی می‌کند، بنابراین در آن حالت این گزینه به‌طور ضمنی اعمال می‌شود.

برای انتخاب پیش‌فرض JVM، بخش Server-Class Machine Detection را در http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html ببینید.

-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 غیرفعال کنید، اندازه پیش‌فرض ۴۸ مگابایت خواهد بود:
-Xmaxjitcodesize=240m
این گزینه معادل -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:CICompilerCount=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:InlineSmallCode=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:MaxInlineSize=35

-XX:MaxNodeLimit=nodes

حداکثر تعداد گره‌های مورد استفاده در طول کامپایل یک متد منفرد را تعیین می‌کند. به طور پیش‌فرض، حداکثر تعداد گره‌ها برابر با 65,000 تنظیم شده است:
-XX:MaxNodeLimit=65000

-XX:MaxTrivialSize=size

حداکثر اندازه بایت‌کد (به بایت) یک متد ساده (trivial) را برای درون‌خطی شدن تعیین می‌کند. حرف k یا K را برای مشخص کردن کیلوبایت، m یا M را برای مگابایت، و g یا G را برای گیگابایت اضافه کنید. به طور پیش‌فرض، حداکثر اندازه بایت‌کد یک متد ساده برابر با 6 بایت تنظیم شده است:
-XX:MaxTrivialSize=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:CMSExpAvgFactor=15

-XX:CMSInitiatingOccupancyFraction=percent

درصد اشغال نسل قدیمی (old generation) را بین ۰ تا ۱۰۰ تعیین می‌کند که چرخه جمع‌آوری CMS در آن مقدار آغاز می‌شود. مقدار پیش‌فرض روی -1 تنظیم شده است. هر مقدار منفی (از جمله مقدار پیش‌فرض) نشان می‌دهد که از -XX:CMSTriggerRatio برای تعیین مقدار کسر اشغال آغازین استفاده می‌شود.

مثال زیر نحوه تنظیم کسر اشغال را به ۲۰٪ نشان می‌دهد:

-XX:CMSInitiatingOccupancyFraction=20

-XX:+CMSScavengeBeforeRemark

تلاش برای روبش (scavenging) را قبل از مرحله علامت‌گذاری مجدد (remark) در CMS فعال می‌کند. به‌طور پیش‌فرض، این گزینه غیرفعال است.

-XX:CMSTriggerRatio=percent

درصدی (۰ تا ۱۰۰) از مقدار مشخص‌شده توسط -XX:MinHeapFreeRatio را تعیین می‌کند که پیش از آغاز چرخه جمع‌آوری CMS تخصیص می‌یابد. مقدار پیش‌فرض روی ۸۰٪ تنظیم شده است.

مثال زیر نحوه تنظیم کسر اشغال به ۷۵٪ را نشان می‌دهد:

-XX:CMSTriggerRatio=75

-XX:ConcGCThreads=threads

تعداد نخ‌های مورد استفاده برای GC همزمان را تعیین می‌کند. مقدار پیش‌فرض به تعداد پردازنده‌های در دسترس JVM بستگی دارد.

برای مثال، برای تنظیم تعداد نخ‌های GC همزمان روی ۲، گزینه زیر را مشخص کنید:

-XX:ConcGCThreads=2

-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:G1HeapRegionSize=16m

-XX:+G1PrintHeapRegions

چاپ اطلاعات مربوط به اینکه کدام ناحیه‌ها توسط جمع‌آورنده G1 تخصیص داده شده و کدام ناحیه‌ها بازپس‌گرفته شده‌اند را فعال می‌کند. به‌طور پیش‌فرض، این گزینه غیرفعال است.

-XX:G1ReservePercent=percent

درصدی از هیپ (۰ تا ۵۰) را تعیین می‌کند که به‌عنوان یک سقف کاذب برای کاهش احتمال شکست ارتقا (promotion failure) در جمع‌آورنده G1 رزرو می‌شود. به‌طور پیش‌فرض، این گزینه روی ۱۰٪ تنظیم شده است.

مثال زیر نحوه تنظیم هیپ رزروشده روی ۲۰٪ را نشان می‌دهد:

-XX:G1ReservePercent=20

-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) استفاده شود:

S=Y/(R+2)
عدد ۲ در معادله نشان‌دهنده دو فضای بازماندگان است. هرچه مقدار مشخص‌شده برای نسبت اولیه فضای بازماندگان بزرگ‌تر باشد، اندازه اولیه فضای بازماندگان کوچک‌تر خواهد بود.

به‌طور پیش‌فرض، نسبت اولیه فضای بازماندگان روی ۸ تنظیم شده است. اگر از مقدار پیش‌فرض برای اندازه فضای نسل جوان (۲ مگابایت) استفاده شود، اندازه اولیه فضای بازماندگان ۰.۲ مگابایت خواهد بود.

مثال زیر نحوه تنظیم نسبت اولیه فضای بازماندگان به ۴ را نشان می‌دهد:

-XX:InitialSurvivorRatio=4

-XX:InitiatingHeapOccupancyPercent=percent

درصد اشغال هیپ (۰ تا ۱۰۰) را تعیین می‌کند که در آن چرخه GC همزمان آغاز می‌شود. این گزینه توسط جمع‌آورنده‌های زباله‌ای استفاده می‌شود که چرخه GC همزمان را بر اساس اشغال کل هیپ، و نه فقط یکی از نسل‌ها، آغاز می‌کنند (برای مثال، جمع‌آورنده زباله G1).

به‌طور پیش‌فرض، مقدار آغازین روی ۴۵٪ تنظیم شده است. مقدار ۰ به معنای چرخه‌های GC مداوم و بدون توقف است. مثال زیر نحوه تنظیم اشغال آغازین هیپ روی ۷۵٪ را نشان می‌دهد:

-XX:InitiatingHeapOccupancyPercent=75

-XX:MaxGCPauseMillis=time

هدفی را برای حداکثر زمان توقف GC (به میلی‌ثانیه) تعیین می‌کند. این یک هدف انعطاف‌پذیر (soft goal) است و JVM تمام تلاش خود را برای رسیدن به آن انجام خواهد داد. به‌طور پیش‌فرض، هیچ مقداری برای حداکثر زمان توقف وجود ندارد.

مثال زیر نحوه تنظیم حداکثر زمان توقف هدف به ۵۰۰ میلی‌ثانیه را نشان می‌دهد:

-XX:MaxGCPauseMillis=500

-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:MaxHeapFreeRatio=75

-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:MinHeapFreeRatio=25

-XX:NewRatio=ratio

نسبت بین اندازه نسل جوان و نسل قدیم را تعیین می‌کند. به‌طور پیش‌فرض، این گزینه روی ۲ تنظیم شده است. مثال زیر نحوه تنظیم نسبت جوان به قدیم را روی ۱ نشان می‌دهد:
-XX:NewRatio=1

-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:ParallelGCThreads=2

-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:SurvivorRatio=4

-XX:TargetSurvivorRatio=percent

درصد مورد نظر فضای بازماندگان (۰ تا ۱۰۰) مورد استفاده پس از GC نسل جوان را تعیین می‌کند. به‌طور پیش‌فرض، این گزینه روی ۵۰٪ تنظیم شده است.

مثال زیر نحوه تنظیم نسبت هدف فضای بازماندگان به ۳۰٪ را نشان می‌دهد:

-XX:TargetSurvivorRatio=30

-XX:TLABSize=size

اندازه اولیه (به بایت) یک بافر تخصیص محلی نخ (TLAB) را تعیین می‌کند. برای مشخص کردن کیلوبایت حرف k یا K، برای مگابایت حرف m یا M، و برای گیگابایت حرف g یا G را الحاق کنید. اگر این گزینه روی ۰ تنظیم شود، JVM اندازه اولیه را به‌طور خودکار انتخاب می‌کند.

مثال زیر نحوه تعیین اندازه اولیه TLAB به ۵۱۲ کیلوبایت را نشان می‌دهد:

-XX:TLABSize=512k

-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 بدون هیچ جایگزینی حذف شد.

مثال‌های زیر نحوه استفاده از گزینه‌های تجربی تنظیم عملکرد را برای بهینه‌سازی توان عملیاتی یا ارائه زمان پاسخ‌دهی کوتاه‌تر نشان می‌دهند.

مثال ۱ تنظیم برای توان عملیاتی بالاتر

java -d64 -server -XX:+AggressiveOpts -XX:+UseLargePages -Xmn10g  -Xms26g -Xmx26g

مثال ۲ تنظیم برای زمان پاسخ‌دهی کوتاه‌تر

java -d64 -XX:+UseG1GC -Xms26g Xmx26g -XX:MaxGCPauseMillis=500 -XX:+PrintGCTimeStamp

صفحات بزرگ (Large pages) که به عنوان huge pages نیز شناخته می‌شوند، صفحات حافظه‌ای هستند که به‌طور چشمگیری از اندازه استاندارد صفحه حافظه (که بسته به پردازنده و سیستم‌عامل متفاوت است) بزرگ‌تر هستند. صفحات بزرگ، بافرهای ترجمه آدرس پردازنده (Translation-Lookaside Buffers) را بهینه‌سازی می‌کنند.

یک بافر ترجمه آدرس (TLB یا Translation-Lookaside Buffer) حافظه پنهانی برای ترجمه صفحه است که جدیدترین ترجمه‌های نشانی مجازی به فیزیکی را نگهداری می‌کند. TLB یک منبع سیستمی کمیاب و محدود است. عدم موفقیت در یافتن نشانی در TLB (اصطلاحاً TLB miss) می‌تواند پرهزینه باشد؛ زیرا پردازنده در این حالت باید از جدول سلسله‌مراتبی صفحات بخواند که ممکن است نیازمند دسترسی‌های متعددی به حافظه باشد. با استفاده از اندازه بزرگ‌تر برای صفحات حافظه، یک مدخل واحد در TLB می‌تواند محدوده بزرگ‌تری از حافظه را پوشش دهد. در نتیجه، فشار کمتری بر TLB وارد خواهد شد و برنامه‌های با مصرف فشرده حافظه ممکن است عملکرد بهتری داشته باشند.

با این حال، حافظه صفحات بزرگ می‌تواند اثر منفی نیز بر عملکرد سیستم بگذارد. به عنوان مثال، هنگامی که مقدار زیادی از حافظه توسط یک برنامه قفل (pin) می‌شود، ممکن است کمبود حافظه معمولی ایجاد شده و باعث صفحه‌بندی بیش از حد (paging) در سایر برنامه‌ها شده و کل سیستم را کند نماید. همچنین، سیستمی که برای مدتی طولانی فعال بوده است ممکن است دچار تکه‌تکه‌شدگی شدید حافظه شود که رزرو حافظه کافی برای صفحات بزرگ را غیرممکن می‌سازد. هنگامی که این اتفاق رخ می‌دهد، سیستم‌عامل یا JVM به استفاده از صفحات معمولی بازمی‌گردند.

سولاریس و لینوکس از صفحات بزرگ پشتیبانی می‌کنند.

Solaris

سولاریس ۹ و نسخه‌های پس از آن شامل پشتیبانی از اندازه صفحات چندگانه (MPSS) هستند؛ هیچ پیکربندی اضافی لازم نیست. به پیوند http://www.oracle.com/technetwork/server-storage/solaris10/overview/solaris9-features-scalability-135663.html مراجعه کنید.

Linux

کرنل ۲.۶ از صفحات بزرگ پشتیبانی می‌کند. برخی از توزیع‌کنندگان این کد را به انتشار‌های مبتنی بر ۲.۴ خود نیز بک‌پورت کرده‌اند. برای بررسی اینکه آیا سیستم شما می‌تواند از حافظه صفحات بزرگ پشتیبانی کند یا خیر، دستور زیر را امتحان کنید:

# cat /proc/meminfo | grep Huge
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2048 kB

اگر خروجی سه متغیر «Huge» را نشان دهد، سیستم شما می‌تواند از حافظه صفحات بزرگ پشتیبانی کند، اما نیاز به پیکربندی دارد. اگر این دستور چیزی چاپ نکرد، سیستم شما از صفحات بزرگ پشتیبانی نمی‌کند. برای پیکربندی سیستم جهت استفاده از حافظه صفحات بزرگ، به عنوان کاربر root وارد شوید و سپس مراحل زیر را دنبال کنید:

1.اگر از گزینه -XX:+UseSHM (به جای -XX:+UseHugeTLBFS) استفاده می‌کنید، مقدار SHMMAX را افزایش دهید. این مقدار باید از اندازه هیپ جاوا بزرگ‌تر باشد. روی سیستمی با ۴ گیگابایت رم فیزیکی (یا کمتر)، دستور زیر تمام حافظه را قابل اشتراک‌گذاری می‌کند:
# echo 4294967295 > /proc/sys/kernel/shmmax
2.اگر از گزینه -XX:+UseSHM یا -XX:+UseHugeTLBFS استفاده می‌کنید، تعداد صفحات بزرگ را مشخص کنید. در مثال زیر، ۳ گیگابایت از یک سیستم ۴ گیگابایتی برای صفحات بزرگ رزرو شده است (با فرض اینکه اندازه یک صفحه بزرگ 2048kB باشد، در این صورت 3 GB = 3 * 1024 MB = 3072 MB = 3072 * 1024 kB = 3145728 kB و 3145728 kB / 2048 kB = 1536 خواهد بود):
# echo 1536 > /proc/sys/vm/nr_hugepages

نکته
4 • توجه داشته باشید که مقادیر موجود در /proc پس از راه‌اندازی مجدد سیستم بازنشانی می‌شوند، بنابراین ممکن است بخواهید آن‌ها را در یک اسکریپت مقداردهی اولیه (برای مثال rc.local یا sysctl.conf) تنظیم کنید. 4 • اگر پارامترهای کرنل سیستم‌عامل /proc/sys/kernel/shmmax یا /proc/sys/vm/nr_hugepages را پیکربندی کنید (یا اندازه آن‌ها را تغییر دهید)، فرآیندهای جاوا ممکن است علاوه بر هیپ جاوا، صفحات بزرگ را به بخش‌های دیگر نیز اختصاص دهند. این مراحل می‌توانند صفحات بزرگ را به بخش‌های زیر اختصاص دهند: 4 • هیپ جاوا (Java heap) 4 • حافظه پنهان کد (Code cache) 4 • ساختار داده نگاشت بیتی علامت‌گذاری (marking bitmap) برای GC موازی در نتیجه، اگر پارامتر nr_hugepages را برابر با اندازه هیپ جاوا تنظیم کنید، JVM ممکن است در تخصیص نواحی حافظه پنهان کد روی صفحات بزرگ با شکست مواجه شود، زیرا اندازه این نواحی بسیار بزرگ است.

مقادیر خروج زیر معمولاً هنگامی توسط راه‌انداز (launcher) بازگردانده می‌شوند که با آرگومان‌های نادرست فراخوانی شود، خطاهای جدی رخ دهند یا استثناهایی توسط JVM ایجاد شوند. با این حال، یک برنامه جاوا ممکن است با استفاده از فراخوانی API System.exit(exitValue) هر مقداری را بازگرداند. این مقادیر عبارتند از:

•0: اتمام موفقیت‌آمیز
•>0: یک خطا رخ داده است

•javac(1)
•jdb(1)
•javah(1)
•jar(1)
•jstat(1)
03 March 2015 JDK 8