Dapatkah seseorang tolong jelaskan apa pilihan JVM ReservedCodeCacheSize
dan InitialCodeCacheSize
yang? Khususnya kapan / mengapa saya ingin mengubahnya? Bagaimana cara memutuskan ukuran yang tepat?
Inilah yang dikatakan dokumen:
-XX: ReservedCodeCacheSize = 32m Ukuran cache kode yang dicadangkan (dalam byte) - ukuran cache kode maksimum. [Solaris 64-bit, amd64, dan -server x86: 2048m; di 1.5.0_06 dan sebelumnya, Solaris 64-bit dan and64: 1024m.]
java
jvm
jvm-hotspot
Raghu
sumber
sumber
Jawaban:
ReservedCodeCacheSize
(danInitialCodeCacheSize
) adalah opsi untuk compiler (just-in-time) dari Java Hotspot VM. Pada dasarnya ini menetapkan ukuran maksimum untuk cache kode kompiler.Cache bisa menjadi penuh, yang menghasilkan peringatan seperti berikut:
Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled. Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize= Code Cache [0x000000010958f000, 0x000000010c52f000, 0x000000010c58f000) total_blobs=15406 nmethods=14989 adapters=362 free_code_cache=835Kb largest_free_block=449792
Jauh lebih buruk jika diikuti oleh
Java HotSpot(TM) Client VM warning: Exception java.lang.OutOfMemoryError occurred dispatching signal SIGINT to handler- the VM may need to be forcibly terminated
.Kapan menyetel opsi ini?
Biasanya Anda tidak akan mengubah nilai ini. Saya pikir nilai default cukup seimbang karena masalah ini hanya terjadi pada kesempatan yang sangat jarang (dalam pengalaman saya).
sumber
Reserved code cache size (in bytes) - maximum code cache size. [Solaris 64-bit, amd64, and -server x86: 48m; in 1.5.0_06 and earlier, Solaris 64-bit and amd64: 1024m.]
Tidak tahu nilai OpenJDK. Peningkatan moderat sudah cukup (pengaturan awal 1024m melampaui kebaikan dan kejahatan).@jeha menjawab semua yang ingin saya ketahui dari pertanyaan ini, selain dari nilai apa yang harus ditetapkan parameternya. Karena saya tidak menulis kode yang saya terapkan, saya tidak memiliki banyak visibilitas ke jejak memori yang dimilikinya.
Namun, Anda dapat menggunakan jconsole untuk melampirkan ke proses java Anda yang sedang berjalan, dan kemudian gunakan tab 'Memori' untuk mengetahui ukuran Cache Kode. Untuk kelengkapan, langkah-langkahnya adalah (lingkungan VM Linux, meskipun saya yakin lingkungan lain serupa):
Sekali lagi, ini mungkin membutuhkan beberapa saat untuk menyegarkan layar, dan kemudian Anda akan melihat sesuatu seperti:
Seperti yang Anda lihat, cache kode saya menggunakan kira-kira 49 MB. Pada titik ini saya masih memiliki default yang menurut dokumentasi (dan @jeha) adalah 48 MB. Pastinya menjadi motivasi besar bagi saya untuk meningkatkan setting!
Ben.
1024 MB secara default mungkin berlebihan, tetapi 48 MB secara default tampaknya kurang dari itu ...
sumber
Pengalaman belajar yang baik dari tim engineering Indeed dan tantangan yang mereka hadapi saat bermigrasi ke jdk 8.
http://engineering.indeedblog.com/blog/2016/09/job-search-web-app-java-8-migration/
Kesimpulan: Jdk 8 membutuhkan lebih banyak cache kode daripada JDK 7
Ukuran codecache default untuk JRE 8 adalah sekitar 250MB, sekitar lima kali lebih besar dari 48MB default untuk JRE 7. Pengalaman kami adalah bahwa JRE 8 membutuhkan codecache ekstra itu. Kami telah mengalihkan sekitar sepuluh layanan ke JRE 8 sejauh ini, dan semuanya menggunakan codecache sekitar empat kali lebih banyak daripada sebelumnya.
sumber
dari https://blogs.oracle.com/poonam/entry/why_do_i_get_message :
Sehingga informasi tersebut mungkin layak untuk disebutkan untuk sistem yang berjalan pada JDK 6 (menonaktifkan pembilasan kode) dan 7.
sumber