Meningkatkan ukuran heap di Jawa

276

Saya bekerja pada server Windows 2003 (64-bit) dengan 8 GB RAM. Bagaimana saya dapat meningkatkan memori tumpukan maksimum? Saya menggunakan -Xmx1500mbendera untuk meningkatkan ukuran tumpukan menjadi 1500 Mb. Dapatkah saya meningkatkan memori tumpukan hingga 75% dari memori fisik (6 GB Heap)?

Sunil
sumber
2
Sudahkah Anda mencoba -Xmx6g? Apakah ini tidak berhasil? Apa yang kamu amati?
oxbow_lakes
2
Saya kira Anda mencoba meningkatkan tumpukan tetapi gagal? Apakah Anda menggunakan JVM 64 bit?
Bart Kiers
Terima kasih atas komentar tetapi ini tidak berhasil
Sunil
Nah - bagaimana Anda tahu itu tidak berfungsi? Apakah JVM tidak memulai?
oxbow_lakes

Jawaban:

327

Anda dapat meningkatkan hingga 4GB pada sistem 32 bit. Jika Anda menggunakan sistem 64 bit, Anda bisa naik lebih tinggi. Tidak perlu khawatir jika Anda salah memilih, jika Anda meminta 5g pada sistem 32 bit java akan mengeluh tentang nilai yang tidak valid dan berhenti.

Seperti yang telah diposting orang lain, gunakan flag cmd-line - mis

java -Xmx6g myprogram

Anda bisa mendapatkan daftar lengkap (atau daftar hampir lengkap, dengan mengetik) java -X.

Steve B.
sumber
16
Sudah pengalaman saya bahwa Jawa ukuran tumpukan yang sebenarnya akan menerima menggunakan VM 32b (pada sistem 32b atau 64b - VM adalah bagian penting, di sini), sekitar 2G. Juga, terkejut Penanya tidak pertama mencari dan menemukan: stackoverflow.com/questions/1596009/... dan: stackoverflow.com/questions/37335/...
wsorenson
2
ah, tentu saja Anda benar - pada sistem 32 bit Anda hanya dapat mengatasi 2 Gb memori.
Steve B.
Apakah perlu untuk tumpukan maksimum dan ukuran tumpukan minimum agar sama?
user1747935
1
Tidak. Tetapi orang biasanya melakukannya karena JVM tidak pernah bisa membuang waktu mengubah ukuran. Keraguan bahwa itu sangat berarti, TBH.
Steve B.
1
@PhilipRego Anda mengaturnya ke apa pun yang Anda inginkan, hingga batas yang dapat ditangani JVM. -Xmx2G mengatur memori Anda menjadi 2G (lihat juga -Xms). Ini tidak mengatakan apa-apa tentang berapa banyak memori yang akan Anda butuhkan.
Steve B.
155

Dimungkinkan untuk meningkatkan ukuran heap yang dialokasikan oleh JVM dengan menggunakan opsi baris perintah Di sini kita memiliki 3 opsi

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

java -Xms16m -Xmx64m ClassName

Pada baris di atas kita dapat mengatur heap minimum menjadi 16mb dan heap maksimum 64mb

Karthik Reddy
sumber
28

Pada JVM 32-bit, ukuran heap terbesar yang secara teoritis dapat Anda atur adalah 4gb. Untuk menggunakan ukuran tumpukan yang lebih besar, Anda perlu menggunakan JVM 64-bit. Coba yang berikut ini:

java -Xmx6144M -d64

Bendera -d64 penting karena ini memberitahu JVM untuk berjalan dalam mode 64-bit.

Kevin
sumber
Terima kasih bos, tapi itu tidak bekerja dalam sistem saya ada beberapa hal lain saya hilang
Sunil
4
Tentukan "tidak bekerja". Apakah itu tidak memulai dan memberi Anda kesalahan? Apakah ini mulai tetapi menggunakan ukuran tumpukan yang berbeda?
Kevin
11

Dimungkinkan untuk meningkatkan heap size yang dialokasikan oleh JVM di eclipse secara langsung di eclipse IDE goto

Jalankan ----> Jalankan Konfigurasi ----> Argumen

Masukkan -Xmx1g (Ini digunakan untuk mengatur ukuran max seperti Xmx256m atau Xmx1g ...... m -> mb g ---> gb)

Karthik Reddy
sumber
3
Hanya untuk menambahkan ini harus menjadi argumen VM (gerhana memberi Anda dua opsi).
Matt Boyle
11

java -d64 -Xms512m -Xmx4g HelloWorld

di mana, -d64: Akan mengaktifkan 64-bit JVM -Xms512m: Akan menetapkan ukuran tumpukan awal sebagai 512 MB -Xmx4g: Akan menetapkan ukuran tumpukan maksimum sebagai 4 GB (di sini nama file java adalah: HelloWorld.java)

Sumit Deshinge
sumber
9

Anda dapat meningkatkan Ukuran Heap dengan melewati JVM parameter -Xms dan -Xmx seperti di bawah ini:

Untuk File Jar:

java -jar -Xms4096M -Xmx6144M jarFilePath.jar

Untuk File Java:

 java -Xms4096M -Xmx6144M ClassName

Parameter di atas meningkatkan InitialHeapSize (-Xms) menjadi 4GB (4096 MB) dan MaxHeapSize (-Xmx) menjadi 6GB (6144 MB).

Tapi, Ukuran Heap Generasi Muda akan tetap sama dan HeapSize tambahan akan ditambahkan ke Ukuran Heap Generasi Lama . Untuk menyamakan ukuran Young Gen Heap dan Old Gen Heap , gunakan -XX: NewRatio = 1 -XX: -GunakanAdaptiveSizePolicy params.

