Apa saja parameter -Xms dan -Xmx saat memulai JVM?

1008

Tolong jelaskan penggunaan Xmsdan Xmxparameter dalam JVM. Apa nilai default untuk mereka?

Pankaj
sumber
2
saat menggunakannya -Xmx128m -Xms64mdapat memuncak di sekitar 275mRES mem, tetapi saat menggunakannya -Xmx128m -Xms128mdapat memuncak di sekitar 550mRES mem Menggunakan Java 8 Hal terbaik adalah menekankan GC dan melihat apa yang terjadi ...
Christophe Roussy

Jawaban:

1360

Bendera Xmxmenentukan kumpulan alokasi memori maksimum untuk mesin virtual Java (JVM), sementara Xmsmenentukan kumpulan alokasi memori awal.

Ini berarti bahwa JVM Anda akan dimulai dengan Xmsjumlah memori dan akan dapat menggunakan Xmxjumlah memori maksimum . Misalnya, memulai JVM seperti di bawah ini akan memulainya dengan 256 MB memori dan akan memungkinkan proses untuk menggunakan hingga 2048 MB memori:

java -Xms256m -Xmx2048m

Bendera memori juga dapat ditentukan dalam berbagai ukuran, seperti kilobyte, megabita, dan sebagainya.

-Xmx1024k
-Xmx512m
-Xmx8g

The Xmsflag tidak memiliki nilai default, dan Xmxbiasanya memiliki nilai default dari 256 MB. Penggunaan umum untuk bendera ini adalah ketika Anda menemukan a java.lang.OutOfMemoryError.

Saat menggunakan pengaturan ini, perlu diingat bahwa pengaturan ini adalah untuk tumpukan JVM , dan bahwa JVM dapat / akan menggunakan lebih banyak memori daripada hanya ukuran yang dialokasikan untuk tumpukan. Dari dokumentasi Oracle :

Perhatikan bahwa JVM menggunakan lebih banyak memori daripada hanya tumpukan. Misalnya metode Java, tumpukan ulir dan pegangan asli dialokasikan dalam memori yang terpisah dari heap, serta struktur data internal JVM.

hexacyanide
sumber
12
Begitu juga halnya ketika penggunaan memori melebihi Xmx kita mendapatkan jvm dari pengecualian memori.
Pankaj
59
Ya itu benar. Ketika mencoba melebihi itu, meskipun mungkin mengumpulkan sampah untuk mencoba membebaskan memori yang cukup. Jika masih belum cukup memori untuk memenuhi permintaan dan tumpukan sudah mencapai ukuran maksimum, OutOfMemoryErrorakan muncul.
David Conrad
2
Ketika saya menggunakan kerangka ForkJoin komputer saya crash karena itu mengambil terlalu banyak memori. Apakah mungkin pada OpenJDK tidak ada batasan pada memori secara default?
Christophe De Troyer
6
Seperti yang diklarifikasi pada Apakah java -Xmx 1G berarti 1 GB atau 2 ^ 30 B? , cara pasti untuk mengungkapkan berapa banyak memori yang Anda mulai dengan -Xms256m"256 MiB", bukan "256 MB", karena ia menggunakan kekuatan biner daripada kekuatan sepuluh. Lihat en.wikipedia.org/wiki/Binary_prefix . Selain itu, karena beberapa ruang yang tidak dapat digunakan disisihkan untuk kumpulan tambahan ruang Survivor, jumlah memori yang sebenarnya tersedia menurut Runtime.getRuntime().maxMemory()kurang dari nilai yang ditentukan melalui
-Xmx
1
Panduan bermanfaat untuk kesalahan umum yang berkaitan dengan ukuran heap: blog.paulgu.com/java/6-common-errors-in-setting-java-heap-size
ctrlplusb
315

Jalankan perintah java -Xdan Anda akan mendapatkan daftar semua -Xopsi:

C:\Users\Admin>java -X
-Xmixed           mixed mode execution (default)
-Xint             interpreted mode execution only
-Xbootclasspath:<directories and zip/jar files separated by ;>
                      set search path for bootstrap classes and resources
-Xbootclasspath/a:<directories and zip/jar files separated by ;>
                      append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by ;>
                      prepend in front of bootstrap class path
-Xdiag            show additional diagnostic messages
-Xnoclassgc       disable class garbage collection
-Xincgc           enable incremental garbage collection
-Xloggc:<file>    log GC status to a file with time stamps
-Xbatch           disable background compilation
-Xms<size>        set initial Java heap size.........................
-Xmx<size>        set maximum Java heap size.........................
-Xss<size>        set java thread stack size
-Xprof            output cpu profiling data
-Xfuture          enable strictest checks, anticipating future default
-Xrs              reduce use of OS signals by Java/VM (see documentation)
-Xcheck:jni       perform additional checks for JNI functions
-Xshare:off       do not attempt to use shared class data
-Xshare:auto      use shared class data if possible (default)
-Xshare:on        require using shared class data, otherwise fail.
-XshowSettings    show all settings and continue
-XshowSettings:all         show all settings and continue
-XshowSettings:vm          show all vm related settings and continue
-XshowSettings:properties  show all property settings and continue
-XshowSettings:locale      show all locale related settings and continue

Opsi -X adalah non-standar dan dapat berubah tanpa pemberitahuan.

Saya harap ini akan membantu Anda memahami Xms, Xmxserta banyak hal lain yang paling penting. :)

Rupesh Yadav
sumber
1
Mempelajari perintah baru hari ini, terima kasih @RupeshYadav
jumping_monkey
18

Anda dapat menentukannya di IDE Anda. Misalnya, untuk Eclipse dalam Konfigurasi Konfigurasiargumen VM . Anda dapat memasukkan -Xmx800m -Xms500msebagai

Masukkan deskripsi gambar di sini

Mehrez BEN MOHAMED
sumber
Di RubyMine di OSX, ada di menu Bantuan> Edit Opsi VM Kustom.
Jon Schneider
8
Ini tidak menjawab pertanyaan. Pertanyaannya adalah tentang untuk apa mereka, bukan bagaimana mengaturnya.
Kapten Man
@Hearen Bagaimana cara tidur di intellij ??
13

Pertanyaannya sendiri sudah dibahas di atas. Hanya menambahkan sebagian dari nilai default.

Sesuai http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

Nilai default Xmx akan tergantung pada platform dan jumlah memori yang tersedia di sistem.

Abhishek Aich
sumber
8
Untuk JVM lain (selain JRockit), lihat posting ini untuk menentukan nilai Xmx / Xms default JVM Anda: stackoverflow.com/questions/4667483/…
Ogre Psalm33
3

Ukuran heap awal -Xms untuk startup, namun, selama proses kerja ukuran heap bisa kurang dari -Xms karena ketidakaktifan pengguna atau iterasi GC. Ini bukan ukuran tumpukan minimal yang diperlukan.

-Xmx ukuran tumpukan maksimal

lazylead
sumber