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


1008

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


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.


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. :)


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


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 ??


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.