java -jar -Xms4096M -Xmx6144M -XX:NewRatio=1 -XX:-UseAdaptiveSizePolicy pathToJarFile.jar

-XX: NewRatio = Old Gen Heap Ukuran: Young Gen HeapSize (Anda dapat bermain dengan rasio ini untuk mendapatkan rasio yang Anda inginkan).

Sahil Chhabra
sumber
7

Dapatkah saya meningkatkan memori tumpukan hingga 75% dari memori fisik (Heap 6GB).

Ya kamu bisa. Bahkan, Anda bisa menambah lebih dari jumlah memori fisik, jika Anda mau.

Apakah ide yang baik untuk melakukan ini tergantung pada seberapa banyak hal lain yang berjalan di sistem Anda. Secara khusus, jika "set kerja" dari aplikasi dan layanan yang saat ini berjalan secara signifikan melebihi memori fisik yang tersedia, sistem Anda dapat "thrash", menghabiskan banyak waktu untuk memindahkan halaman memori virtual ke dan dari disk. Efek bersihnya adalah sistem menjadi sangat lambat.

Stephen C
sumber
Terima kasih atas komentar Anda Tapi Bagaimana saya bisa meningkatkan. Tolong beri Anda perintah.
Sunil
Coba -Xmx6000m. Seharusnya berfungsi jika Anda menggunakan Java versi 64bit.
Stephen C
3
Apakah Anda yakin menjalankan Java versi 64bit? Pada sistem operasi 64bit?
Stephen C
4

Silakan gunakan perintah di bawah ini untuk mengubah ukuran tumpukan menjadi 6GB

export JAVA_OPTS="-Xms6144m -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=356m -XX:PermSize=256m -XX:MaxPermSize=356m"
Baum mit Augen
sumber
Jika saya memiliki memori 8G di sistem saya dan saya bisa melihat dari task manager yang selalu 70% dari yang digunakan; Apakah ini mungkin untuk mengalokasikan memori 6G ke ukuran tumpukan java?
Reihan_amn
1
@Reihan_amn Ya dan tidak, jika Anda melebihi memori Anda, itu akan pergi ke halaman, yang ada di disk dan sangat lambat. Jika Anda melebihi file halaman maka Anda berada dalam waktu yang buruk.
CodeMonkey
2

Beberapa orang menunjukkan jawaban spesifik untuk ukuran tumpukan dengan opsi jvm dari -Xmsdan -Xms. Saya ingin menunjukkan bahwa ini bukan satu-satunya jenis opsi memori untuk jvm. Khususnya jika Anda mendapatkan tumpukan lebih dari arus, maka Anda ingin meningkatkan ukuran tumpukan dengan menambahkan opsi tambahan seperti -Xss8m.

Untuk masalah ini, opsi jvm dari sesuatu seperti -Xms2g -Xmx6g -Xss8makan menjadi solusi.

Saya membagikan informasi ini ketika pencarian Google saya tentang cara meningkatkan memori jvm membawa saya ke solusi ini, dan solusi tidak bekerja dengan alokasi memori dalam jumlah besar. Setelah saya mengetahui pengaturan khusus untuk apa, saya bisa mencari cara meningkatkan ukuran tumpukan dan menemukan param yang hilang. :) Semoga ini menghemat waktu orang lain, karena itu akan menyelamatkan saya banyak waktu. :)

James Oravec
sumber
2

Ini hanya berfungsi dengan Java versi 64 bit. Buka Control Panel dan klik ikon Java. Pada jendela kecil Java Control Panel, klik pada bilah menu Java dan kemudian klik viewtombol.

Jika Anda memiliki dua platform Java, nonaktifkan versi Java sebelumnya, lalu klik bidang teks parameter Runtime dan tulis -Xmx1024matau kurang dari ukuran RAM. Jangan menambah ukuran tumpukan sama dengan RAM jika tidak, sistem Anda akan macet.

madhu
sumber
Jika Anda membuat ukuran tumpukan sama dengan RAM, sistem tidak akan crash. Sebaliknya, sistem akan mulai paging dan menjadi bagus dan lambat.
DaveTheMinion
0

Iya. Kamu bisa.

Anda dapat meningkatkan memori tumpukan hingga 75% dari memori fisik (Heap 6 GB) atau lebih tinggi.

Karena Anda menggunakan 64bit, Anda dapat meningkatkan ukuran tumpukan ke jumlah yang Anda inginkan. Jika Anda menggunakan 32bit terbatas pada 4GB.

$ java -Xms512m -Xmx6144m JavaApplication

Mengatur Anda dengan ukuran heap awal menjadi 512mb dan heapsize maksimum menjadi 6GB.

Semoga Membantu .. :)

Sarat Chandra
sumber
Ini tampaknya sangat mirip dengan dua jawaban pilihan teratas yang diposting beberapa tahun sebelumnya.
Bernhard Barker
0

Saya punya masalah menjalankan file py dalam kode java saya menggunakan eclipse / STS, mendapatkan PyException karena memori tumpukan jvm tidak mencukupi. Saya telah melakukan perubahan sebagaimana disebutkan di bawah dan saya dapat menyelesaikan masalah ini. Di bawah ini adalah konfigurasi Sistem saya.

masukkan deskripsi gambar di sini

Dan ini adalah perubahan yang saya lakukan di ruang kerja saya dan voila itu berjalan sempurna sekarang.

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

pak lelaki
sumber