'\" t .\" Copyright (c) 1994, 2018, Oracle and/or its affiliates. All rights reserved. .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. .\" .\" This code is free software; you can redistribute it and/or modify it .\" under the terms of the GNU General Public License version 2 only, as .\" published by the Free Software Foundation. .\" .\" This code is distributed in the hope that it will be useful, but WITHOUT .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or .\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License .\" version 2 for more details (a copy is included in the LICENSE file that .\" accompanied this code). .\" .\" You should have received a copy of the GNU General Public License version .\" 2 along with this work; if not, write to the Free Software Foundation, .\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. .\" .\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA .\" or visit www.oracle.com if you need additional information or have any .\" questions. .\" .\" Title: java .\" Language: English .\" Date: 03 March 2015 .\" SectDesc: Basic Tools .\" Software: JDK 8 .\" Arch: generic .\" Part Number: E38207-04 .\" Doc ID: JSSON .\" .if n .pl 99999 .TH "java" "1" "03 March 2015" "JDK 8" "ابزارهای پایه" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" java \- اجرای یک برنامهٔ جاوا .SH "خلاصه دستور (SYNOPSIS)" .sp .if n \{\ .RS 4 .\} .nf \fBjava\fR [\fIoptions\fR] \fIclassname\fR [\fIargs\fR] .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \fBjava\fR [\fIoptions\fR] \fB\-jar\fR \fIfilename\fR [\fIargs\fR] .fi .if n \{\ .RE .\} .PP \fIoptions\fR .RS 4 گزینه‌های خط فرمان که با فاصله از یکدیگر جدا می‌شوند\&. بخش گزینه‌ها را ببینید\&. .RE .PP \fIclassname\fR .RS 4 نام کلاسی که باید اجرا شود\&. .RE .PP \fIfilename\fR .RS 4 نام فایل بایگانی جاوا (JAR) که باید فراخوانی شود\&. تنها همراه با گزینهٔ \fB\-jar\fR به کار می‌رود\&. .RE .PP \fIargs\fR .RS 4 آرگومان‌هایی که با فاصله از یکدیگر جدا شده و به متد \fBmain()\fR ارسال می‌شوند\&. .RE.SH "توضیحات (DESCRIPTION)" .PP دستور \fBjava\fR یک برنامهٔ جاوا را آغاز می‌کند\&. این کار با راه‌اندازی محیط زمان اجرای جاوا (JRE)، بارگذاری کلاس مشخص‌شده و فراخوانی متد \fBmain()\fR آن کلاس انجام می‌شود\&. این متد باید به‌صورت \fIpublic\fR و \fIstatic\fR تعریف شده باشد، نباید هیچ مقداری را برگرداند، و باید یک آرایه از نوع \fBString\fR را به عنوان پارامتر بپذیرد\&. تعریف متد به شکل زیر است: .sp .if n \{\ .RS 4 .\} .nf \fBpublic static void main(String[] args)\fR .fi .if n \{\ .RE .\} .PP دستور \fBjava\fR می‌تواند برای راه‌اندازی یک برنامهٔ JavaFX با بارگذاری کلاسی که دارای متد \fBmain()\fR بوده یا کلاس \fBjavafx\&.application\&.Application\fR را گسترش داده است، استفاده شود\&. در حالت دوم، راه‌انداز یک نمونه از کلاس \fBApplication\fR می‌سازد، متد \fBinit()\fR آن را فراخوانی می‌کند، و سپس متد \fBstart(javafx\&.stage\&.Stage)\fR را فرا می‌خواند\&. .PP به‌طور پیش‌فرض، نخستین آرگومانی که گزینهٔ دستور \fBjava\fR نباشد، نام کاملاً واجد شرایط (fully qualified name) کلاسی است که باید فراخوانی شود\&. در صورت مشخص شدن گزینهٔ \fB\-jar\fR، آرگومان آن نام فایل JAR حاوی کلاس‌ها و فایل‌های منبع (resource) برای برنامه خواهد بود\&. کلاس آغازین باید توسط سرآیند مانیفست \fBMain\-Class\fR در کد منبع آن مشخص شده باشد\&. .PP محیط JRE کلاس آغازین (و سایر کلاس‌های مورد استفادهٔ برنامه) را در سه مجموعه مکان جستجو می‌کند: مسیر کلاس راه‌انداز (bootstrap class path)، افزونه‌های نصب‌شده، و مسیر کلاس (class path) کاربر\&. .PP آرگومان‌های پس از نام فایل کلاس یا نام فایل JAR به متد \fBmain()\fR ارسال می‌شوند\&. .SH "گزینه‌ها (OPTIONS)" .PP دستور \fBjava\fR از طیف گسترده‌ای از گزینه‌ها پشتیبانی می‌کند که می‌توان آن‌ها را به دسته‌های زیر تقسیم کرد: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} گزینه‌های استاندارد .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} گزینه‌های غیراستاندارد .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} گزینه‌های پیشرفتهٔ زمان اجرا .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} گزینه‌های پیشرفتهٔ کامپایلر JIT .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} گزینه‌های پیشرفتهٔ سرویس‌پذیری (Serviceability) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} گزینه‌های پیشرفتهٔ بازیافت حافظه (Garbage Collection) .RE .PP پشتیبانی از گزینه‌های استاندارد توسط تمام پیاده‌سازی‌های ماشین مجازی جاوا (JVM) تضمین شده است\&. آن‌ها برای اقدامات رایج مانند بررسی نسخهٔ JRE، تنظیم مسیر کلاس، فعال‌سازی خروجی پرگو (verbose)، و غیره استفاده می‌شوند\&. .PP گزینه‌های غیراستاندارد گزینه‌هایی عمومی هستند که به Java HotSpot Virtual Machine اختصاص دارند؛ بنابراین پشتیبانی از آن‌ها توسط تمام پیاده‌سازی‌های JVM تضمین نمی‌شود و ممکن است دستخوش تغییر شوند\&. این گزینه‌ها با \fB\-X\fR آغاز می‌شوند\&. .PP استفادهٔ روزمره و عادی از گزینه‌های پیشرفته توصیه نمی‌شود\&. این‌ها گزینه‌های توسعه‌دهنده هستند که برای تنظیم بخش‌های خاصی از عملکرد Java HotSpot Virtual Machine به کار می‌روند که معمولاً نیازمندی‌های سیستمی ویژه‌ای دارند و ممکن است به دسترسی مجاز (ممتاز) به پارامترهای پیکربندی سیستم نیاز داشته باشند\&. پشتیبانی از آن‌ها نیز توسط تمام پیاده‌سازی‌های JVM تضمین نمی‌شود و ممکن است تغییر کنند\&. گزینه‌های پیشرفته با \fB\-XX\fR آغاز می‌شوند\&. .PP برای اطلاع از گزینه‌هایی که در آخرین نسخه منسوخ یا حذف شده‌اند، بخشی به نام Deprecated and Removed Options در انتهای این سند قرار دارد\&. .PP گزینه‌های بولی (Boolean) برای فعال‌سازی قابلیتی که به‌طور پیش‌فرض غیرفعال است یا غیرفعال‌سازی قابلیتی که به‌طور پیش‌فرض فعال است به کار می‌روند\&. چنین گزینه‌هایی به پارامتر نیاز ندارند\&. گزینه‌های بولی \fB\-XX\fR با استفاده از علامت مثبت (\fB\-XX:+\fR\fIOptionName\fR) فعال و با علامت منفی (\fB\-XX:\-\fR\fIOptionName\fR) غیرفعال می‌شوند\&. .PP برای گزینه‌هایی که به یک آرگومان نیاز دارند، آرگومان ممکن است با یک فاصله، دو‌نقطه (:) یا علامت مساوی (=) از نام گزینه جدا شود، یا ممکن است مستقیماً پس از گزینه قرار گیرد (ساختار دقیق برای هر گزینه متفاوت است)\&. در صورتی که لازم باشد اندازه را به بایت مشخص کنید، می‌توانید پسوندی نگذارید یا از پسوند \fBk\fR یا \fBK\fR برای کیلوبایت (KB)، \fBm\fR یا \fBM\fR برای مگابایت (MB)، و \fBg\fR یا \fBG\fR برای گیگابایت (GB) استفاده کنید\&. برای نمونه، جهت تنظیم اندازه روی 8 گیگابایت، می‌توانید هر یک از مقادیر \fB8g\fR، \fB8192m\fR، \fB8388608k\fR یا \fB8589934592\fR را به عنوان آرگومان مشخص نمایید\&. اگر لازم باشد درصد مشخص شود، از عددی بین 0 تا 1 استفاده کنید (برای نمونه، \fB0\&.25\fR را برای 25% مشخص کنید)\&..SS "گزینه‌های استاندارد (Standard Options)" .PP این‌ها پرکاربردترین گزینه‌هایی هستند که توسط تمام پیاده‌سازی‌های JVM پشتیبانی می‌شوند\&. .PP \-agentlib:\fIlibname\fR[=\fIoptions\fR] .RS 4 کتابخانه عامل بومی (native agent library) مشخص‌شده را بارگذاری می‌کند\&. پس از نام کتابخانه، می‌توان از فهرستی از گزینه‌های تفکیک‌شده با کاما که مختص آن کتابخانه هستند استفاده کرد\&. .sp اگر گزینه \fB\-agentlib:foo\fR مشخص شود، JVM تلاش می‌کند تا کتابخانه‌ای به نام \fBlibfoo\&.so\fR را در مکانی که توسط متغیر سیستمی \fBLD_LIBRARY_PATH\fR مشخص شده است (در OS X این متغیر \fBDYLD_LIBRARY_PATH\fR است) بارگذاری کند\&. .sp مثال زیر نحوه بارگذاری کتابخانه ابزار پروفایلینگ هیپ (HPROF) و دریافت اطلاعات نمونه‌برداری CPU در هر ۲۰ میلی‌ثانیه، با عمق پشته ۳ را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-agentlib:hprof=cpu=samples,interval=20,depth=3\fR .fi .if n \{\ .RE .\} مثال زیر نحوه بارگذاری کتابخانه Java Debug Wire Protocol (JDWP) و شنود اتصال سوکت روی درگاه ۸۰۰۰، و تعلیق JVM پیش از بارگذاری کلاس اصلی را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-agentlib:jdwp=transport=dt_socket,server=y,address=8000\fR .fi .if n \{\ .RE .\} برای کسب اطلاعات بیشتر درباره کتابخانه‌های عامل بومی، به موارد زیر مراجعه کنید: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} توضیحات بسته \fBjava\&.lang\&.instrument\fR در http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.html .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} بخش Agent Command Line Options در راهنمای JVM Tools Interface در http://docs\&.oracle\&.com/javase/8/docs/platform/jvmti/jvmti\&.html#starting .RE .RE .PP \-agentpath:\fIpathname\fR[=\fIoptions\fR] .RS 4 کتابخانه عامل بومی مشخص‌شده با نام مسیر مطلق را بارگذاری می‌کند\&. این گزینه معادل \fB\-agentlib\fR است اما از مسیر کامل و نام فایل کتابخانه استفاده می‌کند\&. .RE .PP \-client .RS 4 ماشین مجازی Java HotSpot Client VM را انتخاب می‌کند\&. نسخه ۶۴بیتی Java SE Development Kit (JDK) در حال حاضر این گزینه را نادیده گرفته و در عوض از Server JVM استفاده می‌کند\&. .sp برای انتخاب پیش‌فرض JVM، به Server\-Class Machine Detection در http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.html مراجعه کنید\&. .RE .PP \-D\fIproperty\fR=\fIvalue\fR .RS 4 مقدار یک ویژگی سیستمی را تنظیم می‌کند\&. متغیر \fIproperty\fR یک رشته بدون فاصله است که نام ویژگی را نشان می‌دهد\&. متغیر \fIvalue\fR رشته‌ای است که مقدار ویژگی را مشخص می‌کند\&. اگر \fIvalue\fR رشته‌ای شامل فاصله باشد، آن را درون علامت‌های نقل‌قول قرار دهید (برای مثال \fB\-Dfoo="foo bar"\fR)\&. .RE .PP \-d32 .RS 4 برنامه را در یک محیط ۳۲بیتی اجرا می‌کند\&. اگر یک محیط ۳۲بیتی نصب نشده باشد یا پشتیبانی نشود، خطایی گزارش خواهد شد\&. به‌طور پیش‌فرض، برنامه در یک محیط ۳۲بیتی اجرا می‌شود مگر اینکه از یک سیستم ۶۴بیتی استفاده شود\&. .RE .PP \-d64 .RS 4 برنامه را در یک محیط ۶۴بیتی اجرا می‌کند\&. اگر یک محیط ۶۴بیتی نصب نشده باشد یا پشتیبانی نشود، خطایی گزارش خواهد شد\&. به‌طور پیش‌فرض، برنامه در یک محیط ۳۲بیتی اجرا می‌شود مگر اینکه از یک سیستم ۶۴بیتی استفاده شود\&. .sp در حال حاضر تنها Java HotSpot Server VM از عملیات ۶۴بیتی پشتیبانی می‌کند، و گزینه \fB\-server\fR با استفاده از \fB\-d64\fR به‌طور ضمنی اعمال می‌شود\&. گزینه \fB\-client\fR با استفاده از \fB\-d64\fR نادیده گرفته می‌شود\&. این موضوع ممکن است در نسخه‌های بعدی تغییر کند\&. .RE .PP \-disableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR] .br \-da[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR] .RS 4 ارزیابی ادعاها (assertions) را غیرفعال می‌کند\&. به‌طور پیش‌فرض، ارزیابی ادعاها در تمام بسته‌ها و کلاس‌ها غیرفعال است\&. .sp بدون آرگومان، \fB\-disableassertions\fR (\fB\-da\fR) ادعاها را در تمام بسته‌ها و کلاس‌ها غیرفعال می‌کند\&. با آرگومان \fIpackagename\fR که به \fB\&.\&.\&.\fR ختم می‌شود، این سوییچ ادعاها را در بسته مشخص‌شده و تمام زیربسته‌های آن غیرفعال می‌کند\&. اگر آرگومان صرفاً \fB\&.\&.\&.\fR باشد، این سوییچ ادعاها را در بسته بدون نام در دایرکتوری کاری فعلی غیرفعال می‌کند\&. با آرگومان \fIclassname\fR، این سوییچ ادعاها را در کلاس مشخص‌شده غیرفعال می‌کند\&. .sp گزینه \fB\-disableassertions\fR (\fB\-da\fR) بر روی تمام بارگذارنده‌های کلاس (class loaders) و کلاس‌های سیستمی (که فاقد بارگذارنده کلاس هستند) اعمال می‌شود\&. یک استثنا برای این قاعده وجود دارد: اگر این گزینه بدون هیچ آرگومانی ارائه شود، بر روی کلاس‌های سیستمی اعمال نخواهد شد\&. این امر غیرفعال کردن ادعاها را در تمام کلاس‌ها به‌جز کلاس‌های سیستمی آسان می‌کند\&. گزینه \fB\-disablesystemassertions\fR به شما امکان می‌دهد ادعاها را در تمام کلاس‌های سیستمی غیرفعال کنید\&. .sp برای فعال‌سازی صریح ادعاها در بسته‌ها یا کلاس‌های مشخص، از گزینه \fB\-enableassertions\fR (\fB\-ea\fR) استفاده کنید\&. هر دو گزینه را می‌توان به‌طور همزمان استفاده کرد\&. برای مثال، جهت اجرای برنامه \fBMyClass\fR با ادعاهای فعال در بسته \fBcom\&.wombat\&.fruitbat\fR (و تمام زیربسته‌های آن) اما غیرفعال در کلاس \fBcom\&.wombat\&.fruitbat\&.Brickbat\fR، از دستور زیر استفاده کنید: .sp .if n \{\ .RS 4 .\} .nf \fBjava \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fR .fi .if n \{\ .RE .\} .RE .PP \-disablesystemassertions .br \-dsa .RS 4 ادعاها را در تمام کلاس‌های سیستمی غیرفعال می‌کند\&. .RE .PP \-enableassertions[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR] .br \-ea[:[\fIpackagename\fR]\&.\&.\&.|:\fIclassname\fR] .RS 4 ادعاها (assertions) را فعال می‌کند\&. به‌طور پیش‌فرض، ادعاها در تمام بسته‌ها و کلاس‌ها غیرفعال هستند\&. .sp بدون آرگومان، \fB\-enableassertions\fR (\fB\-ea\fR) ادعاها را در تمام بسته‌ها و کلاس‌ها فعال می‌کند\&. با آرگومان \fIpackagename\fR که به \fB\&.\&.\&.\fR ختم می‌شود، این سوییچ ادعاها را در بسته مشخص‌شده و تمام زیربسته‌های آن فعال می‌کند\&. اگر آرگومان صرفاً \fB\&.\&.\&.\fR باشد، این سوییچ ادعاها را در بسته بدون نام در دایرکتوری کاری فعلی فعال می‌کند\&. با آرگومان \fIclassname\fR، این سوییچ ادعاها را در کلاس مشخص‌شده فعال می‌کند\&. .sp گزینه \fB\-enableassertions\fR (\fB\-ea\fR) بر روی تمام بارگذارنده‌های کلاس و کلاس‌های سیستمی (که فاقد بارگذارنده کلاس هستند) اعمال می‌شود\&. یک استثنا برای این قاعده وجود دارد: اگر این گزینه بدون هیچ آرگومانی ارائه شود، بر روی کلاس‌های سیستمی اعمال نخواهد شد\&. این امر فعال‌سازی ادعاها را در تمام کلاس‌ها به‌جز کلاس‌های سیستمی آسان می‌کند\&. گزینه \fB\-enablesystemassertions\fR یک سوییچ جداگانه برای فعال‌سازی ادعاها در تمام کلاس‌های سیستمی فراهم می‌کند\&..sp برای غیرفعال‌سازی صریح ادعاها (assertions) در بسته‌ها یا کلاس‌های مشخص، از گزینهٔ \fB\-disableassertions\fR (\fB\-da\fR) استفاده کنید\&. اگر یک دستور منفرد شامل چندین نمونه از این سوییچ‌ها باشد، پیش از بارگذاری هر کلاسی به ترتیب پردازش می‌شوند\&. به عنوان مثال، برای اجرای برنامهٔ \fBMyClass\fR در حالی که ادعاها تنها در بستهٔ \fBcom\&.wombat\&.fruitbat\fR (و تمامی زیربسته‌های آن) فعال بوده اما در کلاس \fBcom\&.wombat\&.fruitbat\&.Brickbat\fR غیرفعال باشند، از دستور زیر استفاده کنید: .sp .if n \{\ .RS 4 .\} .nf \fBjava \-ea:com\&.wombat\&.fruitbat\&.\&.\&. \-da:com\&.wombat\&.fruitbat\&.Brickbat MyClass\fR .fi .if n \{\ .RE .\} .RE .PP \-enablesystemassertions .br \-esa .RS 4 ادعاها (assertions) را در تمام کلاس‌های سیستم فعال می‌کند\&. .RE .PP \-help .br \-? .RS 4 اطلاعات نحوهٔ استفاده از دستور \fBjava\fR را بدون اجرای واقعی JVM نمایش می‌دهد\&. .RE .PP \-jar \fIfilename\fR .RS 4 برنامه‌ای کپسوله‌شده در یک فایل JAR را اجرا می‌کند\&. آرگومان \fIfilename\fR نام یک فایل JAR به همراه مانیفستی است که خطی به شکل \fBMain\-Class:\fR\fIclassname\fR دارد؛ خطی که کلاسی را با متد \fBpublic static void main(String[] args)\fR تعریف می‌کند که به عنوان نقطهٔ شروع برنامه شما عمل می‌کند\&. .sp هنگامی که از گزینهٔ \fB\-jar\fR استفاده می‌کنید، فایل JAR مشخص‌شده منبع تمامی کلاس‌های کاربر خواهد بود و سایر تنظیمات class path نادیده گرفته می‌شوند\&. .sp برای اطلاعات بیشتر در مورد فایل‌های JAR، منابع زیر را ببینید: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} jar(1) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} راهنمای The Java Archive (JAR) Files در http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jar/index\&.html .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} درس: Packaging Programs in JAR Files در http://docs\&.oracle\&.com/javase/tutorial/deployment/jar/index\&.html .RE .RE .PP \-javaagent:\fIjarpath\fR[=\fIoptions\fR] .RS 4 عامل (agent) مشخص‌شدهٔ زبان برنامه‌نویسی Java را بارگذاری می‌کند\&. برای اطلاعات بیشتر پیرامون ابزارسازی (instrumenting) برنامه‌های Java، به توضیحات بستهٔ \fBjava\&.lang\&.instrument\fR در مستندات Java API در http://docs\&.oracle\&.com/javase/8/docs/api/java/lang/instrument/package\-summary\&.html مراجعه کنید\&. .RE .PP \-jre\-restrict\-search .RS 4 محیط‌های JRE اختصاصی کاربر را در جستجوی نسخه لحاظ می‌کند\&. .RE .PP \-no\-jre\-restrict\-search .RS 4 محیط‌های JRE اختصاصی کاربر را از جستجوی نسخه مستثنی می‌کند\&. .RE .PP \-server .RS 4 ماشین مجازی Java HotSpot Server VM را انتخاب می‌کند\&. نسخهٔ ۶۴ بیتی JDK فقط از Server VM پشتیبانی می‌کند، بنابراین در آن حالت این گزینه ضمنی است\&. .sp برای انتخاب پیش‌فرض JVM، بخش Server\-Class Machine Detection را در http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/server\-class\&.html ببینید\&. .RE .PP \-showversion .RS 4 اطلاعات نسخه را نمایش داده و اجرای برنامه را ادامه می‌دهد\&. این گزینه معادل گزینهٔ \fB\-version\fR است، با این تفاوت که گزینهٔ دوم به JVM دستور می‌دهد پس از نمایش اطلاعات نسخه خارج شود\&. .RE .PP \-splash:\fIimgname\fR .RS 4 صفحهٔ اسپلش (splash screen) را با تصویر مشخص‌شده توسط \fIimgname\fR نمایش می‌دهد\&. به عنوان مثال، برای نمایش فایل \fBsplash\&.gif\fR از دایرکتوری \fBimages\fR هنگام شروع برنامه، از گزینهٔ زیر استفاده کنید: .sp .if n \{\ .RS 4 .\} .nf \fB\-splash:images/splash\&.gif\fR .fi .if n \{\ .RE .\} .RE .PP \-verbose:class .RS 4 اطلاعات مربوط به هر کلاس بارگذاری‌شده را نمایش می‌دهد\&. .RE .PP \-verbose:gc .RS 4 اطلاعات مربوط به هر رویداد جمع‌آوری زباله (GC) را نمایش می‌دهد\&. .RE .PP \-verbose:jni .RS 4 اطلاعات مربوط به استفاده از متدهای بومی (native) و سایر فعالیت‌های رابط بومی جاوا (JNI) را نمایش می‌دهد\&. .RE .PP \-version .RS 4 اطلاعات نسخه را نمایش داده و سپس خارج می‌شود\&. این گزینه معادل گزینهٔ \fB\-showversion\fR است، با این تفاوت که گزینهٔ دوم به JVM دستور خروج پس از نمایش اطلاعات نسخه را نمی‌دهد\&. .RE .PP \-version:\fIrelease\fR .RS 4 نسخهٔ انتشار را برای اجرای برنامه مشخص می‌کند\&. اگر نسخهٔ دستور \fBjava\fR فراخوانی‌شده با این مشخصه مطابقت نداشته باشد و پیاده‌سازی مناسبی روی سیستم پیدا شود، آنگاه پیاده‌سازی مناسب استفاده خواهد شد\&. .sp آرگومان \fIrelease\fR یا رشتهٔ نسخهٔ دقیق را مشخص می‌کند، یا فهرستی از رشته‌های نسخه و محدوده‌ها را که با فاصله از هم جدا شده‌اند\&. یک \fIرشتهٔ نسخه\fR تعیین شماره نسخه توسط توسعه‌دهنده به شکل زیر است: \fB1\&.\fR\fIx\fR\fB\&.0_\fR\fIu\fR (که در آن \fIx\fR شماره نسخهٔ اصلی و \fIu\fR شماره نسخهٔ به‌روزرسانی است)\&. یک \fIمحدودهٔ نسخه\fR از یک رشتهٔ نسخه تشکیل شده است که به دنبال آن یک علامت بعلاوه (\fB+\fR) برای تعیین این نسخه یا نسخه‌های جدیدتر می‌آید، یا بخشی از رشتهٔ نسخه که به دنبال آن یک ستاره (\fB*\fR) برای تعیین هر رشتهٔ نسخه با پیشوند منطبق می‌آید\&. رشته‌ها و محدوده‌های نسخه می‌توانند با استفاده از فاصله برای ترکیب منطقی \fIOR\fR، یا علامت آمپرسند (\fB&\fR) برای ترکیب منطقی \fIAND\fR از دو رشته/محدودهٔ نسخه ترکیب شوند\&. به عنوان مثال، اگر اجرای کلاس یا فایل JAR نیازمند JRE 6u13 (1\&.6\&.0_13) یا هر نسخهٔ JRE 6 که از 6u10 (1\&.6\&.0_10) شروع می‌شود باشد، عبارت زیر را مشخص کنید:.sp .if n \{\ .RS 4 .\} .nf \fB\-version:"1\&.6\&.0_13 1\&.6* & 1\&.6\&.0_10+"\fR .fi .if n \{\ .RE .\} علامت‌های نقل‌قول تنها در صورتی لازم هستند که در پارامتر \fIrelease\fR فاصله وجود داشته باشد\&. .sp برای فایل‌های JAR، اولویت بر این است که نیازمندی‌های نگارش به‌جای خط فرمان، در manifest فایل JAR مشخص شوند\&. .RE .SS "گزینه‌های غیراستاندارد (Non\-Standard Options)" .PP این گزینه‌ها، گزینه‌هایی با کاربرد عمومی هستند که مختص Java HotSpot Virtual Machine می‌باشند\&. .PP \-X .RS 4 راهنمای مربوط به تمام گزینه‌های \fB\-X\fR موجود را نمایش می‌دهد\&. .RE .PP \-Xbatch .RS 4 کامپایل در پس‌زمینه را غیرفعال می‌کند\&. به‌طور پیش‌فرض، JVM متد را به‌عنوان یک وظیفه پس‌زمینه کامپایل کرده و تا زمان پایان کامپایل پس‌زمینه، متد را در حالت مفسر اجرا می‌کند\&. پرچم \fB\-Xbatch\fR کامپایل پس‌زمینه را غیرفعال می‌کند تا کامپایل همه متدها به‌عنوان یک وظیفه پیش‌زمینه تا زمان تکمیل ادامه یابد\&. .sp این گزینه معادل \fB\-XX:\-BackgroundCompilation\fR است\&. .RE .PP \-Xbootclasspath:\fIpath\fR .RS 4 فهرستی از دایرکتوری‌ها، فایل‌های JAR و آرشیوهای ZIP جداشده با دونقطه (:) را برای جستجوی فایل‌های کلاس boot مشخص می‌کند\&. این موارد به‌جای فایل‌های کلاس boot موجود در JDK استفاده می‌شوند\&. .sp برنامه‌هایی را که از این گزینه برای بازنویسی یک کلاس در \fBrt\&.jar\fR استفاده می‌کنند مستقر نکنید، زیرا این کار مجوز کد باینری JRE را نقض می‌کند\&. .RE .PP \-Xbootclasspath/a:\fIpath\fR .RS 4 فهرستی از دایرکتوری‌ها، فایل‌های JAR و آرشیوهای ZIP جداشده با دونقطه (:) را برای افزودن به انتهای مسیر کلاس bootstrap پیش‌فرض مشخص می‌کند\&. .sp برنامه‌هایی را که از این گزینه برای بازنویسی یک کلاس در \fBrt\&.jar\fR استفاده می‌کنند مستقر نکنید، زیرا این کار مجوز کد باینری JRE را نقض می‌کند\&. .RE .PP \-Xbootclasspath/p:\fIpath\fR .RS 4 فهرستی از دایرکتوری‌ها، فایل‌های JAR و آرشیوهای ZIP جداشده با دونقطه (:) را برای افزودن به ابتدای مسیر کلاس bootstrap پیش‌فرض مشخص می‌کند\&. .sp برنامه‌هایی را که از این گزینه برای بازنویسی یک کلاس در \fBrt\&.jar\fR استفاده می‌کنند مستقر نکنید، زیرا این کار مجوز کد باینری JRE را نقض می‌کند\&. .RE .PP \-Xcheck:jni .RS 4 بررسی‌های تکمیلی را برای توابع Java Native Interface (JNI) انجام می‌دهد\&. به‌طور مشخص، پیش از پردازش درخواست JNI، پارامترهای ارسالی به تابع JNI و داده‌های محیط زمان اجرا را اعتبارسنجی می‌کند\&. هرگونه داده نامعتبر نشان‌دهنده مشکلی در کد بومی است و در چنین مواردی JVM با یک خطای غیرقابل‌جبران متوقف خواهد شد\&. هنگام استفاده از این گزینه، انتظار افت کارایی را داشته باشید\&. .RE .PP \-Xcomp .RS 4 کامپایل متدها را در اولین فراخوانی اجباری می‌کند\&. به‌طور پیش‌فرض، Client VM (\fB\-client\fR) تعداد ۱٬۰۰۰ فراخوانی تفسیری متد و Server VM (\fB\-server\fR) تعداد ۱۰٬۰۰۰ فراخوانی تفسیری متد را برای جمع‌آوری اطلاعات جهت کامپایل بهینه انجام می‌دهند\&. تعیین گزینه \fB\-Xcomp\fR فراخوانی‌های تفسیری متد را غیرفعال می‌کند تا سرعت کامپایل به بهای کاهش بهره‌وری افزایش یابد\&. .sp همچنین می‌توانید تعداد فراخوانی‌های تفسیری متد قبل از کامپایل را با استفاده از گزینه \fB\-XX:CompileThreshold\fR تغییر دهید\&. .RE .PP \-Xdebug .RS 4 هیچ کاری انجام نمی‌دهد\&. برای سازگاری با گذشته ارائه شده است\&. .RE .PP \-Xdiag .RS 4 پیام‌های عیب‌یابی تکمیلی را نشان می‌دهد\&. .RE .PP \-Xfuture .RS 4 بررسی‌های سخت‌گیرانه قالب class\-file را فعال می‌کند که انطباق دقیق با مشخصات قالب class\-file را اعمال می‌نمایند\&. به توسعه‌دهندگان توصیه می‌شود هنگام توسعه کدهای جدید از این پرچم استفاده کنند، چرا که بررسی‌های سخت‌گیرانه‌تر در نگارش‌های آینده به حالت پیش‌فرض تبدیل خواهند شد\&. .RE .PP \-Xint .RS 4 برنامه را فقط در حالت تفسیری اجرا می‌کند\&. کامپایل به کد بومی غیرفعال شده و تمام bytecode توسط مفسر اجرا می‌شود\&. مزایای عملکردی ارائه‌شده توسط کامپایلر just in time (JIT) در این حالت وجود نخواهند داشت\&. .RE .PP \-Xinternalversion .RS 4 اطلاعات دقیق‌تری از نگارش JVM نسبت به گزینه \fB\-version\fR نمایش می‌دهد و سپس خارج می‌شود\&. .RE .PP \-Xloggc:\fIfilename\fR .RS 4 فایلی را تعیین می‌کند که اطلاعات تفصیلی رویدادهای GC باید برای ثبت وقایع به آن هدایت شوند\&. اطلاعات نوشته‌شده در این فایل شبیه خروجی \fB\-verbose:gc\fR همراه با زمان سپری‌شده از اولین رویداد GC پیش از هر رویداد ثبت‌شده است\&. در صورتی که هر دو گزینه با یک دستور \fBjava\fR داده شوند، گزینه \fB\-Xloggc\fR بر \fB\-verbose:gc\fR مقدم خواهد بود\&. .sp مثال: .sp .if n \{\ .RS 4 .\} .nf \fB\-Xloggc:garbage\-collection\&.log\fR .fi .if n \{\ .RE .\} .RE .PP \-Xmaxjitcodesize=\fIsize\fR .RS 4 حداکثر اندازه حافظه موقت کد (code cache به بایت) را برای کدهای کامپایل‌شده توسط JIT مشخص می‌کند\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مشخص کردن مگابایت، و \fBg\fR یا \fBG\fR را برای مشخص کردن گیگابایت اضافه کنید\&. حداکثر اندازه پیش‌فرض حافظه موقت کد ۲۴۰ مگابایت است؛ اگر کامپایل لایه‌ای را با گزینه \fB\-XX:\-TieredCompilation\fR غیرفعال کنید، اندازه پیش‌فرض ۴۸ مگابایت خواهد بود: .sp .if n \{\ .RS 4 .\} .nf \fB\-Xmaxjitcodesize=240m\fR .fi .if n \{\ .RE .\} این گزینه معادل \fB\-XX:ReservedCodeCacheSize\fR است\&. .RE .PP \-Xmixed .RS 4 تمام bytecode را به‌جز متدهای پرتکرار (hot methods) که به کد بومی کامپایل می‌شوند، توسط مفسر اجرا می‌کند\&. .RE .PP \-Xmn\fIsize\fR .RS 4 اندازه اولیه و حداکثر اندازه heap (به بایت) را برای نسل جوان (nursery) تنظیم می‌کند\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مشخص کردن مگابایت، و \fBg\fR یا \fBG\fR را برای مشخص کردن گیگابایت اضافه کنید\&..sp ناحیه نسل جوان (young generation) در heap برای اشیاء جدید استفاده می‌شود\&. فرآیند GC در این ناحیه بیشتر از سایر نواحی انجام می‌گیرد\&. اگر اندازه نسل جوان بیش از حد کوچک باشد، جمع‌آوری‌های زباله فرعی (minor garbage collections) متعددی انجام خواهد شد\&. اگر اندازه بسیار بزرگ باشد، تنها جمع‌آوری‌های زباله کامل (full garbage collections) اجرا می‌شوند که تکمیل آن‌ها ممکن است زمان زیادی ببرد\&. شرکت Oracle توصیه می‌کند که اندازه نسل جوان را بین یک‌دوم تا یک‌چهارم اندازه کل heap نگه دارید\&. .sp مثال‌های زیر نحوه تنظیم اندازه اولیه و بیشینه نسل جوان را روی ۲۵۶ مگابایت با استفاده از واحدهای مختلف نشان می‌دهند: .sp .if n \{\ .RS 4 .\} .nf \fB\-Xmn256m\fR \fB\-Xmn262144k\fR \fB\-Xmn268435456\fR .fi .if n \{\ .RE .\} به جای استفاده از گزینه \fB\-Xmn\fR جهت تنظیم هم‌زمان اندازه اولیه و بیشینه heap برای نسل جوان، می‌توانید از \fB\-XX:NewSize\fR برای تنظیم اندازه اولیه و از \fB\-XX:MaxNewSize\fR برای تنظیم بیشینه اندازه استفاده کنید\&. .RE .PP \-Xms\fIsize\fR .RS 4 اندازه اولیه (به بایت) heap را تنظیم می‌کند\&. این مقدار باید مضربی از ۱۰۲۴ و بزرگ‌تر از ۱ مگابایت باشد\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مشخص کردن مگابایت، و \fBg\fR یا \fBG\fR را برای مشخص کردن گیگابایت اضافه کنید\&. .sp مثال‌های زیر نحوه تنظیم اندازه حافظه تخصیص‌یافته به ۶ مگابایت را با استفاده از واحدهای مختلف نشان می‌دهند: .sp .if n \{\ .RS 4 .\} .nf \fB\-Xms6291456\fR \fB\-Xms6144k\fR \fB\-Xms6m\fR .fi .if n \{\ .RE .\} اگر این گزینه را تنظیم نکنید، اندازه اولیه به عنوان مجموع اندازه‌های تخصیص‌یافته برای نسل قدیم (old generation) و نسل جوان (young generation) تنظیم خواهد شد\&. اندازه اولیه heap برای نسل جوان را می‌توان با استفاده از گزینه \fB\-Xmn\fR یا گزینه \fB\-XX:NewSize\fR تنظیم کرد\&. .RE .PP \-Xmx\fIsize\fR .RS 4 بیشینه اندازه (به بایت) استخر تخصیص حافظه را مشخص می‌کند\&. این مقدار باید مضربی از ۱۰۲۴ و بزرگ‌تر از ۲ مگابایت باشد\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مشخص کردن مگابایت، و \fBg\fR یا \fBG\fR را برای مشخص کردن گیگابایت اضافه کنید\&. مقدار پیش‌فرض در زمان اجرا بر اساس پیکربندی سیستم انتخاب می‌شود\&. برای استقرارهای سرور، \fB\-Xms\fR و \fB\-Xmx\fR اغلب روی مقداری یکسان تنظیم می‌شوند\&. بخش «Ergonomics» را در \fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR در نشانی http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html ببینید\&. .sp مثال‌های زیر نحوه تنظیم بیشینه اندازه مجاز حافظه تخصیص‌یافته به ۸۰ مگابایت را با استفاده از واحدهای مختلف نشان می‌دهند: .sp .if n \{\ .RS 4 .\} .nf \fB\-Xmx83886080\fR \fB\-Xmx81920k\fR \fB\-Xmx80m\fR .fi .if n \{\ .RE .\} گزینه \fB\-Xmx\fR معادل \fB\-XX:MaxHeapSize\fR است\&. .RE .PP \-Xnoclassgc .RS 4 جمع‌آوری زباله (GC) کلاس‌ها را غیرفعال می‌کند\&. این کار می‌تواند مقداری از زمان GC را صرفه‌جویی کرده و وقفه‌ها را در حین اجرای برنامه کاهش دهد\&. .sp هنگامی که \fB\-Xnoclassgc\fR را در زمان راه‌اندازی تعیین می‌کنید، شیءهای کلاس در برنامه در طول GC دست‌نخورده باقی می‌مانند و همواره فعال در نظر گرفته می‌شوند\&. این امر می‌تواند منجر به اشغال دائم حافظه بیشتری شود که در صورت عدم دقت، استثنای کمبود حافظه (out of memory exception) ایجاد خواهد کرد\&. .RE .PP \-Xrs .RS 4 استفاده از سیگنال‌های سیستم‌عامل توسط JVM را کاهش می‌دهد\&. .sp قلاب‌های خاموشی (Shutdown hooks) با اجرای کد پاک‌سازی کاربر (مانند بستن اتصالات پایگاه داده) در هنگام خاموش شدن، حتی در صورتی که JVM به طور ناگهانی پایان یابد، خاموش شدن منظم یک برنامه جاوا را ممکن می‌سازند\&. .sp ماشین مجازی JVM سیگنال‌ها را دریافت می‌کند تا قلاب‌های خاموشی را برای پایان‌های غیرمنتظره پیاده‌سازی کند\&. ماشین مجازی JVM از \fBSIGHUP\fR، \fBSIGINT\fR و \fBSIGTERM\fR برای آغاز اجرای قلاب‌های خاموشی استفاده می‌کند\&. .sp ماشین مجازی JVM از سازوکار مشابهی برای پیاده‌سازی قابلیت روکشی پشته‌های ریسه (thread dumps) به منظور اشکال‌زدایی استفاده می‌کند\&. ماشین مجازی JVM از \fBSIGQUIT\fR برای انجام thread dumpها بهره می‌برد\&. .sp برنامه‌هایی که JVM را در خود تعبیه می‌کنند، مکرراً نیاز دارند سیگنال‌هایی مانند \fBSIGINT\fR یا \fBSIGTERM\fR را به دام بیندازند که این می‌تواند منجر به تداخل با گرداننده‌های سیگنال JVM شود\&. گزینه \fB\-Xrs\fR برای رفع این مشکل در دسترس است\&. هنگامی که \fB\-Xrs\fR استفاده می‌شود، ماسک‌های سیگنال برای \fBSIGINT\fR، \fBSIGTERM\fR، \fBSIGHUP\fR و \fBSIGQUIT\fR توسط JVM تغییر داده نمی‌شوند و گرداننده‌های سیگنال برای این سیگنال‌ها نصب نمی‌گردند\&. .sp مشخص کردن \fB\-Xrs\fR دو پیامد دارد: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} گرفتن thread dump از طریق \fBSIGQUIT\fR در دسترس نیست\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} کد کاربر مسئول فراخوانی قلاب‌های خاموشی است، برای نمونه با فراخوانی \fBSystem\&.exit()\fR در زمانی که JVM باید خاتمه یابد\&. .RE .RE .PP \-Xshare:\fImode\fR .RS 4 حالت اشتراک‌گذاری داده‌های کلاس (CDS) را تعیین می‌کند\&. آرگومان‌های ممکن برای \fImode\fR در این گزینه عبارتند از: .PP auto .RS 4 در صورت امکان از CDS استفاده شود\&. این مقدار پیش‌فرض برای Java HotSpot 32\-Bit Client VM است\&. .RE.PP on .RS 4 استفاده از CDS را الزامی می‌کند\&. در صورتی که امکان استفاده از اشتراک‌گذاری داده‌های کلاس (class data sharing) وجود نداشته باشد، پیام خطایی چاپ کرده و خارج می‌شود\&. .RE .PP off .RS 4 از CDS استفاده نمی‌کند\&. این مقدار پیش‌فرض برای Java HotSpot 32\-Bit Server VM،‏ Java HotSpot 64\-Bit Client VM و Java HotSpot 64\-Bit Server VM است\&. .RE .PP dump .RS 4 بایگانی CDS را به‌طور دستی تولید می‌کند\&. مسیر کلاس برنامه را همان‌طور که در "Setting the Class Path" شرح داده شده است مشخص کنید\&. .sp باید با هر انتشار جدید JDK، بایگانی CDS را مجدداً ایجاد کنید\&. .RE .RE .PP \-XshowSettings:\fIcategory\fR .RS 4 تنظیمات را نشان داده و ادامه می‌دهد\&. آرگومان‌های ممکن \fIcategory\fR برای این گزینه شامل موارد زیر است: .PP all .RS 4 تمام دسته‌بندی‌های تنظیمات را نشان می‌دهد\&. این مقدار پیش‌فرض است\&. .RE .PP locale .RS 4 تنظیمات مربوط به تنظیمات محلی (locale) را نشان می‌دهد\&. .RE .PP properties .RS 4 تنظیمات مربوط به مشخصه‌های سیستم (system properties) را نشان می‌دهد\&. .RE .PP vm .RS 4 تنظیمات JVM را نشان می‌دهد\&. .RE .RE .PP \-Xss\fIsize\fR .RS 4 اندازه پشته ریسه (thread stack size) را (به بایت) تنظیم می‌کند\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مگابایت، \fBg\fR یا \fBG\fR را برای گیگابایت اضافه کنید\&. مقدار پیش‌فرض به بستر بستگی دارد: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Linux/ARM (32\-bit): 320 KB .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Linux/i386 (32\-bit): 320 KB .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Linux/x64 (64\-bit): 1024 KB .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} OS X (64\-bit): 1024 KB .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Oracle Solaris/i386 (32\-bit): 320 KB .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Oracle Solaris/x64 (64\-bit): 1024 KB .RE .sp مثال‌های زیر اندازه پشته ریسه را در واحدهای مختلف روی 1024 KB تنظیم می‌کنند: .sp .if n \{\ .RS 4 .\} .nf \fB\-Xss1m\fR \fB\-Xss1024k\fR \fB\-Xss1048576\fR .fi .if n \{\ .RE .\} این گزینه معادل \fB\-XX:ThreadStackSize\fR است\&. .RE .PP \-Xusealtsigs .RS 4 به جای \fBSIGUSR1\fR و \fBSIGUSR2\fR از سیگنال‌های جایگزین برای سیگنال‌های داخلی JVM استفاده می‌کند\&. این گزینه معادل \fB\-XX:+UseAltSigs\fR است\&. .RE .PP \-Xverify:\fImode\fR .RS 4 حالت وارسی‌کننده بایت‌کد (bytecode verifier) را تنظیم می‌کند\&. وارسی بایت‌کد به عیب‌یابی برخی از مشکلات کمک می‌کند، اما سرباری نیز به برنامه در حال اجرا اضافه می‌کند\&. آرگومان‌های ممکن \fImode\fR برای این گزینه شامل موارد زیر است: .PP none .RS 4 بایت‌کد را وارسی نمی‌کند\&. این کار زمان راه‌اندازی و همچنین حفاظت ارائه‌شده توسط Java را کاهش می‌دهد\&. .RE .PP remote .RS 4 کلاس‌هایی را که توسط بارگذار کلاس راه‌انداز (bootstrap class loader) بارگذاری نشده‌اند وارسی می‌کند\&. اگر گزینه \fB\-Xverify\fR را مشخص نکنید، این رفتار پیش‌فرض است\&. .RE .PP all .RS 4 تمام کلاس‌ها را وارسی می‌کند\&. .RE .RE.SS "گزینه‌های پیشرفته زمان اجرا (Advanced Runtime Options)" .PP این گزینه‌ها رفتار زمان اجرای Java HotSpot VM را کنترل می‌کنند\&. .PP \-XX:+DisableAttachMechanism .RS 4 گزینه‌ای را فعال می‌کند که سازوکار اتصال ابزارها به JVM را غیرفعال می‌سازد\&. به‌طور پیش‌فرض، این گزینه غیرفعال است؛ به این معنی که سازوکار اتصال فعال بوده و می‌توانید از ابزارهایی مانند \fBjcmd\fR، \fBjstack\fR، \fBjmap\fR و \fBjinfo\fR استفاده کنید\&. .RE .PP \-XX:ErrorFile=\fIfilename\fR .RS 4 مسیر و نام فایلی را مشخص می‌کند که داده‌های خطا در زمان وقوع یک خطای غیرقابل‌جبران در آن نوشته می‌شوند\&. به‌طور پیش‌فرض، این فایل در دایرکتوری کاری جاری و با نام \fBhs_err_pid\fR\fIpid\fR\fB\&.log\fR ایجاد می‌شود که در آن \fIpid\fR شناسه فرایندی است که موجب بروز خطا شده است\&. مثال زیر نحوه تنظیم فایل لاگ پیش‌فرض را نشان می‌دهد (توجه داشته باشید که شناسه فرایند به‌صورت \fB%p\fR مشخص می‌شود): .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:ErrorFile=\&./hs_err_pid%p\&.log\fR .fi .if n \{\ .RE .\} مثال زیر نحوه تنظیم لاگ خطا را روی \fB/var/log/java/java_error\&.log\fR نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:ErrorFile=/var/log/java/java_error\&.log\fR .fi .if n \{\ .RE .\} اگر فایل نتواند در دایرکتوری مشخص‌شده ایجاد شود (به‌دلیل کمبود فضا، مشکل دسترسی‌ها، یا مساله‌ای دیگر)، در دایرکتوری موقت سیستم‌عامل ایجاد می‌شود\&. دایرکتوری موقت \fB/tmp\fR است\&. .RE .PP \-XX:+FailOverToOldVerifier .RS 4 انتقال خودکار (failover) به وارسی‌کننده قدیمی را در زمان شکست بررسی‌کننده نوع جدید فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و برای کلاس‌هایی با نسخه بایت‌کد جدید نادیده گرفته می‌شود (یعنی غیرفعال در نظر گرفته می‌شود)\&. می‌توانید آن را برای کلاس‌هایی با نسخه‌های قدیمی‌تر بایت‌کد فعال کنید\&. .RE .PP \-XX:LargePageSizeInBytes=\fIsize\fR .RS 4 در Solaris، حداکثر اندازه (بر حسب بایت) را برای صفحات بزرگ مورد استفاده در هیپ جاوا تنظیم می‌کند\&. آرگومان \fIsize\fR باید توانی از ۲ باشد (۲، ۴، ۸، ۱۶، \&.\&.\&.)\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مشخص کردن مگابایت، و \fBg\fR یا \fBG\fR را برای مشخص کردن گیگابایت اضافه کنید\&. به‌طور پیش‌فرض، اندازه روی ۰ تنظیم شده است، به این معنی که JVM اندازه صفحات بزرگ را به‌طور خودکار انتخاب می‌کند\&. .sp مثال زیر نحوه تنظیم اندازه صفحات بزرگ روی ۴ مگابایت (MB) را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:LargePageSizeInBytes=4m\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:MaxDirectMemorySize=\fIsize\fR .RS 4 حداکثر اندازه کل (بر حسب بایت) تخصیص‌های بافر مستقیم New I/O (بسته \fBjava\&.nio\fR) را تنظیم می‌کند\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مشخص کردن مگابایت، و \fBg\fR یا \fBG\fR را برای مشخص کردن گیگابایت اضافه کنید\&. به‌طور پیش‌فرض، اندازه روی ۰ تنظیم شده است، به این معنی که JVM اندازه تخصیص‌های بافر مستقیم NIO را به‌طور خودکار انتخاب می‌کند\&. .sp مثال‌های زیر نحوه تنظیم اندازه NIO روی ۱۰۲۴ کیلوبایت با واحدهای مختلف را نشان می‌دهند: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:MaxDirectMemorySize=1m\fR \fB\-XX:MaxDirectMemorySize=1024k\fR \fB\-XX:MaxDirectMemorySize=1048576\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:NativeMemoryTracking=\fImode\fR .RS 4 حالت ردیابی مصرف حافظه بومی (native memory) ماشین مجازی JVM را مشخص می‌کند\&. آرگومان‌های ممکن برای \fImode\fR شامل موارد زیر است: .PP off .RS 4 مصرف حافظه بومی JVM را ردیابی نکن\&. در صورتی که گزینه \fB\-XX:NativeMemoryTracking\fR را مشخص نکنید، این رفتار پیش‌فرض است\&. .RE .PP summary .RS 4 تنها مصرف حافظه توسط زیرسیستم‌های JVM نظیر هیپ جاوا، کلاس، کد و thread را ردیابی کن\&. .RE .PP detail .RS 4 علاوه بر ردیابی مصرف حافظه توسط زیرسیستم‌های JVM، مصرف حافظه توسط تک‌تک \fBCallSite\fRها، نواحی منفرد حافظه مجازی و نواحی ثبت‌شده (committed) آن را نیز ردیابی کن\&. .RE .RE .PP \-XX:ObjectAlignmentInBytes=\fIalignment\fR .RS 4 تراز حافظه اشیاء جاوا را (بر حسب بایت) تنظیم می‌کند\&. به‌طور پیش‌فرض، مقدار روی ۸ بایت تنظیم شده است\&. مقدار مشخص‌شده باید توانی از ۲ باشد و باید در محدوده بین ۸ تا ۲۵۶ (شامل هر دو) قرار گیرد\&. این گزینه امکان استفاده از اشاره‌گرهای فشرده (compressed pointers) را با اندازه‌های بزرگ هیپ جاوا فراهم می‌کند\&. .sp حد اندازه هیپ بر حسب بایت به‌صورت زیر محاسبه می‌شود: .sp \fB4GB * ObjectAlignmentInBytes\fR .sp نکته: با افزایش مقدار تراز، فضای بلااستفاده بین اشیاء نیز افزایش خواهد یافت\&. در نتیجه، ممکن است هیچ مزیتی از استفاده از اشاره‌گرهای فشرده با اندازه‌های بزرگ هیپ جاوا به دست نیاورید\&. .RE .PP \-XX:OnError=\fIstring\fR .RS 4 یک دستور سفارشی یا مجموعه‌ای از دستورهای جداشده با نقطه‌ویرگول را تعیین می‌کند تا در هنگام وقوع یک خطای غیرقابل‌جبران اجرا شوند\&. اگر رشته حاوی فاصله باشد، باید داخل علامت نقل‌قول قرار گیرد\&. .sp مثال زیر نشان می‌دهد چگونه می‌توان از گزینه \fB\-XX:OnError\fR برای اجرای دستور \fBgcore\fR جهت ایجاد تصویر هسته (core image) استفاده کرد، و اشکال‌زدا برای اتصال به فرایند در صورت بروز خطای غیرقابل‌جبران راه‌اندازی می‌شود (علامت \fB%p\fR نشان‌دهنده فرایند جاری است): .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:OnError="gcore %p;dbx \- %p"\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:OnOutOfMemoryError=\fIstring\fR .RS 4 یک دستور سفارشی یا مجموعه‌ای از دستورهای جداشده با نقطه‌ویرگول را تعیین می‌کند تا در اولین باری که یک استثنای \fBOutOfMemoryError\fR پرتاب می‌شود، اجرا شوند\&. اگر رشته حاوی فاصله باشد، باید داخل علامت نقل‌قول قرار گیرد\&. برای دیدن مثالی از رشته دستور، توضیحات گزینه \fB\-XX:OnError\fR را ببینید\&. .RE.PP \-XX:+PerfDataSaveToFile .RS 4 در صورت فعال بودن، داده‌های دودویی jstat(1) را هنگام خروج برنامهٔ Java ذخیره می‌کند\&. این داده‌های دودویی در فایلی با نام \fBhsperfdata_\fR\fI\fR ذخیره می‌شوند، که در آن \fI\fR شناسهٔ فرایند برنامهٔ Java اجراشده است\&. از \fBjstat\fR برای نمایش داده‌های کارایی موجود در این فایل به صورت زیر استفاده کنید: .sp .if n \{\ .RS 4 .\} .nf \fBjstat \-class file:///\fR\fB\fI\fR\fR\fB/hsperfdata_\fR\fB\fI\fR\fR \fBjstat \-gc file:///\fR\fB\fI\fR\fR\fB/hsperfdata_\fR\fB\fI\fR\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:+PrintCommandLineFlags .RS 4 چاپ پرچم‌های ارگونومیک انتخاب‌شدهٔ JVM که در خط فرمان آمده‌اند را فعال می‌کند\&. دانستن مقادیر ارگونومیک تنظیم‌شده توسط JVM، مانند اندازهٔ فضای heap و زباله‌روب (garbage collector) انتخاب‌شده، می‌تواند مفید باشد\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و پرچم‌ها چاپ نمی‌شوند\&. .RE .PP \-XX:+PrintNMTStatistics .RS 4 چاپ داده‌های گردآوری‌شدهٔ ردیابی حافظه بومی (native memory tracking) را هنگام خروج JVM، در صورتی که ردیابی حافظه بومی فعال باشد، فعال می‌کند (ببینید: \fB\-XX:NativeMemoryTracking\fR)\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و داده‌های ردیابی حافظه بومی چاپ نمی‌شوند\&. .RE .PP \-XX:+RelaxAccessControlCheck .RS 4 میزان بررسی‌های کنترل دسترسی در ارزیاب (verifier) را کاهش می‌دهد\&. به‌طور پیش‌فرض، این گزینه غیرفعال است، و برای کلاس‌هایی با نسخهٔ جدید بایت‌کد نادیده گرفته می‌شود (یعنی به عنوان غیرفعال با آن رفتار می‌شود)\&. می‌توانید آن را برای کلاس‌هایی با نسخه‌های قدیمی‌تر بایت‌کد فعال کنید\&. .RE .PP \-XX:+ShowMessageBoxOnError .RS 4 نمایش یک کادر پیام را هنگامی که JVM با خطای جبران‌ناپذیر مواجه می‌شود فعال می‌کند\&. این کار مانع از خروج JVM شده و فرایند را فعال نگه می‌دارد تا بتوانید یک دیباگر را به منظور بررسی علت خطا به آن متصل کنید\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .RE .PP \-XX:ThreadStackSize=\fIsize\fR .RS 4 اندازهٔ پشتهٔ ریسه (thread stack) را (به بایت) تنظیم می‌کند\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مگابایت، و \fBg\fR یا \fBG\fR را برای گیگابایت اضافه کنید\&. مقدار پیش‌فرض به بستر بستگی دارد: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Linux/ARM (32\-bit): 320 KB .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Linux/i386 (32\-bit): 320 KB .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Linux/x64 (64\-bit): 1024 KB .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} OS X (64\-bit): 1024 KB .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Oracle Solaris/i386 (32\-bit): 320 KB .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Oracle Solaris/x64 (64\-bit): 1024 KB .RE .sp مثال‌های زیر نحوهٔ تنظیم اندازهٔ پشتهٔ ریسه را روی 1024 KB با واحدهای مختلف نشان می‌دهند: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:ThreadStackSize=1m\fR \fB\-XX:ThreadStackSize=1024k\fR \fB\-XX:ThreadStackSize=1048576\fR .fi .if n \{\ .RE .\} این گزینه معادل \fB\-Xss\fR است\&. .RE .PP \-XX:+TraceClassLoading .RS 4 ردیابی کلاس‌ها را به هنگام بارگذاری آن‌ها فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و کلاس‌ها ردیابی نمی‌شوند\&. .RE .PP \-XX:+TraceClassLoadingPreorder .RS 4 ردیابی تمام کلاس‌های بارگذاری‌شده را به ترتیبی که به آن‌ها ارجاع داده می‌شود فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و کلاس‌ها ردیابی نمی‌شوند\&. .RE .PP \-XX:+TraceClassResolution .RS 4 ردیابی تفکیک‌های constant pool را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و تفکیک‌های constant pool ردیابی نمی‌شوند\&. .RE .PP \-XX:+TraceClassUnloading .RS 4 ردیابی کلاس‌ها را به هنگام تخلیه شدن آن‌ها فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و کلاس‌ها ردیابی نمی‌شوند\&. .RE .PP \-XX:+TraceLoaderConstraints .RS 4 ردیابی ثبت محدودیت‌های بارگذار (loader constraints) را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و ثبت محدودیت‌های بارگذار ردیابی نمی‌شود\&. .RE .PP \-XX:+UseAltSigs .RS 4 استفاده از سیگنال‌های جایگزین را به جای \fBSIGUSR1\fR و \fBSIGUSR2\fR برای سیگنال‌های داخلی JVM فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و سیگنال‌های جایگزین استفاده نمی‌شوند\&. این گزینه معادل \fB\-Xusealtsigs\fR است\&. .RE .PP \-XX:\-UseBiasedLocking .RS 4 استفاده از قفل‌گذاری بایاس‌شده (biased locking) را غیرفعال می‌کند\&. برخی برنامه‌ها با حجم قابل‌توجهی از همگام‌سازی‌های بدون رقابت، ممکن است با فعال بودن این پرچم افزایش سرعت چشمگیری داشته باشند، در حالی که برنامه‌هایی با الگوهای خاص قفل‌گذاری ممکن است کند شوند\&. برای اطلاعات بیشتر در مورد روش biased locking، مثال موجود در Java Tuning White Paper را در http://www\&.oracle\&.com/technetwork/java/tuning\-139912\&.html#section4\&.2\&.5 مشاهده کنید\&..sp به‌طور پیش‌فرض، این گزینه فعال است\&. .RE .PP \-XX:\-UseCompressedOops .RS 4 استفاده از اشاره‌گرهای فشرده (compressed pointers) را غیرفعال می‌کند\&. به‌طور پیش‌فرض، این گزینه فعال است و هنگامی که اندازه Java heap کمتر از 32 GB باشد، از اشاره‌گرهای فشرده استفاده می‌شود\&. زمانی که این گزینه فعال باشد، ارجاعات شیء به‌جای اشاره‌گرهای ۶۴ بیتی به‌صورت آفست‌های ۳۲ بیتی نمایش داده می‌شوند که معمولاً عملکرد اجرای برنامه با اندازه Java heap کمتر از 32 GB را بهبود می‌بخشد\&. این گزینه فقط برای JVMهای ۶۴ بیتی کار می‌کند\&. .sp همچنین امکان استفاده از اشاره‌گرهای فشرده در زمانی که اندازه Java heap بیشتر از 32GB باشد نیز وجود دارد\&. گزینه \fB\-XX:ObjectAlignmentInBytes\fR را ببینید\&. .RE .PP \-XX:+UseHugeTLBFS .RS 4 این گزینه برای Linux معادل مشخص کردن \fB\-XX:+UseLargePages\fR است\&. این گزینه به‌طور پیش‌فرض غیرفعال است\&. این گزینه همه صفحه‌های بزرگ (large pages) را از ابتدا و هنگام رزرو حافظه از پیش تخصیص می‌دهد؛ در نتیجه JVM نمی‌تواند نواحی حافظه صفحه‌های بزرگ را به‌طور پویا افزایش یا کاهش دهد؛ اگر این رفتار را می‌خواهید، گزینه \fB\-XX:UseTransparentHugePages\fR را ببینید\&. .sp برای اطلاعات بیشتر، «Large Pages» را ببینید\&. .RE .PP \-XX:+UseLargePages .RS 4 استفاده از حافظه با صفحه بزرگ (large page memory) را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و از حافظه صفحه بزرگ استفاده نمی‌شود\&. .sp برای اطلاعات بیشتر، «Large Pages» را ببینید\&. .RE .PP \-XX:+UseMembar .RS 4 صدور membarها را در هنگام گذار وضعیت ریسه‌ها (thread state transitions) فعال می‌کند\&. این گزینه به‌طور پیش‌فرض روی تمامی پلتفرم‌ها به‌جز سرورهای ARM غیرفعال است، که در آن‌ها فعال می‌باشد\&. (توصیه می‌شود که این گزینه را در سرورهای ARM غیرفعال نکنید\&.) .RE .PP \-XX:+UsePerfData .RS 4 قابلیت \fBperfdata\fR را فعال می‌کند\&. این گزینه به‌طور پیش‌فرض فعال است تا امکان نظارت بر JVM و آزمایش کارایی فراهم شود\&. غیرفعال کردن آن از ایجاد دایرکتوری‌های \fBhsperfdata_userid\fR جلوگیری می‌کند\&. برای غیرفعال کردن قابلیت \fBperfdata\fR، گزینه \fB\-XX:\-UsePerfData\fR را مشخص کنید\&. .RE .PP \-XX:+UseTransparentHugePages .RS 4 در Linux، استفاده از صفحه‌های بزرگی را که می‌توانند به‌طور پویا رشد یا کاهش یابند فعال می‌کند\&. این گزینه به‌طور پیش‌فرض غیرفعال است\&. ممکن است با transparent huge pages دچار مشکلات کارایی شوید زیرا سیستم‌عامل برای ایجاد huge pages، صفحه‌های دیگر را جابه‌جا می‌کند؛ این گزینه صرفاً برای آزمایش ارائه شده است\&. .sp برای اطلاعات بیشتر، «Large Pages» را ببینید\&. .RE .PP \-XX:+AllowUserSignalHandlers .RS 4 امکان نصب گرداننده‌های سیگنال (signal handlers) توسط برنامه را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و برنامه اجازه نصب گرداننده‌های سیگنال را ندارد\&. .RE .SS "گزینه‌های پیشرفته کامپایلر JIT (Advanced JIT Compiler Options)" .PP این گزینه‌ها کامپایل پویای در زمان اجرا (JIT \- Just\-In\-Time) انجام‌شده توسط Java HotSpot VM را کنترل می‌کنند\&. .PP \-XX:+AggressiveOpts .RS 4 استفاده از قابلیت‌های بهینه‌سازی تهاجمی کارایی را فعال می‌کند، که انتظار می‌رود در انتشار‌های آینده به پیش‌فرض تبدیل شوند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و از ویژگی‌های آزمایشی کارایی استفاده نمی‌شود\&. .RE .PP \-XX:AllocateInstancePrefetchLines=\fIlines\fR .RS 4 تعداد خطوطی که باید جلوتر از اشاره‌گر تخصیص نمونه پیش‌واکشی (prefetch) شوند را تنظیم می‌کند\&. به‌طور پیش‌فرض، تعداد خطوط پیش‌واکشی روی 1 تنظیم شده است: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:AllocateInstancePrefetchLines=1\fR .fi .if n \{\ .RE .\} تنها Java HotSpot Server VM از این گزینه پشتیبانی می‌کند\&. .RE .PP \-XX:AllocatePrefetchDistance=\fIsize\fR .RS 4 اندازه (به بایت) مسافت پیش‌واکشی (prefetch distance) را برای تخصیص شیء تعیین می‌کند\&. حافظه‌ای که قرار است با مقدار اشیاء جدید نوشته شود، تا این مسافت با شروع از آدرس آخرین شیء تخصیص‌یافته پیش‌واکشی می‌شود\&. هر ریسه جاوا نقطه تخصیص مخصوص به خود را دارد\&. .sp مقادیر منفی نشان می‌دهند که مسافت پیش‌واکشی بر اساس پلتفرم انتخاب می‌شود\&. مقادیر مثبت، بایت‌های مورد نظر برای پیش‌واکشی هستند\&. برای مشخص کردن کیلوبایت حرف \fBk\fR یا \fBK\fR، برای مگابایت حرف \fBm\fR یا \fBM\fR، و برای گیگابایت حرف \fBg\fR یا \fBG\fR را ضمیمه کنید\&. مقدار پیش‌فرض روی \-1 تنظیم شده است\&. .sp مثال زیر نحوه تنظیم مسافت پیش‌واکشی به 1024 بایت را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:AllocatePrefetchDistance=1024\fR .fi .if n \{\ .RE .\} تنها Java HotSpot Server VM از این گزینه پشتیبانی می‌کند\&. .RE .PP \-XX:AllocatePrefetchInstr=\fIinstruction\fR .RS 4 دستور پیش‌واکشی را برای پیش‌واکشی جلوتر از اشاره‌گر تخصیص تنظیم می‌کند\&. تنها Java HotSpot Server VM از این گزینه پشتیبانی می‌کند\&. مقادیر ممکن از 0 تا 3 هستند\&. دستورالعمل‌های واقعی مربوط به این مقادیر به پلتفرم بستگی دارد\&. به‌طور پیش‌فرض، دستور پیش‌واکشی روی 0 تنظیم شده است: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:AllocatePrefetchInstr=0\fR .fi .if n \{\ .RE .\} تنها Java HotSpot Server VM از این گزینه پشتیبانی می‌کند\&. .RE .PP \-XX:AllocatePrefetchLines=\fIlines\fR .RS 4 تعداد خطوط حافظه نهان (cache lines) را برای بارگذاری پس از آخرین تخصیص شیء با استفاده از دستورالعمل‌های پیش‌واکشی تولیدشده در کد کامپایل‌شده تعیین می‌کند\&. مقدار پیش‌فرض اگر آخرین شیء تخصیص‌یافته یک نمونه باشد 1، و اگر یک آرایه باشد 3 است\&. .sp مثال زیر نحوه تنظیم تعداد خطوط حافظه نهان بارگذاری‌شده روی 5 را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:AllocatePrefetchLines=5\fR .fi .if n \{\ .RE .\} تنها Java HotSpot Server VM از این گزینه پشتیبانی می‌کند\&. .RE .PP \-XX:AllocatePrefetchStepSize=\fIsize\fR .RS 4 اندازه گام (به بایت) را برای دستورالعمل‌های پیش‌واکشی متوالی تنظیم می‌کند\&. برای مشخص کردن کیلوبایت حرف \fBk\fR یا \fBK\fR، برای مگابایت حرف \fBm\fR یا \fBM\fR، و برای گیگابایت حرف \fBg\fR یا \fBG\fR را ضمیمه کنید\&. به‌طور پیش‌فرض، اندازه گام روی 16 بایت تنظیم شده است: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:AllocatePrefetchStepSize=16\fR .fi .if n \{\ .RE .\} تنها Java HotSpot Server VM از این گزینه پشتیبانی می‌کند\&. .RE.PP \-XX:AllocatePrefetchStyle=\fIstyle\fR .RS 4 سبک کد تولید‌شده برای دستورالعمل‌های پیش‌واکشی را تنظیم می‌کند\&. آرگومان \fIstyle\fR یک عدد صحیح از 0 تا 3 است: .PP 0 .RS 4 دستورالعمل‌های پیش‌واکشی تولید نشوند\&. .RE .PP 1 .RS 4 اجرای دستورالعمل‌های پیش‌واکشی پس از هر تخصیص حافظه\&. این مقدار پیش‌فرض است\&. .RE .PP 2 .RS 4 استفاده از اشاره‌گر واترمارکِ بلوک تخصیص محلی نخ (TLAB) برای تعیین زمان اجرای دستورالعمل‌های پیش‌واکشی\&. .RE .PP 3 .RS 4 استفاده از دستورالعمل BIS در SPARC برای پیش‌واکشی تخصیص\&. .RE .sp تنها Java HotSpot Server VM از این گزینه پشتیبانی می‌کند\&. .RE .PP \-XX:+BackgroundCompilation .RS 4 کامپایل در پس‌زمینه را فعال می‌کند\&. این گزینه به‌طور پیش‌فرض فعال است\&. برای غیرفعال کردن کامپایل در پس‌زمینه، \fB\-XX:\-BackgroundCompilation\fR را مشخص کنید (این کار معادل تعیین \fB\-Xbatch\fR است)\&. .RE .PP \-XX:CICompilerCount=\fIthreads\fR .RS 4 تعداد نخ‌های کامپایلر مورد استفاده برای کامپایل را تعیین می‌کند\&. به‌طور پیش‌فرض، تعداد نخ‌ها برای JVM سرور روی 2، برای JVM کلاینت روی 1 تنظیم شده است و در صورت استفاده از کامپایل چندمرحله‌ای (tiered compilation)، متناسب با تعداد هسته‌ها مقیاس‌پذیر می‌شود\&. مثال زیر نحوه تنظیم تعداد نخ‌ها روی 2 را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CICompilerCount=2\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:CodeCacheMinimumFreeSpace=\fIsize\fR .RS 4 حداقل فضای خالی (به بایت) لازم برای کامپایل را تعیین می‌کند\&. برای نشان دادن کیلوبایت حرف \fBk\fR یا \fBK\fR\c ، برای مگابایت حرف \fBm\fR یا \fBM\fR و برای گیگابایت حرف \fBg\fR یا \fBG\fR را اضافه کنید\&. هنگامی که فضای خالی کمتر از حداقل تعیین‌شده باقی بماند، کامپایل متوقف می‌شود\&. به‌طور پیش‌فرض، این گزینه روی 500 KB تنظیم شده است\&. مثال زیر نحوه تنظیم حداقل فضای خالی روی 1024 MB را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CodeCacheMinimumFreeSpace=1024m\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:CompileCommand=\fIcommand\fR,\fImethod\fR[,\fIoption\fR] .RS 4 دستوری را برای اجرا روی یک متد مشخص می‌کند\&. برای مثال، برای مستثنی کردن متد \fBindexOf()\fR از کلاس \fBString\fR از کامپایل شدن، از دستور زیر استفاده کنید: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CompileCommand=exclude,java/lang/String\&.indexOf\fR .fi .if n \{\ .RE .\} توجه داشته باشید که نام کامل کلاس مشخص می‌شود، شامل تمام بسته‌ها و زیربسته‌ها که با یک خط مورب (\fB/\fR) از یکدیگر جدا شده‌اند\&. برای عملیات آسان‌تر برش و جای‌گذاری، همچنین می‌توان از قالب نام متد تولیدشده توسط گزینه‌های \fB\-XX:+PrintCompilation\fR و \fB\-XX:+LogCompilation\fR استفاده کرد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CompileCommand=exclude,java\&.lang\&.String::indexOf\fR .fi .if n \{\ .RE .\} اگر متد بدون امضا مشخص شود، دستور روی تمامی متدهای با نام مشخص‌شده اعمال خواهد شد\&. با این حال، می‌توانید امضای متد را نیز در قالب فایل کلاس مشخص کنید\&. در این حالت، باید آرگومان‌ها را درون علامت نقل‌قول قرار دهید، زیرا در غیر این صورت پوسته با نقطه‌ویرگول مانند پایان دستور رفتار می‌کند\&. برای مثال، اگر می‌خواهید تنها متد \fBindexOf(String)\fR از کلاس \fBString\fR از کامپایل شدن مستثنی شود، از دستور زیر استفاده کنید: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CompileCommand="exclude,java/lang/String\&.indexOf,(Ljava/lang/String;)I"\fR .fi .if n \{\ .RE .\} همچنین می‌توانید از علامت ستاره (*) به عنوان نویسه عام برای نام‌های کلاس و متد استفاده کنید\&. برای مثال، برای مستثنی کردن تمام متدهای \fBindexOf()\fR در تمام کلاس‌ها از کامپایل شدن، از دستور زیر استفاده کنید: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CompileCommand=exclude,*\&.indexOf\fR .fi .if n \{\ .RE .\} ویرگول‌ها و نقطه‌ها نام‌های مستعار برای فاصله‌ها هستند و ارسال دستورات کامپایلر را از طریق پوسته آسان‌تر می‌کنند\&. می‌توانید با قرار دادن کل آرگومان در علامت نقل‌قول و استفاده از فاصله به عنوان جداکننده، آرگومان‌ها را به \fB\-XX:CompileCommand\fR ارسال کنید: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CompileCommand="exclude java/lang/String indexOf"\fR .fi .if n \{\ .RE .\} توجه داشته باشید که کامپایلر JIT پس از تجزیه دستورات ارسال‌شده در خط فرمان با استفاده از گزینه‌های \fB\-XX:CompileCommand\fR\c ، دستورات را از فایل \fB\&.hotspot_compiler\fR می‌خواند\&. می‌توانید دستوراتی را به این فایل اضافه کنید یا با استفاده از گزینه \fB\-XX:CompileCommandFile\fR فایل دیگری را مشخص نمایید\&. .sp برای افزودن چندین دستور، یا گزینه \fB\-XX:CompileCommand\fR را چندین بار مشخص کنید، یا هر آرگومان را با جداکننده خط جدید (\fB\en\fR) جدا سازید\&. دستورات زیر در دسترس هستند: .PP break .RS 4 تنظیم یک نقطه توقف (breakpoint) هنگام اشکال‌زدایی JVM برای توقف در ابتدای کامپایل متد مشخص‌شده\&. .RE .PP compileonly .RS 4 مستثنی کردن تمام متدها از کامپایل، به جز متد مشخص‌شده\&. به عنوان یک جایگزین، می‌توانید از گزینه \fB\-XX:CompileOnly\fR استفاده کنید که امکان مشخص کردن چندین متد را فراهم می‌کند\&. .RE.PP dontinline .RS 4 از درون‌خطی‌سازی (inlining) متد مشخص‌شده جلوگیری می‌کند\&. .RE .PP exclude .RS 4 متد مشخص‌شده را از کامپایل مستثنی می‌کند\&. .RE .PP help .RS 4 یک پیام راهنما برای گزینهٔ \fB\-XX:CompileCommand\fR چاپ می‌کند\&. .RE .PP inline .RS 4 برای درون‌خطی‌سازی متد مشخص‌شده تلاش می‌کند\&. .RE .PP log .RS 4 ثبت وقایع (لاگ‌گیری) کامپایل (با گزینهٔ \fB\-XX:+LogCompilation\fR) را برای تمام متدها به‌جز متد مشخص‌شده مستثنی (غیرفعال) می‌کند\&. به‌طور پیش‌فرض، ثبت وقایع برای تمام متدهای کامپایل‌شده انجام می‌شود\&. .RE .PP option .RS 4 از این دستور می‌توان برای ارسال یک گزینهٔ کامپایل JIT به متد مشخص‌شده به‌جای آخرین آرگومان (\fIoption\fR) استفاده کرد\&. گزینهٔ کامپایل در پایان، پس از نام متد مشخص می‌شود\&. برای نمونه، جهت فعال‌سازی گزینهٔ \fBBlockLayoutByFrequency\fR برای متد \fBappend()\fR از کلاس \fBStringBuffer\fR، از دستور زیر استفاده کنید: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CompileCommand=option,java/lang/StringBuffer\&.append,BlockLayoutByFrequency\fR .fi .if n \{\ .RE .\} می‌توانید چندین گزینهٔ کامپایل را با کاما یا فاصله از یکدیگر جدا کرده و مشخص کنید\&. .RE .PP print .RS 4 کد اسمبلی تولیدشده را پس از کامپایل متد مشخص‌شده چاپ می‌کند\&. .RE .PP quiet .RS 4 دستورهای کامپایل را چاپ نمی‌کند\&. به‌طور پیش‌فرض، دستورهایی که با گزینهٔ \-\fBXX:CompileCommand\fR مشخص می‌کنید چاپ می‌شوند؛ برای نمونه، اگر متد \fBindexOf()\fR از کلاس \fBString\fR را از کامپایل مستثنی کنید، عبارت زیر در خروجی استاندارد چاپ خواهد شد: .sp .if n \{\ .RS 4 .\} .nf \fBCompilerOracle: exclude java/lang/String\&.indexOf\fR .fi .if n \{\ .RE .\} می‌توانید با مشخص کردن گزینهٔ \fB\-XX:CompileCommand=quiet\fR پیش از سایر گزینه‌های \fB\-XX:CompileCommand\fR، از چاپ این خروجی جلوگیری کنید\&. .RE .RE .PP \-XX:CompileCommandFile=\fIfilename\fR .RS 4 فایلی را مشخص می‌کند که دستورهای کامپایلر JIT از آن خوانده می‌شوند\&. به‌طور پیش‌فرض، از فایل \fB\&.hotspot_compiler\fR برای ذخیرهٔ دستورهای اعمال‌شده توسط کامپایلر JIT استفاده می‌شود\&. .sp هر خط در فایل دستور بیانگر یک دستور، نام یک کلاس و نام متدی است که دستور برای آن به‌کار می‌رود\&. برای نمونه، این خط کد اسمبلی را برای متد \fBtoString()\fR از کلاس \fBString\fR چاپ می‌کند: .sp .if n \{\ .RS 4 .\} .nf \fBprint java/lang/String toString\fR .fi .if n \{\ .RE .\} برای اطلاعات بیشتر دربارهٔ نحوهٔ مشخص کردن دستورها برای اجرا روی متدها توسط کامپایلر JIT، گزینهٔ \fB\-XX:CompileCommand\fR را ببینید\&. .RE .PP \-XX:CompileOnly=\fImethods\fR .RS 4 فهرستی از متدها (جداشده با کاما) را تعیین می‌کند که کامپایل باید به آن‌ها محدود شود\&. تنها متدهای مشخص‌شده کامپایل خواهند شد\&. هر متد را با نام کامل کلاس (شامل بسته‌ها و زیربسته‌ها) مشخص کنید\&. برای نمونه، برای کامپایل انحصاری متد \fBlength()\fR از کلاس \fBString\fR و متد \fBsize()\fR از کلاس \fBList\fR، از دستور زیر استفاده کنید: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CompileOnly=java/lang/String\&.length,java/util/List\&.size\fR .fi .if n \{\ .RE .\} توجه داشته باشید که نام کامل کلاس مشخص شده است که شامل تمام بسته‌ها و زیربسته‌ها می‌شود که با اسلش (\fB/\fR) از یکدیگر جدا شده‌اند\&. برای ساده‌تر شدن عملیات برش و چسباندن (cut and paste)، همچنین امکان استفاده از قالب نام متد تولیدشده توسط گزینه‌های \fB\-XX:+PrintCompilation\fR و \fB\-XX:+LogCompilation\fR وجود دارد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CompileOnly=java\&.lang\&.String::length,java\&.util\&.List::size\fR .fi .if n \{\ .RE .\} اگرچه نویسه‌های عمومی (wildcardها) پشتیبانی نمی‌شوند، اما می‌توانید تنها نام کلاس یا بسته را مشخص کنید تا تمام متدهای آن کلاس یا بسته کامپایل شوند، و همچنین می‌توانید صرفاً نام متد را مشخص کنید تا متدهای دارای این نام در هر کلاسی کامپایل شوند: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CompileOnly=java/lang/String\fR \fB\-XX:CompileOnly=java/lang\fR \fB\-XX:CompileOnly=\&.length\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:CompileThreshold=\fIinvocations\fR .RS 4 تعداد فراخوانی‌های تفسیرشدهٔ متد را پیش از آغاز کامپایل تعیین می‌کند\&. به‌طور پیش‌فرض در JVM سرور، کامپایلر JIT تعداد ۱۰٬۰۰۰ فراخوانی تفسیرشدهٔ متد را به‌منظور گردآوری اطلاعات جهت کامپایل بهینه انجام می‌دهد\&. برای JVM کلاینت، مقدار پیش‌فرض ۱٬۵۰۰ فراخوانی است\&. در صورت فعال بودن کامپایل لایه‌ای (tiered compilation)، این گزینه نادیده گرفته می‌شود؛ گزینهٔ \fB\-XX:+TieredCompilation\fR را ببینید\&. مثال زیر نحوهٔ تنظیم تعداد فراخوانی‌های متد تفسیرشده را به ۵٬۰۰۰ نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CompileThreshold=5000\fR .fi .if n \{\ .RE .\} می‌توانید با مشخص کردن گزینهٔ \fB\-Xcomp\fR، تفسیر متدهای جاوا را پیش از کامپایل به‌طور کامل غیرفعال کنید\&. .RE.PP \-XX:+DoEscapeAnalysis .RS 4 استفاده از تحلیل گریز (escape analysis) را فعال می‌کند\&. این گزینه به‌طور پیش‌فرض فعال است\&. برای غیرفعال کردن استفاده از تحلیل گریز، گزینهٔ \fB\-XX:\-DoEscapeAnalysis\fR را مشخص کنید\&. فقط Java HotSpot Server VM از این گزینه پشتیبانی می‌کند\&. .RE .PP \-XX:InitialCodeCacheSize=\fIsize\fR .RS 4 اندازهٔ اولیهٔ حافظهٔ نهان کد (code cache) را به بایت تنظیم می‌کند\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مگابایت، و \fBg\fR یا \fBG\fR را برای گیگابایت اضافه کنید\&. مقدار پیش‌فرض روی 500 کیلوبایت تنظیم شده است\&. اندازهٔ اولیهٔ حافظهٔ نهان کد نباید کمتر از حداقل اندازهٔ صفحهٔ حافظه در سیستم باشد\&. مثال زیر نحوهٔ تنظیم اندازهٔ اولیهٔ حافظهٔ نهان کد روی ۳۲ کیلوبایت را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:InitialCodeCacheSize=32k\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:+Inline .RS 4 درون‌خطی‌سازی متدها (method inlining) را فعال می‌کند\&. این گزینه به‌منظور افزایش کارایی به‌طور پیش‌فرض فعال است\&. برای غیرفعال کردن درون‌خطی‌سازی متدها، گزینهٔ \fB\-XX:\-Inline\fR را مشخص کنید\&. .RE .PP \-XX:InlineSmallCode=\fIsize\fR .RS 4 حداکثر اندازهٔ کد (به بایت) را برای متدهای کامپایل‌شده‌ای که باید درون‌خطی شوند تنظیم می‌کند\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مگابایت، و \fBg\fR یا \fBG\fR را برای گیگابایت اضافه کنید\&. تنها متدهای کامپایل‌شده‌ای که اندازه‌شان از اندازهٔ تعیین‌شده کوچکتر باشد درون‌خطی خواهند شد\&. به‌طور پیش‌فرض، حداکثر اندازهٔ کد روی ۱۰۰۰ بایت تنظیم شده است: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:InlineSmallCode=1000\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:+LogCompilation .RS 4 ثبت لاگ فعالیت‌های کامپایل را در فایلی با نام \fBhotspot\&.log\fR در دایرکتوری کاری فعلی فعال می‌کند\&. می‌توانید با استفاده از گزینهٔ \fB\-XX:LogFile\fR مسیر و نام فایل لاگ متفاوتی را مشخص کنید\&. .sp به‌طور پیش‌فرض، این گزینه غیرفعال است و فعالیت کامپایل ثبت نمی‌شود\&. گزینهٔ \fB\-XX:+LogCompilation\fR باید همراه با گزینهٔ \fB\-XX:UnlockDiagnosticVMOptions\fR که گزینه‌های تشخیصی JVM را فعال می‌کند، استفاده شود\&. .sp می‌توانید با استفاده از گزینهٔ \fB\-XX:+PrintCompilation\fR خروجی تشخیصی پرجزئیات را فعال کنید تا با هر بار کامپایل شدن یک متد، پیامی در کنسول چاپ شود\&. .RE .PP \-XX:MaxInlineSize=\fIsize\fR .RS 4 حداکثر اندازهٔ بایت‌کد (به بایت) یک متد برای درون‌خطی شدن را تعیین می‌کند\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مگابایت، و \fBg\fR یا \fBG\fR را برای گیگابایت اضافه کنید\&. به‌طور پیش‌فرض، حداکثر اندازهٔ بایت‌کد روی ۳۵ بایت تنظیم شده است: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:MaxInlineSize=35\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:MaxNodeLimit=\fInodes\fR .RS 4 حداکثر تعداد گره‌های مورد استفاده در طول کامپایل یک متد منفرد را تنظیم می‌کند\&. به‌طور پیش‌فرض، حداکثر تعداد گره‌ها روی ۶۵٬۰۰۰ تنظیم شده است: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:MaxNodeLimit=65000\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:MaxTrivialSize=\fIsize\fR .RS 4 حداکثر اندازهٔ بایت‌کد (به بایت) یک متد ناچیز (trivial method) را برای درون‌خطی شدن تنظیم می‌کند\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مگابایت، و \fBg\fR یا \fBG\fR را برای گیگابایت اضافه کنید\&. به‌طور پیش‌فرض، حداکثر اندازهٔ بایت‌کد یک متد ناچیز روی ۶ بایت تنظیم شده است: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:MaxTrivialSize=6\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:+OptimizeStringConcat .RS 4 بهینه‌سازی عملیات الحاق \fBString\fR را فعال می‌کند\&. این گزینه به‌طور پیش‌فرض فعال است\&. برای غیرفعال کردن بهینه‌سازی عملیات الحاق \fBString\fR، گزینهٔ \fB\-XX:\-OptimizeStringConcat\fR را مشخص کنید\&. فقط Java HotSpot Server VM از این گزینه پشتیبانی می‌کند\&. .RE .PP \-XX:+PrintAssembly .RS 4 چاپ کد اسمبلی را برای متدهای بومی (native) و بایت‌کدی با استفاده از کتابخانهٔ خارجی \fBdisassembler\&.so\fR فعال می‌کند\&. این ویژگی امکان مشاهدهٔ کد تولیدشده را فراهم می‌سازد که می‌تواند به تشخیص مشکلات کارایی کمک کند\&. .sp به‌طور پیش‌فرض، این گزینه غیرفعال است و کد اسمبلی چاپ نمی‌شود\&. گزینهٔ \fB\-XX:+PrintAssembly\fR باید همراه با گزینهٔ \fB\-XX:UnlockDiagnosticVMOptions\fR که گزینه‌های تشخیصی JVM را فعال می‌کند، استفاده شود\&. .RE.PP \-XX:+PrintCompilation .RS 4 خروجی تشخیصی پرگو (verbose) از JVM را با چاپ یک پیام در کنسول هنگام کامپایل شدن هر متد، فعال می‌کند\&. این قابلیت به شما امکان می‌دهد ببینید دقیقاً چه متدهایی کامپایل می‌شوند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و خروجی تشخیصی چاپ نمی‌شود\&. .sp همچنین می‌توانید فعالیت‌های کامپایل را با استفاده از گزینهٔ \fB\-XX:+LogCompilation\fR در یک فایل ثبت کنید\&. .RE .PP \-XX:+PrintInlining .RS 4 چاپ تصمیمات مربوط به درون‌خطی‌سازی (inlining) را فعال می‌کند\&. این قابلیت به شما امکان می‌دهد ببینید کدام متدها درون‌خطی می‌شوند\&. .sp به‌طور پیش‌فرض، این گزینه غیرفعال است و اطلاعات درون‌خطی‌سازی چاپ نمی‌شود\&. گزینهٔ \fB\-XX:+PrintInlining\fR باید همراه با گزینهٔ \fB\-XX:+UnlockDiagnosticVMOptions\fR استفاده شود که گزینه‌های تشخیصی JVM را بازگشایی می‌کند\&. .RE .PP \-XX:ReservedCodeCacheSize=\fIsize\fR .RS 4 حداکثر اندازهٔ کَش کد (code cache به بایت) را برای کدهای کامپایل‌شده توسط JIT تعیین می‌کند\&. برای مشخص کردن کیلوبایت، حرف \fBk\fR یا \fBK\fR، برای مگابایت، حرف \fBm\fR یا \fBM\fR، و برای گیگابایت، حرف \fBg\fR یا \fBG\fR را اضافه کنید\&. حداکثر اندازهٔ پیش‌فرض کَش کد ۲۴۰ مگابایت است؛ اگر کامپایل چندسطحی (tiered compilation) را با گزینهٔ \fB\-XX:\-TieredCompilation\fR غیرفعال کنید، اندازهٔ پیش‌فرض ۴۸ مگابایت خواهد بود\&. این گزینه دارای محدودیت ۲ گیگابایت است؛ در غیر این صورت خطا تولید می‌شود\&. حداکثر اندازهٔ کَش کد نباید کمتر از اندازهٔ اولیهٔ کَش کد باشد؛ به گزینهٔ \fB\-XX:InitialCodeCacheSize\fR مراجعه کنید\&. این گزینه معادل \fB\-Xmaxjitcodesize\fR است\&. .RE .PP \-XX:RTMAbortRatio=\fIabort_ratio\fR .RS 4 نسبت لغو RTM به‌صورت درصدی (٪) از تمام تراکنش‌های اجراشدهٔ RTM مشخص می‌شود\&. اگر تعداد تراکنش‌های لغوشده از این نسبت بیشتر شود، کد کامپایل‌شده از حالت بهینه‌سازی خارج (deoptimize) خواهد شد\&. این نسبت زمانی استفاده می‌شود که گزینهٔ \fB\-XX:+UseRTMDeopt\fR فعال باشد\&. مقدار پیش‌فرض این گزینه ۵۰ است\&. این بدان معناست که در صورت لغو شدن ۵۰٪ از کل تراکنش‌ها، کد کامپایل‌شده deoptimize می‌شود\&. .RE .PP \-XX:RTMRetryCount=\fInumber_of_retries\fR .RS 4 کد قفل‌گذاری RTM هنگام لغو شدن یا اشغال بودن، به تعداد دفعاتی که توسط این گزینه تعیین شده تلاش مجدد می‌کند و سپس به سازوکار قفل‌گذاری عادی بازمی‌گردد (fallback)\&. مقدار پیش‌فرض این گزینه ۵ است\&. گزینهٔ \fB\-XX:UseRTMLocking\fR باید فعال باشد\&. .RE .PP \-XX:\-TieredCompilation .RS 4 استفاده از کامپایل چندسطحی (tiered compilation) را غیرفعال می‌کند\&. به‌طور پیش‌فرض، این گزینه فعال است\&. تنها Java HotSpot Server VM از این گزینه پشتیبانی می‌کند\&. .RE .PP \-XX:+UseAES .RS 4 توابع درونی (intrinsics) مبتنی بر سخت‌افزار AES را برای سخت‌افزارهای Intel، AMD و SPARC فعال می‌کند\&. سخت‌افزارهای Intel Westmere (سال ۲۰۱۰ و جدیدتر)، AMD Bulldozer (سال ۲۰۱۱ و جدیدتر) و SPARC (مدل T4 و جدیدتر) پشتیبانی می‌شوند\&. UseAES در ترکیب با UseAESIntrinsics استفاده می‌شود\&. .RE .PP \-XX:+UseAESIntrinsics .RS 4 پرچم‌های UseAES و UseAESIntrinsics به‌طور پیش‌فرض فعال هستند و تنها در نسخه‌های ۳۲ بیتی و ۶۴ بیتی Java HotSpot Server VM پشتیبانی می‌شوند\&. برای غیرفعال کردن توابع درونی سخت‌افزاری AES، عبارت \fB\-XX:\-UseAES \-XX:\-UseAESIntrinsics\fR را مشخص کنید\&. برای نمونه، جهت فعال‌سازی سخت‌افزاری AES، از پرچم‌های زیر استفاده کنید: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:+UseAES \-XX:+UseAESIntrinsics\fR .fi .if n \{\ .RE .\} جهت پشتیبانی از پرچم‌های UseAES و UseAESIntrinsics برای نسخه‌های ۳۲ بیتی و ۶۴ بیتی، از گزینهٔ \fB\-server\fR برای انتخاب Java HotSpot Server VM استفاده کنید\&. این پرچم‌ها در Client VM پشتیبانی نمی‌شوند\&. .RE .PP \-XX:+UseCodeCacheFlushing .RS 4 تخلیهٔ کَش کد را پیش از خاموش شدن کامپایلر فعال می‌کند\&. این گزینه به‌طور پیش‌فرض فعال است\&. برای غیرفعال کردن تخلیهٔ کَش کد پیش از خاموش شدن کامپایلر، \fB\-XX:\-UseCodeCacheFlushing\fR را مشخص کنید\&. .RE .PP \-XX:+UseCondCardMark .RS 4 بررسی علامت‌گذاری پیشین کارت را قبل از به‌روزرسانی جدول کارت (card table) فعال می‌کند\&. این گزینه به‌طور پیش‌فرض غیرفعال است و تنها باید در ماشین‌های چندسوکت استفاده شود؛ در چنین سیستم‌هایی کارایی برنامه‌های جاوا که به‌شدت بر عملیات همروند متکی هستند را افزایش می‌دهد\&. تنها Java HotSpot Server VM از این گزینه پشتیبانی می‌کند\&. .RE .PP \-XX:+UseRTMDeopt .RS 4 قفل‌گذاری RTM را بر اساس نسبت لغو (abort ratio) به‌طور خودکار تنظیم می‌کند\&. این نسبت توسط گزینهٔ \fB\-XX:RTMAbortRatio\fR تعیین می‌شود\&. اگر تعداد تراکنش‌های لغوشده از نسبت لغو فراتر رود، متد شامل قفل deoptimize شده و با تبدیل همهٔ قفل‌ها به قفل‌های عادی مجدداً کامپایل می‌شود\&. این گزینه به‌طور پیش‌فرض غیرفعال است\&. گزینهٔ \fB\-XX:+UseRTMLocking\fR باید فعال باشد\&. .RE .PP \-XX:+UseRTMLocking .RS 4 کد قفل‌گذاری حافظهٔ تراکنشی محدود (RTM) را برای تمام قفل‌های متورم‌شده (inflated locks) با در نظر گرفتن سازوکار قفل‌گذاری عادی به عنوان راه‌حل بازگشتی (fallback handler) تولید می‌کند\&. این گزینه به‌طور پیش‌فرض غیرفعال است\&. گزینه‌های مربوط به RTM تنها برای Java HotSpot Server VM روی پردازنده‌های x86 که از Transactional Synchronization Extensions (TSX) پشتیبانی می‌کنند در دسترس هستند\&. .sp ویژگی RTM بخشی از اینتل TSX است که یک توسعهٔ مجموعه دستورالعمل x86 محسوب می‌شود و ایجاد برنامه‌های چندرشته‌ای را تسهیل می‌کند\&. ویژگی RTM دستورالعمل‌های جدید \fBXBEGIN\fR، \fBXABORT\fR، \fBXEND\fR و \fBXTEST\fR را معرفی می‌کند\&. دستورالعمل‌های \fBXBEGIN\fR و \fBXEND\fR مجموعه‌ای از دستورالعمل‌ها را احاطه می‌کنند تا به‌صورت یک تراکنش اجرا شوند\&. اگر در زمان اجرای تراکنش هیچ تداخلی رخ ندهد، تغییرات حافظه و ثبات‌ها هم‌زمان در دستورالعمل \fBXEND\fR تثبیت (commit) می‌شوند\&. از دستورالعمل \fBXABORT\fR می‌توان برای لغو صریح یک تراکنش و از دستورالعمل \fBXEND\fR برای بررسی اینکه آیا مجموعه‌ای از دستورالعمل‌ها در قالب یک تراکنش اجرا می‌شوند یا خیر استفاده کرد\&. .sp قفل روی یک تراکنش زمانی متورم می‌شود که رشتهٔ دیگری تلاش کند به همان تراکنش دسترسی پیدا کند، و در نتیجه رشته‌ای را که در ابتدا درخواست دسترسی به تراکنش را نداشته است مسدود می‌کند\&. سازوکار RTM نیازمند تعیین مجموعه‌ای از عملیات جایگزین (fallback) برای شرایط لغو یا شکست تراکنش است\&. قفل RTM قفلی است که به سیستم TSX واگذار شده است\&. .sp ویژگی RTM کارایی قفل‌های با رقابت بالا (highly contended) و تداخل کم را در یک ناحیهٔ بحرانی (کدی که نباید بیش از یک رشته به‌طور هم‌روند به آن دسترسی داشته باشد) بهبود می‌بخشد\&. همچنین RTM عملکرد قفل‌گذاری درشت‌دانه (coarse-grain locking) را که معمولاً در برنامه‌های چندرشته‌ای عملکرد مطلوبی ندارد، ارتقا می‌دهد\&. (قفل‌گذاری درشت‌دانه راهبردی است که در آن قفل‌ها برای مدت طولانی نگه داشته می‌شوند تا سربار گرفتن و آزادسازی قفل به حداقل برسد، در حالی که قفل‌گذاری ریزدانه استراتژی دستیابی به حداکثر موازی‌سازی با قفل کردن فقط در زمان لزوم و باز کردن آن در سریع‌ترین زمان ممکن است\&.) همچنین برای قفل‌های با رقابت کم که توسط رشته‌های متفاوتی استفاده می‌شوند، RTM می‌تواند اشتراک‌گذاری کاذب خط کَش (false cache line sharing) را که با نام پینگ‌پنگ خط کَش نیز شناخته می‌شود، کاهش دهد\&. این حالت زمانی رخ می‌دهد که چندین رشته از پردازنده‌های مختلف به منابع گوناگونی دسترسی دارند، اما آن منابع در یک خط کَش مشترک قرار دارند\&. در نتیجه، پردازنده‌ها مکرراً خطوط کَش پردازنده‌های دیگر را باطل می‌کنند که آن‌ها را مجبور به خواندن داده‌ها از حافظهٔ اصلی به جای کَش می‌کند\&. .RE .PP \-XX:+UseSHA .RS 4 توابع درونی (intrinsics) مبتنی بر سخت‌افزار را برای توابع هش رمزنگاری SHA در سخت‌افزار SPARC فعال می‌کند\&. \fBUseSHA\fR در ترکیب با گزینه‌های \fBUseSHA1Intrinsics\fR، \fBUseSHA256Intrinsics\fR و \fBUseSHA512Intrinsics\fR استفاده می‌شود\&. .sp پرچم‌های \fBUseSHA\fR و \fBUseSHA*Intrinsics\fR به‌طور پیش‌فرض فعال هستند و تنها برای Java HotSpot Server VM نسخهٔ ۶۴ بیتی روی SPARC T4 و جدیدتر پشتیبانی می‌شوند\&. .sp این ویژگی تنها در صورت استفاده از ارائه‌دهندهٔ \fBsun\&.security\&.provider\&.Sun\fR برای عملیات SHA قابل اعمال است\&. .sp برای غیرفعال کردن تمام توابع درونی سخت‌افزاری SHA، \fB\-XX:\-UseSHA\fR را مشخص کنید\&. برای غیرفعال کردن یک تابع درونی خاص SHA، از گزینهٔ متناظر مناسب استفاده کنید\&. برای مثال: \fB\-XX:\-UseSHA256Intrinsics\fR\&. .RE .PP \-XX:+UseSHA1Intrinsics .RS 4 توابع درونی را برای تابع هش رمزنگاری SHA\-1 فعال می‌کند\&. .RE .PP \-XX:+UseSHA256Intrinsics .RS 4 توابع درونی را برای توابع هش رمزنگاری SHA\-224 و SHA\-256 فعال می‌کند\&. .RE .PP \-XX:+UseSHA512Intrinsics .RS 4 توابع درونی را برای توابع هش رمزنگاری SHA\-384 و SHA\-512 فعال می‌کند\&. .RE .PP \-XX:+UseSuperWord .RS 4 تبدیل عملیات اسکالر (scalar) به عملیات ابرکلمه (superword) را فعال می‌کند\&. این گزینه به‌طور پیش‌فرض فعال است\&. برای غیرفعال کردن تبدیل عملیات اسکالر به ابرکلمه، \fB\-XX:\-UseSuperWord\fR را مشخص کنید\&. تنها Java HotSpot Server VM از این گزینه پشتیبانی می‌کند\&. .RE.SS "گزینه‌های پیشرفته سرویس‌پذیری (Advanced Serviceability Options)" .PP این گزینه‌ها امکان جمع‌آوری اطلاعات سیستم و انجام اشکال‌زدایی گسترده را فراهم می‌کنند\&. .PP \-XX:+ExtendedDTraceProbes .RS 4 کاوشگرهای (probe) اضافی ابزار \fBdtrace\fR را که بر کارایی تأثیر می‌گذارند، فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و \fBdtrace\fR تنها کاوشگرهای استاندارد را اجرا می‌کند\&. .RE .PP \-XX:+HeapDumpOnOutOfMemory .RS 4 تخلیه یا دامپ حافظه هیپ (heap) جاوا را در فایلی در دایرکتوری جاری با استفاده از پروفایلر هیپ (HPROF) در زمان پرتاب استثنای \fBjava\&.lang\&.OutOfMemoryError\fR فعال می‌کند\&. می‌توانید مسیر و نام فایل دامپ هیپ را با استفاده از گزینه \fB\-XX:HeapDumpPath\fR به صورت صریح تعیین کنید\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و هنگام رخ دادن استثنای \fBOutOfMemoryError\fR هیپ ذخیره نمی‌شود\&. .RE .PP \-XX:HeapDumpPath=\fIpath\fR .RS 4 مسیر و نام فایل را برای نوشتن دامپ هیپ ارائه‌شده توسط پروفایلر هیپ (HPROF) هنگام فعال بودن گزینه \fB\-XX:+HeapDumpOnOutOfMemoryError\fR تعیین می‌کند\&. به‌طور پیش‌فرض، این فایل در دایرکتوری کاری جاری ایجاد می‌شود و نام آن \fBjava_pid\fR\fIpid\fR\fB\&.hprof\fR است که در آن \fIpid\fR شناسه فرایندی است که موجب بروز خطا شده است\&. مثال زیر نحوه تنظیم صریح فایل پیش‌فرض را نشان می‌دهد (\fB%p\fR نشان‌دهنده شناسه فرایند جاری است): .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:HeapDumpPath=\&./java_pid%p\&.hprof\fR .fi .if n \{\ .RE .\} مثال زیر نحوه تنظیم فایل دامپ هیپ به \fB/var/log/java/java_heapdump\&.hprof\fR را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:HeapDumpPath=/var/log/java/java_heapdump\&.hprof\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:LogFile=\fIpath\fR .RS 4 مسیر و نام فایلی که داده‌های لاگ در آن نوشته می‌شوند را تعیین می‌کند\&. به‌طور پیش‌فرض، فایل در دایرکتوری کاری جاری ایجاد می‌شود و نام آن \fBhotspot\&.log\fR است\&. .sp مثال زیر نحوه تعیین فایل لاگ به \fB/var/log/java/hotspot\&.log\fR را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:LogFile=/var/log/java/hotspot\&.log\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:+PrintClassHistogram .RS 4 چاپ هیستوگرام نمونه‌های کلاس را پس از یک رویداد \fBControl+C\fR (\fBSIGTERM\fR) فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .sp تنظیم این گزینه معادل اجرای دستور \fBjmap \-histo\fR یا دستور \fBjcmd \fR\fIpid\fR\fB GC\&.class_histogram\fR است، که در آن \fIpid\fR شناسه فرایند جاوای جاری است\&. .RE .PP \-XX:+PrintConcurrentLocks .RS 4 چاپ قفل‌ها را پس از یک رویداد فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .sp چاپ قفل‌های \fBjava\&.util\&.concurrent\fR را پس از یک رویداد \fBControl+C\fR (\fBSIGTERM\fR) فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .sp تنظیم این گزینه معادل اجرای دستور \fBjstack \-l\fR یا دستور \fBjcmd \fR\fIpid\fR\fB Thread\&.print \-l\fR است، که در آن \fIpid\fR شناسه فرایند جاوای جاری است\&. .RE .PP \-XX:+UnlockDiagnosticVMOptions .RS 4 گزینه‌های در نظر گرفته شده برای عیب‌یابی و ارزیابی JVM را بازگشایی می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و گزینه‌های عیب‌یابی در دسترس نیستند\&. .RE.SS "گزینه‌های پیشرفتهٔ بازیافت حافظه (Advanced Garbage Collection Options)" .PP این گزینه‌ها نحوهٔ انجام بازیافت حافظه (GC) را توسط Java HotSpot VM کنترل می‌کنند\&. .PP \-XX:+AggressiveHeap .RS 4 بهینه‌سازی هیپ جاوا را فعال می‌کند\&. این گزینه پارامترهای مختلف را بر اساس پیکربندی رایانه (RAM و CPU) به‌گونه‌ای بهینه می‌کند که برای کارهای طولانی‌مدت با تخصیص حافظهٔ سنگین مناسب باشند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و هیپ بهینه‌سازی نمی‌شود\&. .RE .PP \-XX:+AlwaysPreTouch .RS 4 لمس (touching) تمام صفحه‌ها در هیپ جاوا را هنگام مقداردهی اولیهٔ JVM فعال می‌کند\&. این کار تمام صفحه‌ها را پیش از ورود به متد \fBmain()\fR وارد حافظه می‌کند\&. این گزینه می‌تواند در آزمایش‌ها برای شبیه‌سازی سیستمی طولانی‌مدت که در آن تمام حافظهٔ مجازی به حافظهٔ فیزیکی نگاشت شده است، استفاده شود\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و تمام صفحه‌ها با پر شدن فضای هیپ JVM تخصیص داده (commit) می‌شوند\&. .RE .PP \-XX:+CMSClassUnloadingEnabled .RS 4 تخلیهٔ کلاس‌ها (class unloading) را هنگام استفاده از بازیافت‌کنندهٔ حافظهٔ concurrent mark\-sweep (CMS) فعال می‌کند\&. این گزینه به‌طور پیش‌فرض فعال است\&. برای غیرفعال کردن تخلیهٔ کلاس‌ها برای بازیافت‌کنندهٔ حافظهٔ CMS، گزینهٔ \fB\-XX:\-CMSClassUnloadingEnabled\fR را مشخص کنید\&. .RE .PP \-XX:CMSExpAvgFactor=\fIpercent\fR .RS 4 درصد زمانی (0 تا 100) را که برای وزن‌دهی به نمونهٔ فعلی هنگام محاسبهٔ میانگین‌های نمایی برای آمارهای گردآوری هم‌روند استفاده می‌شود، تنظیم می‌کند\&. به‌طور پیش‌فرض، ضریب میانگین‌های نمایی روی 25% تنظیم شده است\&. مثال زیر نحوهٔ تنظیم این ضریب روی 15% را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CMSExpAvgFactor=15\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:CMSInitiatingOccupancyFraction=\fIpercent\fR .RS 4 درصد اشغال نسل قدیمی (0 تا 100) را که در آن چرخهٔ گردآوری CMS آغاز می‌شود، تعیین می‌کند\&. مقدار پیش‌فرض روی \-1 تنظیم شده است\&. هر مقدار منفی (شامل مقدار پیش‌فرض) به این معناست که \fB\-XX:CMSTriggerRatio\fR برای تعریف مقدار کسر اشغال آغازین استفاده می‌شود\&. .sp مثال زیر نحوهٔ تنظیم کسر اشغال روی 20% را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CMSInitiatingOccupancyFraction=20\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:+CMSScavengeBeforeRemark .RS 4 تلاش‌های روبش (scavenging) را پیش از مرحلهٔ remark در CMS فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .RE .PP \-XX:CMSTriggerRatio=\fIpercent\fR .RS 4 درصدی (0 تا 100) از مقدار مشخص‌شده توسط \fB\-XX:MinHeapFreeRatio\fR را که پیش از آغاز چرخهٔ گردآوری CMS تخصیص می‌یابد، تنظیم می‌کند\&. مقدار پیش‌فرض روی 80% تنظیم شده است\&. .sp مثال زیر نحوهٔ تنظیم کسر اشغال روی 75% را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:CMSTriggerRatio=75\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:ConcGCThreads=\fIthreads\fR .RS 4 تعداد نخ‌های مورد استفاده برای GC هم‌روند را تنظیم می‌کند\&. مقدار پیش‌فرض به تعداد پردازنده‌های (CPU) در دسترس JVM بستگی دارد\&. .sp برای مثال، جهت تنظیم تعداد نخ‌های GC هم‌روند روی 2، گزینهٔ زیر را مشخص کنید: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:ConcGCThreads=2\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:+DisableExplicitGC .RS 4 گزینه‌ای را فعال می‌کند که پردازش فراخوانی‌های \fBSystem\&.gc()\fR را غیرفعال می‌سازد\&. این گزینه به‌طور پیش‌فرض غیرفعال است، به این معنی که فراخوانی‌های \fBSystem\&.gc()\fR پردازش می‌شوند\&. اگر پردازش فراخوانی‌های \fBSystem\&.gc()\fR غیرفعال شود، JVM همچنان در صورت نیاز GC را انجام می‌دهد\&. .RE .PP \-XX:+ExplicitGCInvokesConcurrent .RS 4 فراخوانی GC هم‌روند را با استفاده از درخواست \fBSystem\&.gc()\fR فعال می‌کند\&. این گزینه به‌طور پیش‌فرض غیرفعال است و تنها می‌تواند همراه با گزینهٔ \fB\-XX:+UseConcMarkSweepGC\fR فعال شود\&. .RE .PP \-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses .RS 4 فراخوانی GC هم‌روند را با استفاده از درخواست \fBSystem\&.gc()\fR و تخلیهٔ کلاس‌ها در طول چرخهٔ GC هم‌روند فعال می‌کند\&. این گزینه به‌طور پیش‌فرض غیرفعال است و تنها می‌تواند همراه با گزینهٔ \fB\-XX:+UseConcMarkSweepGC\fR فعال شود\&. .RE .PP \-XX:G1HeapRegionSize=\fIsize\fR .RS 4 اندازهٔ ناحیه‌هایی را تنظیم می‌کند که هیپ جاوا هنگام استفاده از گردآورندهٔ garbage\-first (G1) به آن‌ها تقسیم می‌شود\&. این مقدار می‌تواند بین 1 مگابایت و 32 مگابایت باشد\&. اندازهٔ پیش‌فرض ناحیه به‌صورت ارگونومیک بر اساس اندازهٔ هیپ تعیین می‌شود\&. .sp مثال زیر نحوهٔ تنظیم اندازهٔ بخش‌ها روی 16 مگابایت را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:G1HeapRegionSize=16m\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:+G1PrintHeapRegions .RS 4 چاپ اطلاعات مربوط به اینکه کدام ناحیه‌ها توسط گردآورندهٔ G1 تخصیص یافته و کدام‌یک بازپس‌گرفته شده‌اند را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .RE .PP \-XX:G1ReservePercent=\fIpercent\fR .RS 4 درصدی از هیپ را (0 تا 50) که به‌عنوان سقف کاذب برای کاهش احتمال شکست ارتقا (promotion failure) در گردآورندهٔ G1 رزرو می‌شود، تنظیم می‌کند\&. به‌طور پیش‌فرض، این گزینه روی 10% تنظیم شده است\&. .sp مثال زیر نحوهٔ تنظیم هیپ رزروشده روی 20% را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:G1ReservePercent=20\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:InitialHeapSize=\fIsize\fR .RS 4 اندازهٔ اولیه (به بایت) استخر تخصیص حافظه را تنظیم می‌کند\&. این مقدار باید یا 0 باشد، یا مضربی از 1024 و بزرگ‌تر از 1 مگابایت\&. برای نشان دادن کیلوبایت، حرف \fBk\fR یا \fBK\fR، برای نشان دادن مگابایت، حرف \fBm\fR یا \fBM\fR، و برای نشان دادن گیگابایت، حرف \fBg\fR یا \fBG\fR را اضافه کنید\&. مقدار پیش‌فرض در زمان اجرا بر اساس پیکربندی سیستم انتخاب می‌شود\&. بخش «Ergonomics» را در \fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR در نشانی http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html ببینید\&. .RE.sp مثال‌های زیر نحوهٔ تنظیم اندازهٔ حافظهٔ تخصیص‌یافته روی ۶ مگابایت را با استفاده از واحدهای مختلف نشان می‌دهند: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:InitialHeapSize=6291456\fR \fB\-XX:InitialHeapSize=6144k\fR \fB\-XX:InitialHeapSize=6m\fR .fi .if n \{\ .RE .\} اگر این گزینه را روی 0 تنظیم کنید، اندازهٔ اولیه برابر با مجموع اندازه‌های تخصیص‌یافته برای نسل قدیم (old generation) و نسل جوان (young generation) تنظیم می‌شود\&. اندازهٔ هیپ برای نسل جوان را می‌توان با استفاده از گزینهٔ \fB\-XX:NewSize\fR تنظیم کرد\&. .RE .PP \-XX:InitialSurvivorRatio=\fIratio\fR .RS 4 نسبت اولیهٔ فضای بازمانده (survivor space) مورد استفاده توسط زباله‌روب بازدهی (throughput garbage collector) را تنظیم می‌کند (که با گزینه‌های \fB\-XX:+UseParallelGC\fR و/یا \-\fBXX:+UseParallelOldGC\fR فعال می‌شود)\&. تنظیم اندازهٔ تطبیقی به‌طور پیش‌فرض در زباله‌روب بازدهی با استفاده از گزینه‌های \fB\-XX:+UseParallelGC\fR و \fB\-XX:+UseParallelOldGC\fR فعال است، و فضای بازمانده متناسب با رفتار برنامه، با شروع از مقدار اولیه تغییر اندازه می‌یابد\&. اگر تنظیم اندازهٔ تطبیقی غیرفعال باشد (با استفاده از گزینهٔ \fB\-XX:\-UseAdaptiveSizePolicy\fR)، آنگاه باید از گزینهٔ \fB\-XX:SurvivorRatio\fR برای تعیین اندازهٔ فضای بازمانده در تمام طول اجرای برنامه استفاده شود\&. .sp از فرمول زیر می‌توان برای محاسبهٔ اندازهٔ اولیهٔ فضای بازمانده (S) بر اساس اندازهٔ نسل جوان (Y) و نسبت اولیهٔ فضای بازمانده (R) استفاده کرد: .sp .if n \{\ .RS 4 .\} .nf \fBS=Y/(R+2)\fR .fi .if n \{\ .RE .\} عدد 2 در این معادله نشان‌دهندهٔ دو فضای بازمانده است\&. هرچه مقدار تعیین‌شده به عنوان نسبت اولیهٔ فضای بازمانده بزرگ‌تر باشد، اندازهٔ اولیهٔ فضای بازمانده کوچک‌تر خواهد بود\&. .sp به‌طور پیش‌فرض، نسبت اولیهٔ فضای بازمانده روی 8 تنظیم شده است\&. در صورت استفاده از مقدار پیش‌فرض اندازهٔ فضای نسل جوان (2 مگابایت)، اندازهٔ اولیهٔ فضای بازمانده 0\&.2 مگابایت خواهد بود\&. .sp مثال زیر نحوهٔ تنظیم نسبت اولیهٔ فضای بازمانده را روی 4 نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:InitialSurvivorRatio=4\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:InitiatingHeapOccupancyPercent=\fIpercent\fR .RS 4 درصد اشغال هیپ (0 تا 100) را برای شروع یک چرخهٔ هم‌روند GC تعیین می‌کند\&. این گزینه توسط زباله‌روب‌هایی استفاده می‌شود که چرخهٔ هم‌روند GC را بر اساس میزان اشغال کل هیپ آغاز می‌کنند، نه فقط یکی از نسل‌ها (برای مثال، زباله‌روب G1)\&. .sp به‌طور پیش‌فرض، مقدار آغازین روی 45% تنظیم شده است\&. مقدار 0 به معنای چرخه‌های GC بی‌وقفه است\&. مثال زیر نحوهٔ تنظیم درصد اشغال آغازین هیپ را روی 75% نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:InitiatingHeapOccupancyPercent=75\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:MaxGCPauseMillis=\fItime\fR .RS 4 یک هدف برای بیشینهٔ زمان توقف GC (به میلی‌ثانیه) تعیین می‌کند\&. این یک هدف انعطاف‌پذیر (soft goal) است و JVM تمام تلاش خود را برای رسیدن به آن انجام خواهد داد\&. به‌طور پیش‌فرض، هیچ مقداری برای بیشینهٔ زمان توقف تعیین نشده است\&. .sp مثال زیر نحوهٔ تنظیم هدف بیشینهٔ زمان توقف را روی 500 میلی‌ثانیه نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:MaxGCPauseMillis=500\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:MaxHeapSize=\fIsize\fR .RS 4 بیشینهٔ اندازهٔ (به بایت) استخر تخصیص حافظه را تعیین می‌کند\&. این مقدار باید مضربی از 1024 و بزرگ‌تر از 2 مگابایت باشد\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مگابایت، و \fBg\fR یا \fBG\fR را برای گیگابایت اضافه کنید\&. مقدار پیش‌فرض در زمان اجرا بر اساس پیکربندی سیستم انتخاب می‌شود\&. در استقرارهای سرور، \fB\-XX:InitialHeapSize\fR و \fB\-XX:MaxHeapSize\fR اغلب روی مقداری یکسان تنظیم می‌شوند\&. بخش «Ergonomics» را در \fIJava SE HotSpot Virtual Machine Garbage Collection Tuning Guide\fR در http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/vm/gctuning/index\&.html ببینید\&. .sp مثال‌های زیر نحوهٔ تنظیم بیشینهٔ اندازهٔ مجاز حافظهٔ تخصیص‌یافته روی 80 مگابایت را با استفاده از واحدهای مختلف نشان می‌دهند: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:MaxHeapSize=83886080\fR \fB\-XX:MaxHeapSize=81920k\fR \fB\-XX:MaxHeapSize=80m\fR .fi .if n \{\ .RE .\} در بسترهای SPARC سیستم‌عامل‌های Oracle Solaris 7 و Oracle Solaris 8، حد بالای این مقدار تقریباً 4,000 مگابایت منهای مقادیر سربار است\&. در Oracle Solaris 2\&.6 و بسترهای x86، حد بالا تقریباً 2,000 مگابایت منهای مقادیر سربار است\&. در بسترهای لینوکس، حد بالا تقریباً 2,000 مگابایت منهای مقادیر سربار است\&. .sp گزینهٔ \fB\-XX:MaxHeapSize\fR معادل \fB\-Xmx\fR است\&. .RE .PP \-XX:MaxHeapFreeRatio=\fIpercent\fR .RS 4 بیشینهٔ درصد مجاز فضای آزاد هیپ (0 تا 100) پس از یک رویداد GC را تعیین می‌کند\&. اگر فضای آزاد هیپ فراتر از این مقدار گسترش یابد، هیپ کوچک خواهد شد\&. به‌طور پیش‌فرض، این مقدار روی 70% تنظیم شده است\&. .sp مثال زیر نحوهٔ تنظیم بیشینهٔ نسبت فضای آزاد هیپ را روی 75% نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:MaxHeapFreeRatio=75\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:MaxMetaspaceSize=\fIsize\fR .RS 4 بیشینهٔ مقدار حافظهٔ محلی (native memory) قابل تخصیص برای فراداده‌های کلاس (class metadata) را تعیین می‌کند\&. به‌طور پیش‌فرض، این اندازه نامحدود است\&. مقدار فراداده برای یک برنامه به خود برنامه، سایر برنامه‌های در حال اجرا و مقدار حافظهٔ در دسترس سیستم بستگی دارد\&. .sp مثال زیر نحوهٔ تنظیم بیشینهٔ اندازهٔ فراداده‌های کلاس روی 256 مگابایت را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:MaxMetaspaceSize=256m\fR .fi .if n \{\ .RE .\} .RE.PP \-XX:MaxNewSize=\fIsize\fR .RS 4 حداکثر اندازه (به بایت) هیپ را برای نسل جوان (nursery) تعیین می‌کند\&. مقدار پیش‌فرض به‌صورت خودکار و ارگونومیک تنظیم می‌شود\&. .RE .PP \-XX:MaxTenuringThreshold=\fIthreshold\fR .RS 4 حداکثر آستانه ارتقا (tenuring threshold) را برای استفاده در تعیین اندازه تطبیقی GC مشخص می‌کند\&. بزرگ‌ترین مقدار ممکن ۱۵ است\&. مقدار پیش‌فرض برای گردآورنده موازی (parallel/throughput collector) برابر با ۱۵، و برای گردآورنده CMS برابر با ۶ است\&. .sp مثال زیر نحوه تنظیم حداکثر آستانه ارتقا روی ۱۰ را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:MaxTenuringThreshold=10\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:MetaspaceSize=\fIsize\fR .RS 4 اندازه فضای تخصیص‌یافته برای متاداده‌های کلاس (class metadata) را مشخص می‌کند که با فراتر رفتن از آن برای اولین بار، یک زباله‌روبی (GC) آغاز خواهد شد\&. این آستانه برای زباله‌روبی بسته به میزان متاداده‌های مصرف‌شده افزایش یا کاهش می‌یابد\&. اندازه پیش‌فرض به بستر (platform) بستگی دارد\&. .RE .PP \-XX:MinHeapFreeRatio=\fIpercent\fR .RS 4 حداقل درصد مجاز فضای خالی هیپ (۰ تا ۱۰۰) پس از یک رویداد GC را تعیین می‌کند\&. اگر فضای خالی هیپ به زیر این مقدار کاهش یابد، هیپ گسترش خواهد یافت\&. به‌طور پیش‌فرض، این مقدار روی ۴۰٪ تنظیم شده است\&. .sp مثال زیر نحوه تنظیم حداقل نسبت فضای خالی هیپ به ۲۵٪ را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:MinHeapFreeRatio=25\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:NewRatio=\fIratio\fR .RS 4 نسبت میان اندازه نسل جوان (young generation) و نسل کهن (old generation) را تعیین می‌کند\&. به‌طور پیش‌فرض، این گزینه روی ۲ تنظیم شده است\&. مثال زیر نحوه تنظیم نسبت نسل جوان به کهن را به ۱ نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:NewRatio=1\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:NewSize=\fIsize\fR .RS 4 اندازه اولیه (به بایت) هیپ را برای نسل جوان (nursery) تعیین می‌کند\&. نویسه \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مگابایت، و \fBg\fR یا \fBG\fR را برای گیگابایت به انتهای مقدار اضافه کنید\&. .sp ناحیه نسل جوان در هیپ برای اشیاء جدید استفاده می‌شود\&. فرآیند GC در این ناحیه با بسامد بیشتری نسبت به سایر نواحی اجرا می‌شود\&. اگر اندازه نسل جوان بیش از حد کم باشد، تعداد زیادی GC کوچک (minor GC) انجام خواهد شد\&. اگر اندازه بیش از حد بزرگ باشد، تنها GCهای کامل (full GC) اجرا می‌شوند که تکمیل آن‌ها ممکن است زمان زیادی طول بکشد\&. شرکت Oracle توصیه می‌کند که اندازه نسل جوان را بین یک‌دوم تا یک‌چهارم اندازه کلی هیپ نگه دارید\&. .sp مثال‌های زیر نحوه تعیین اندازه اولیه نسل جوان به ۲۵۶ مگابایت را با واحدهای مختلف نشان می‌دهند: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:NewSize=256m\fR \fB\-XX:NewSize=262144k\fR \fB\-XX:NewSize=268435456\fR .fi .if n \{\ .RE .\} گزینه \fB\-XX:NewSize\fR معادل \fB\-Xmn\fR است\&. .RE .PP \-XX:ParallelGCThreads=\fIthreads\fR .RS 4 تعداد ریسه‌های (threads) مورد استفاده برای زباله‌روبی موازی در نسل‌های جوان و کهن را تعیین می‌کند\&. مقدار پیش‌فرض به تعداد پردازنده‌های موجود برای JVM بستگی دارد\&. .sp برای مثال، جهت تنظیم تعداد ریسه‌های GC موازی به ۲، گزینه زیر را مشخص کنید: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:ParallelGCThreads=2\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:+ParallelRefProcEnabled .RS 4 پردازش موازی ارجاعات را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .RE .PP \-XX:+PrintAdaptiveSizePolicy .RS 4 چاپ اطلاعات مربوط به اندازه‌بندی تطبیقی نسل‌ها را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .RE .PP \-XX:+PrintGC .RS 4 چاپ پیام‌ها در هنگام هر GC را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .RE .PP \-XX:+PrintGCApplicationConcurrentTime .RS 4 چاپ میزان زمان سپری‌شده پس از آخرین توقف (برای مثال، توقف GC) را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .RE .PP \-XX:+PrintGCApplicationStoppedTime .RS 4 چاپ مدت‌زمان طول کشیدن توقف (برای مثال، توقف GC) را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .RE .PP \-XX:+PrintGCDateStamps .RS 4 چاپ برچسب تاریخ در هنگام هر GC را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .RE .PP \-XX:+PrintGCDetails .RS 4 چاپ پیام‌های تفصیلی در هنگام هر GC را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .RE .PP \-XX:+PrintGCTaskTimeStamps .RS 4 چاپ برچسب‌های زمانی برای هر وظیفه از ریسه‌های کارگر GC را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .RE .PP \-XX:+PrintGCTimeStamps .RS 4 چاپ برچسب‌های زمانی در هنگام هر GC را فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .RE .PP \-XX:+PrintStringDeduplicationStatistics .RS 4 آمار تفصیلی حذف رشته‌های تکراری (deduplication) را چاپ می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. به گزینه \fB\-XX:+UseStringDeduplication\fR مراجعه کنید\&. .RE .PP \-XX:+PrintTenuringDistribution .RS 4 چاپ اطلاعات سن ارتقا (tenuring age) را فعال می‌کند\&. در ادامه مثالی از خروجی آورده شده است: .sp .if n \{\ .RS 4 .\} .nf \fBDesired survivor size 48286924 bytes, new threshold 10 (max 10)\fR \fB\- age 1: 28992024 bytes, 28992024 total\fR \fB\- age 2: 1366864 bytes, 30358888 total\fR \fB\- age 3: 1425912 bytes, 31784800 total\fR \fB\&.\&.\&.\fR .fi .if n \{\ .RE .\} اشیاء با سن ۱ (Age 1) جوان‌ترین بازماندگان هستند (آن‌ها پس از پاک‌سازی پیشین ایجاد شده‌اند، در آخرین پاک‌سازی جان سالم به در برده‌اند و از فضای eden به فضای survivor منتقل شده‌اند)\&. اشیاء با سن ۲ از دو دوره پاک‌سازی نجات یافته‌اند (طی دومین پاک‌سازی، از یک فضای survivor به فضای بعدی کپی شده‌اند)\&. و به همین ترتیب ادامه می‌یابد\&. .RE.sp در مثال پیشین، 28 992 024 بایت از یک scavenge جان سالم به در برده و از eden به فضای survivor کپی شدند، 1 366 864 بایت توسط اشیاء با سن 2 اشغال شده است، و غیره\&. مقدار سوم در هر سطر، اندازهٔ تجمعی اشیاء با سن n یا کمتر است\&. .sp به‌طور پیش‌فرض، این گزینه غیرفعال است\&. .RE .PP \-XX:+ScavengeBeforeFullGC .RS 4 اجرای GC روی نسل جوان را پیش از هر full GC فعال می‌کند\&. این گزینه به‌طور پیش‌فرض فعال است\&. شرکت Oracle توصیه می‌کند که آن را \fIغیرفعال نکنید\fR، زیرا پاکسازی نسل جوان پیش از یک full GC می‌تواند تعداد اشیاء قابل دسترسی از فضای نسل قدیم به فضای نسل جوان را کاهش دهد\&. برای غیرفعال کردن GC روی نسل جوان پیش از هر full GC، گزینهٔ \fB\-XX:\-ScavengeBeforeFullGC\fR را مشخص کنید\&. .RE .PP \-XX:SoftRefLRUPolicyMSPerMB=\fItime\fR .RS 4 مدت زمانی (به میلی‌ثانیه) را تعیین می‌کند که یک شیء با ارجاع نرم (softly reachable) پس از آخرین باری که به آن ارجاع داده شده است، در heap فعال نگه‌داشته می‌شود\&. مقدار پیش‌فرض، یک ثانیه طول عمر به ازای هر مگابایت آزاد در heap است\&. گزینهٔ \fB\-XX:SoftRefLRUPolicyMSPerMB\fR مقادیر صحیحی را می‌پذیرد که نشان‌دهندهٔ میلی‌ثانیه به ازای هر یک مگابایت از اندازهٔ فعلی heap (برای Java HotSpot Client VM) یا حداکثر اندازهٔ ممکن heap (برای Java HotSpot Server VM) هستند\&. این تفاوت به این معنی است که Client VM ترجیح می‌دهد ارجاع‌های نرم را پاکسازی کند تا اینکه اندازهٔ heap را افزایش دهد، در حالی که Server VM ترجیح می‌دهد اندازهٔ heap را افزایش دهد تا اینکه ارجاع‌های نرم را پاکسازی کند\&. در مورد اخیر، مقدار گزینهٔ \fB\-Xmx\fR تأثیر بسزایی بر سرعت جمع‌آوری زبالهٔ ارجاع‌های نرم دارد\&. .sp مثال زیر نحوهٔ تنظیم این مقدار را روی 2\&.5 ثانیه نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:SoftRefLRUPolicyMSPerMB=2500\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:StringDeduplicationAgeThreshold=\fIthreshold\fR .RS 4 اشیاء \fBString\fR که به سن مشخص‌شده می‌رسند، به عنوان نامزدهایی برای deduplication (حذف داده‌های تکراری) در نظر گرفته می‌شوند\&. سن یک شیء معیاری از دفعاتی است که از فرایند جمع‌آوری زباله جان سالم به در برده است\&. این موضوع گاهی ارتقا به دورهٔ ماندگاری (tenuring) نامیده می‌شود؛ گزینهٔ \fB\-XX:+PrintTenuringDistribution\fR را ببینید\&. توجه داشته باشید اشیاء \fBString\fR که پیش از رسیدن به این سن به یک ناحیهٔ قدیمی در heap ارتقا می‌یابند، همواره کاندید deduplication محسوب می‌شوند\&. مقدار پیش‌فرض برای این گزینه \fB3\fR است\&. گزینهٔ \fB\-XX:+UseStringDeduplication\fR را ببینید\&. .RE .PP \-XX:SurvivorRatio=\fIratio\fR .RS 4 نسبت میان اندازهٔ فضای eden و اندازهٔ فضای survivor را تنظیم می‌کند\&. به‌طور پیش‌فرض، این گزینه روی 8 تنظیم شده است\&. مثال زیر نحوهٔ تنظیم نسبت فضای eden/survivor روی 4 را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:SurvivorRatio=4\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:TargetSurvivorRatio=\fIpercent\fR .RS 4 درصد مورد نظر از فضای survivor (از 0 تا 100) را که پس از young garbage collection استفاده می‌شود، تنظیم می‌کند\&. به‌طور پیش‌فرض، این گزینه روی 50% تنظیم شده است\&. .sp مثال زیر نحوهٔ تنظیم نسبت هدف فضای survivor به 30% را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:TargetSurvivorRatio=30\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:TLABSize=\fIsize\fR .RS 4 اندازهٔ اولیه (به بایت) یک بافر تخصیص محلی رشته (TLAB) را تعیین می‌کند\&. حرف \fBk\fR یا \fBK\fR را برای مشخص کردن کیلوبایت، \fBm\fR یا \fBM\fR را برای مگابایت، و \fBg\fR یا \fBG\fR را برای گیگابایت ضمیمه کنید\&. اگر این گزینه روی 0 تنظیم شود، JVM اندازهٔ اولیه را به‌طور خودکار انتخاب می‌کند\&. .sp مثال زیر نحوهٔ تنظیم اندازهٔ اولیهٔ TLAB به 512 کیلوبایت را نشان می‌دهد: .sp .if n \{\ .RS 4 .\} .nf \fB\-XX:TLABSize=512k\fR .fi .if n \{\ .RE .\} .RE .PP \-XX:+UseAdaptiveSizePolicy .RS 4 استفاده از تعیین اندازهٔ تطبیقی نسل‌ها را فعال می‌کند\&. این گزینه به‌طور پیش‌فرض فعال است\&. برای غیرفعال کردن اندازه‌بندی تطبیقی نسل‌ها، \fB\-XX:\-UseAdaptiveSizePolicy\fR را مشخص کرده و اندازهٔ استخر تخصیص حافظه را به‌طور صریح تنظیم کنید (گزینهٔ \fB\-XX:SurvivorRatio\fR را ببینید)\&. .RE .PP \-XX:+UseCMSInitiatingOccupancyOnly .RS 4 استفاده از مقدار اشغال حافظه را به عنوان تنها معیار برای شروع جمع‌آور CMS فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و ممکن است از معیارهای دیگری استفاده شود\&. .RE .PP \-XX:+UseConcMarkSweepGC .RS 4 استفاده از جمع‌آور زبالهٔ CMS را برای نسل قدیم فعال می‌کند\&. Oracle توصیه می‌کند زمانی که الزامات تأخیر برنامه توسط جمع‌آور زبالهٔ توان‌محور (\fB\-XX:+UseParallelGC\fR) برآورده نمی‌شود، از جمع‌آور زبالهٔ CMS استفاده کنید\&. جمع‌آور زبالهٔ G1 (\fB\-XX:+UseG1GC\fR) گزینهٔ جایگزین دیگری است\&. .sp به‌طور پیش‌فرض، این گزینه غیرفعال است و جمع‌آور بر اساس پیکربندی ماشین و نوع JVM به‌طور خودکار انتخاب می‌شود\&. با فعال شدن این گزینه، گزینهٔ \fB\-XX:+UseParNewGC\fR به‌طور خودکار تنظیم می‌شود و نباید آن را غیرفعال کنید، زیرا ترکیب گزینه‌های زیر در JDK 8 منسوخ شده است: \fB\-XX:+UseConcMarkSweepGC \-XX:\-UseParNewGC\fR\&. .RE .PP \-XX:+UseG1GC .RS 4 استفاده از جمع‌آور زبالهٔ garbage\-first (G1) را فعال می‌کند\&. این یک جمع‌آور زبالهٔ مناسب سرور است که برای ماشین‌های چندپردازنده‌ای با حجم زیادی حافظهٔ RAM هدف‌گذاری شده است\&. این جمع‌آور با احتمال بالایی به اهداف زمان مکث GC دست می‌یابد، در حالی که توان عملیاتی مناسبی را حفظ می‌کند\&. جمع‌آور G1 برای برنامه‌هایی توصیه می‌شود که نیازمند heap بزرگ (اندازه‌های حدود 6 گیگابایت یا بزرگ‌تر) همراه با الزامات تأخیر محدود GC (زمان مکث پایدار و قابل پیش‌بینی زیر 0\&.5 ثانیه) هستند\&. .sp به‌طور پیش‌فرض، این گزینه غیرفعال است و جمع‌آور بر اساس پیکربندی ماشین و نوع JVM به‌طور خودکار انتخاب می‌شود\&. .RE .PP \-XX:+UseGCOverheadLimit .RS 4 استفاده از سیاستی را فعال می‌کند که نسبت زمان صرف‌شده توسط JVM برای GC را پیش از پرتاب استثنای \fBOutOfMemoryError\fR محدود می‌کند\&. این گزینه به‌طور پیش‌فرض فعال است و اگر بیش از 98% از کل زمان صرف جمع‌آوری زباله شود و کمتر از 2% از heap بازیابی گردد، GC موازی یک \fBOutOfMemoryError\fR پرتاب خواهد کرد\&. هنگامی که heap کوچک است، این ویژگی می‌تواند برای جلوگیری از اجرای طولانی‌مدت برنامه‌ها بدون پیشرفت یا با پیشرفت ناچیز به کار رود\&. برای غیرفعال کردن این گزینه، \fB\-XX:\-UseGCOverheadLimit\fR را مشخص کنید\&. .RE .PP \-XX:+UseNUMA .RS 4 بهینه‌سازی کارایی برنامه را روی ماشینی با معماری حافظه غیریکنواخت (NUMA) از طریق افزایش استفادهٔ برنامه از حافظه با تأخیر کمتر فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و هیچ بهینه‌سازی برای NUMA انجام نمی‌شود\&. این گزینه تنها زمانی در دسترس است که از جمع‌آور زبالهٔ موازی (\fB\-XX:+UseParallelGC\fR) استفاده شود\&. .RE .PP \-XX:+UseParallelGC .RS 4 استفاده از جمع‌آور زبالهٔ parallel scavenge (که با نام جمع‌آور توان عملیاتی یا throughput نیز شناخته می‌شود) را فعال می‌کند تا با بهره‌گیری از چندین پردازنده، کارایی برنامهٔ شما را بهبود بخشد\&. .sp به‌طور پیش‌فرض، این گزینه غیرفعال است و جمع‌آور بر اساس پیکربندی ماشین و نوع JVM به‌طور خودکار انتخاب می‌شود\&. اگر این گزینه فعال باشد، گزینهٔ \fB\-XX:+UseParallelOldGC\fR نیز به‌طور خودکار فعال می‌شود، مگر اینکه آن را به صراحت غیرفعال کنید\&. .RE .PP \-XX:+UseParallelOldGC .RS 4 استفاده از جمع‌آور زبالهٔ موازی را برای full GCها فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. فعال کردن آن به‌طور خودکار گزینهٔ \fB\-XX:+UseParallelGC\fR را فعال می‌کند\&. .RE .PP \-XX:+UseParNewGC .RS 4 استفاده از رشته‌های موازی را برای جمع‌آوری در نسل جوان فعال می‌کند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است\&. هنگامی که گزینهٔ \fB\-XX:+UseConcMarkSweepGC\fR را تنظیم می‌کنید، به‌طور خودکار فعال می‌شود\&. استفاده از گزینهٔ \fB\-XX:+UseParNewGC\fR بدون گزینهٔ \fB\-XX:+UseConcMarkSweepGC\fR در JDK 8 منسوخ شده است\&. .RE.PP \-XX:+UseSerialGC .RS 4 استفاده از زباله‌روب ترتیبی (serial garbage collector) را فعال می‌کند\&. این گزینه عموماً بهترین انتخاب برای برنامه‌های کوچک و ساده‌ای است که به هیچ قابلیت ویژه‌ای از فرایند زباله‌روبی نیاز ندارند\&. به‌طور پیش‌فرض، این گزینه غیرفعال است و زباله‌روب به‌طور خودکار بر اساس پیکربندی ماشین و نوع JVM انتخاب می‌شود\&. .RE .PP \-XX:+UseSHM .RS 4 در لینوکس، به JVM امکان می‌دهد تا از حافظه اشتراکی (shared memory) برای راه‌اندازی صفحه‌های بزرگ (large pages) استفاده کند\&. .sp برای اطلاعات بیشتر، بخش «Large Pages» را ببینید\&. .RE .PP \-XX:+UseStringDeduplication .RS 4 یکتاسازی رشته‌ها (string deduplication) را فعال می‌کند\&. این گزینه به‌طور پیش‌فرض غیرفعال است\&. برای استفاده از این گزینه، باید زباله‌روب G1 (garbage\-first) را فعال کنید\&. گزینه \fB\-XX:+UseG1GC\fR را ببینید\&. .sp \fIیکتاسازی رشته‌ها\fR با بهره‌گیری از این واقعیت که بسیاری از اشیاء \fBString\fR یکسان هستند، ردپای حافظه اشیاء \fBString\fR را روی Java heap کاهش می‌دهد\&. به جای اینکه هر شیء \fBString\fR به آرایه نویسه‌ای مخصوص به خود اشاره کند، اشیاء یکسان \fBString\fR می‌توانند به یک آرایه نویسه‌ای مشترک اشاره کنند و آن را به اشتراک بگذارند\&. .RE .PP \-XX:+UseTLAB .RS 4 استفاده از بلوک‌های تخصیص محلی نخ (TLABها) را در فضای نسل جوان (young generation) فعال می‌کند\&. این گزینه به‌طور پیش‌فرض فعال است\&. برای غیرفعال کردن استفاده از TLABها، گزینه \fB\-XX:\-UseTLAB\fR را مشخص کنید\&. .RE .SS "گزینه‌های منسوخ و حذف‌شده (Deprecated and Removed Options)" .PP این گزینه‌ها در انتشار پیشین گنجانده شده بودند، اما از آن زمان به بعد غیرضروری تشخیص داده شده‌اند\&. .PP \-Xincgc .RS 4 زباله‌روبی افزایشی (incremental garbage collection) را فعال می‌کند\&. این گزینه در JDK 8 بدون هیچ جایگزینی منسوخ شد\&. .RE .PP \-Xrun\fIlibname\fR .RS 4 کتابخانه اشکال‌زدایی/تحلیل کارایی (debugging/profiling) مشخص‌شده را بارگذاری می‌کند\&. این گزینه با گزینه \fB\-agentlib\fR جایگزین شده است\&. .RE .PP \-XX:CMSIncrementalDutyCycle=\fIpercent\fR .RS 4 درصد زمانی (۰ تا ۱۰۰) بین زباله‌روبی‌های جزئی که زباله‌روب همگام اجازه اجرا دارد را تنظیم می‌کند\&. این گزینه در JDK 8 به دنبال منسوخ شدن گزینه \fB\-XX:+CMSIncrementalMode\fR بدون جایگزین منسوخ شد\&. .RE .PP \-XX:CMSIncrementalDutyCycleMin=\fIpercent\fR .RS 4 درصد زمانی (۰ تا ۱۰۰) بین زباله‌روبی‌های جزئی را تنظیم می‌کند که در صورت فعال بودن \fB\-XX:+CMSIncrementalPacing\fR به عنوان کران پایین چرخه کارکرد (duty cycle) در نظر گرفته می‌شود\&. این گزینه در JDK 8 به دنبال منسوخ شدن گزینه \fB\-XX:+CMSIncrementalMode\fR بدون جایگزین منسوخ شد\&. .RE .PP \-XX:+CMSIncrementalMode .RS 4 حالت افزایشی را برای زباله‌روب CMS فعال می‌کند\&. این گزینه در JDK 8 همراه با سایر گزینه‌هایی که با \fBCMSIncremental\fR آغاز می‌شوند، بدون جایگزین منسوخ شد\&. .RE .PP \-XX:CMSIncrementalOffset=\fIpercent\fR .RS 4 درصد زمانی (۰ تا ۱۰۰) را تعیین می‌کند که چرخه کارکرد حالت افزایشی به همان میزان در بازه بین زباله‌روبی‌های جزئی به سمت راست منتقل (شیفت) می‌شود\&. این گزینه در JDK 8 به دنبال منسوخ شدن گزینه \fB\-XX:+CMSIncrementalMode\fR بدون جایگزین منسوخ شد\&. .RE .PP \-XX:+CMSIncrementalPacing .RS 4 تنظیم خودکار چرخه کارکرد حالت افزایشی را بر اساس آمارهای جمع‌آوری‌شده در حین اجرای JVM فعال می‌کند\&. این گزینه در JDK 8 به دنبال منسوخ شدن گزینه \fB\-XX:+CMSIncrementalMode\fR بدون جایگزین منسوخ شد\&. .RE .PP \-XX:CMSIncrementalSafetyFactor=\fIpercent\fR .RS 4 درصد زمانی (۰ تا ۱۰۰) را تعیین می‌کند که جهت رعایت احتیاط در هنگام محاسبه چرخه کارکرد لحاظ می‌شود\&. این گزینه در JDK 8 به دنبال منسوخ شدن گزینه \fB\-XX:+CMSIncrementalMode\fR بدون جایگزین منسوخ شد\&. .RE .PP \-XX:CMSInitiatingPermOccupancyFraction=\fIpercent\fR .RS 4 درصد اشغال فضای نسل ماندگار (permanent generation) از ۰ تا ۱۰۰ را که در آن یک دوره GC آغاز می‌شود تعیین می‌کند\&. این گزینه در JDK 8 بدون جایگزین منسوخ شد\&. .RE .PP \-XX:MaxPermSize=\fIsize\fR .RS 4 حداکثر اندازه فضای نسل ماندگار (permanent generation) را (بر حسب بایت) تعیین می‌کند\&. این گزینه در JDK 8 منسوخ شده و با گزینه \fB\-XX:MaxMetaspaceSize\fR جایگزین گردید\&. .RE .PP \-XX:PermSize=\fIsize\fR .RS 4 میزان فضای تخصیص‌یافته به نسل ماندگار (permanent generation) را (بر حسب بایت) تعیین می‌کند که در صورت فراتر رفتن از آن، فرایند زباله‌روبی آغاز می‌شود\&. این گزینه در JDK 8 منسوخ شده و با گزینه \fB\-XX:MetaspaceSize\fR جایگزین گردید\&. .RE .PP \-XX:+UseSplitVerifier .RS 4 تفکیک فرایند راستی‌آزمایی (verification) را فعال می‌کند\&. این گزینه در انتشار‌های قبلی به‌طور پیش‌فرض فعال بود و راستی‌آزمایی به دو مرحله تفکیک می‌شد: ارجاع نوع (توسط کامپایلر) و بررسی نوع (توسط محیط زمان اجرای JVM)\&. این گزینه در JDK 8 منسوخ شده است و راستی‌آزمایی اکنون به‌طور پیش‌فرض تفکیک می‌شود و راهی برای غیرفعال کردن آن وجود ندارد\&. .RE .PP \-XX:+UseStringCache .RS 4 ذخیره‌سازی موقت (caching) رشته‌های مکرراً تخصیص‌یافته را فعال می‌کند\&. این گزینه از JDK 8 بدون هیچ جایگزینی حذف شد\&. .RE.SH "مثال‌های تنظیم عملکرد (PERFORMANCE TUNING EXAMPLES)" .PP مثال‌های زیر نحوه استفاده از پرچم‌های آزمایشی تنظیم عملکرد را برای بهینه‌سازی توان عملیاتی یا دستیابی به زمان پاسخ‌دهی کمتر نشان می‌دهند\&. .PP \fBمثال ۱ \fRتنظیم برای توان عملیاتی بالاتر .RS 4 .sp .if n \{\ .RS 4 .\} .nf \fBjava \-d64 \-server \-XX:+AggressiveOpts \-XX:+UseLargePages \-Xmn10g \-Xms26g \-Xmx26g\fR .fi .if n \{\ .RE .\} .RE .PP \fBمثال ۲ \fRتنظیم برای زمان پاسخ‌دهی کمتر .RS 4 .sp .if n \{\ .RS 4 .\} .nf \fBjava \-d64 \-XX:+UseG1GC \-Xms26g Xmx26g \-XX:MaxGCPauseMillis=500 \-XX:+PrintGCTimeStamp\fR .fi .if n \{\ .RE .\} .RE .SH "صفحات بزرگ (LARGE PAGES)" .PP صفحات بزرگ (Large pages) که با عنوان huge pages نیز شناخته می‌شوند، صفحاتی از حافظه هستند که به طور قابل توجهی از اندازه استاندارد صفحه حافظه (که بسته به پردازنده و سیستم‌عامل متفاوت است) بزرگ‌ترند\&. صفحات بزرگ بافرهای ترجمه آدرس پردازنده (Translation\-Lookaside Buffers) را بهینه‌سازی می‌کنند\&. .PP یک بافر ترجمه آدرس (Translation\-Lookaside Buffer یا TLB) یک حافظه نهان (کش) برای ترجمه صفحه است که آخرین ترجمه‌های استفاده‌شده از نشانی مجازی به فیزیکی را نگه‌داری می‌کند\&. حافظه TLB یک منبع سیستمی کمیاب است\&. خطای نبود در TLB (یا TLB miss) می‌تواند هزینه‌بر باشد، زیرا پردازنده باید از جدول سلسله‌مراتبی صفحات بخواند که ممکن است به چندین بار دسترسی به حافظه نیاز داشته باشد\&. با استفاده از اندازه صفحه حافظه بزرگ‌تر، هر مدخل منفرد در TLB می‌تواند محدوده حافظه بزرگ‌تری را پوشش دهد\&. در نتیجه، فشار کمتری بر TLB وارد خواهد شد و برنامه‌های کاربردی با مصرف حافظه سنگین ممکن است کارایی بهتری داشته باشند\&. .PP با این حال، حافظه با صفحات بزرگ می‌تواند اثر منفی بر عملکرد سیستم بگذارد\&. به عنوان مثال، هنگامی که مقدار زیادی از حافظه توسط یک برنامه پین (pin) یا تثبیت می‌شود، ممکن است کمبود حافظه معمولی ایجاد کند و باعث صفحه‌بندی (paging) بیش از حد در سایر برنامه‌ها شده و کل سیستم را کند سازد\&. همچنین، سیستمی که برای مدتی طولانی فعال بوده است ممکن است دچار تکه‌تکه‌شدن (fragmentation) بیش از حد حافظه شود که امکان رزرو حافظه کافی برای صفحات بزرگ را ناممکن می‌سازد\&. در چنین شرایطی، سیستم‌عامل یا JVM به استفاده از صفحات معمولی برمی‌گردند\&. .SS "پشتیبانی از صفحات بزرگ (Large Pages Support)" .PP سیستم‌عامل‌های Solaris و Linux از صفحات بزرگ پشتیبانی می‌کنند\&. .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBSolaris\fR .RS 4 .PP سیستم‌عامل Solaris 9 و نسخه‌های جدیدتر شامل قابلیت Multiple Page Size Support (MPSS) هستند؛ هیچ پیکربندی اضافی لازم نیست\&. ببینید: \&. .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBLinux\fR .RS 4 .PP هسته 2\&.6 از صفحات بزرگ پشتیبانی می‌کند\&. برخی توزیع‌کنندگان این کد را به انتشارهای مبتنی بر 2\&.4 خود بک‌پورت (backport) کرده‌اند\&. برای بررسی اینکه آیا سیستم شما می‌تواند از حافظه با صفحات بزرگ پشتیبانی کند یا خیر، دستور زیر را امتحان کنید: .sp .if n \{\ .RS 4 .\} .nf \fB# cat /proc/meminfo | grep Huge\fR \fBHugePages_Total: 0\fR \fBHugePages_Free: 0\fR \fBHugepagesize: 2048 kB\fR .fi .if n \{\ .RE .\} .PP اگر خروجی، سه متغیر «Huge» را نشان دهد، سیستم شما می‌تواند از حافظه صفحات بزرگ پشتیبانی کند اما نیاز به پیکربندی دارد\&. اگر این دستور چیزی چاپ نکرد، سیستم شما از صفحات بزرگ پشتیبانی نمی‌کند\&. برای پیکربندی سیستم جهت استفاده از حافظه صفحات بزرگ، به عنوان کاربر \fBroot\fR وارد شوید و سپس این مراحل را دنبال کنید: .sp .RS 4 .ie n \{\ \h'-04' 1.\h'+01'\c .\} .el \{\ .sp -1 .IP " 1." 4.2 .\} اگر از گزینه \fB\-XX:+UseSHM\fR (به جای \fB\-XX:+UseHugeTLBFS\fR) استفاده می‌کنید، مقدار \fBSHMMAX\fR را افزایش دهید\&. این مقدار باید بزرگ‌تر از اندازه Java heap باشد\&. روی سیستمی با ۴ گیگابایت حافظه فیزیکی RAM (یا کمتر)، دستور زیر تمام حافظه را قابل اشتراک‌گذاری می‌کند: .sp .if n \{\ .RS 4 .\} .nf \fB# echo 4294967295 > /proc/sys/kernel/shmmax\fR .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04' 2.\h'+01'\c .\} .el \{\ .sp -1 .IP " 2." 4.2 .\} اگر از گزینه \fB\-XX:+UseSHM\fR یا \fB\-XX:+UseHugeTLBFS\fR استفاده می‌کنید، تعداد صفحات بزرگ را مشخص کنید\&. در مثال زیر، ۳ گیگابایت از یک سیستم ۴ گیگابایتی برای صفحات بزرگ رزرو شده است (با فرض اندازه صفحه بزرگ برابر ۲۰۴۸ کیلوبایت، در این صورت 3 GB = 3 * 1024 MB = 3072 MB = 3072 * 1024 kB = 3145728 kB و 3145728 kB / 2048 kB = 1536 خواهد بود): .sp .if n \{\ .RS 4 .\} .nf \fB# echo 1536 > /proc/sys/vm/nr_hugepages\fR .fi .if n \{\ .RE .\} .RE .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBنکته\fR .ps -1 .br .TS allbox tab(:); l. T{ .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} توجه داشته باشید که مقادیر موجود در \fB/proc\fR پس از راه‌اندازی مجدد (reboot) سیستم بازنشانی می‌شوند، بنابراین ممکن است بخواهید آن‌ها را در یک اسکریپت راه‌اندازی (برای مثال \fBrc\&.local\fR یا \fBsysctl\&.conf\fR) تنظیم کنید\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} اگر پارامترهای هسته سیستم‌عامل \fB/proc/sys/kernel/shmmax\fR یا \fB/proc/sys/vm/nr_hugepages\fR را پیکربندی کنید (یا اندازه آن‌ها را تغییر دهید)، پردازه‌های Java ممکن است علاوه بر Java heap، برای بخش‌های دیگر نیز صفحات بزرگ تخصیص دهند\&. این مراحل می‌توانند برای بخش‌های زیر صفحات بزرگ تخصیص دهند: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Java heap .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Code cache .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} ساختار داده بیت‌مپ نشانه‌گذاری (marking bitmap) برای parallel GC .RE .sp در نتیجه، اگر پارامتر \fBnr_hugepages\fR را به اندازه Java heap تنظیم کنید، ممکن است JVM در تخصیص نواحی code cache بر روی صفحات بزرگ با خطا مواجه شود، زیرا اندازه این نواحی بسیار بزرگ است\&. .RE T} .TE.sp 1 .sp .5v .RE .RE .SH "وضعیت خروج (EXIT STATUS)" .PP مقادیر خروج زیر معمولاً هنگامی توسط اجراکننده بازگردانده می‌شوند که اجراکننده با آرگومان‌های نادرست فراخوانی شود، خطاهای جدی رخ دهند، یا استثناهایی توسط JVM پرتاب شوند\&. با این حال، یک برنامه Java می‌تواند با استفاده از فراخوانی APIِ \fBSystem\&.exit(exitValue)\fR\& هر مقداری را بازگرداند\&. این مقادیر عبارتند از: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB0\fR: اتمام موفقیت‌آمیز .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fB>0\fR: خطایی رخ داده است .RE .SH "همچنین ببینید (SEE ALSO)" .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} javac(1) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} jdb(1) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} jar(1) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} jstat(1) .RE .br 'pl 8.5i 'bp