JVM Options เบื้องต้นมีอะไรบ้าง?
หลังจากที่เราได้รู้การทำงานของ JVM ไปแล้ว ก็อาจจะสงสัยว่าเราสามารถปรับแต่ง JVM ในขณะทำงานได้ไหม ซึ่ง JVM ก็มี option ที่เป็น Standard Options, Non-standard Options และ Advance Option ให้สำหรับปรับแต่งการทำงานดังนี้
Standard Options
เราสามารถใช้คำสั่ง java
เพื่อแสดงรายการ option มาตรฐานของ JVM สามารถเลือกใช้งานได้ตามที่ต้องการ โดยที่ option สำคัญดังนี้
-Dproperty=value
เป็นการตั้งค่า property ของระบบ ตัวแปร property
เป็น String ที่ไม่มีช่องว่างหลังจาก -D
(Define) แทนที่ชื่อของ property และตัวแปร value
เป็น String แทนทีค่าของ property ถ้ามีช่องว่างระหว่างคำจะต้องมีเครื่องหมาย “”
กำกับ (ตัวอย่างเช่น -Dfoo="foo bar"
)
-server
เป็นการเลือก Hotspot Server VM ซึ่ง JDK เวอร์ชัน 64bit เท่านั้นที่รองรับ option นี้
-client
เป็นการเลือก Hotspot Client VM ถ้าเป็น JDK เวอร์ชัน 64bit จะไม่รองรับ option นี้ แต่ใช้ Hotspot Server VM แทน
-d32/-d64
เป็นการระบุว่าจะให้ JVM ทำงานในโหมด 32bit หรือ 64Bit แต่โดยค่าเริ่มต้นจะรันแอพพลิเคชันในโหมด 32bit เว้นแต่ระบบ 64bit ถูกใช้งาน ตอนนี้มีเพียง Hotspot VM ที่รองรับ 64bit และถ้าใช้ option -server
จะใช้งาน -d64
โดยปริยาย แต่ถ้าใช้ -client
จะไม่ใช้งาน -d64
Non-Standard Options
เราสามารถใช้คำสั่ง java -X
เพื่อแสดงรายการของ option เฉพาะของ JVM นั้นๆ และ option ที่สำคัญดังนี้
-Xint
เป็นการรันแอพพลิเคชันในโหมด interpreted-only ซึ่งการใช้งาน native code จะถูกปิดการใช้งาน และ bytecode จะถูกประมวลผลด้วย interpreter การใช้งาน JIT เพื่อเพิ่มประสิทธิภาพการประมวลผลจะไม่เห็นผลในโหมดนี้
-Xbootclasspath:path
เป็นการระบุรายการของ directory ที่มีไฟล์ JAR และ ZIP โดยแยกด้วย :
เพื่อหาไฟล์คลาส boot loader
-Xloggc:filename
เป็นระบุไฟล์ซึ่งเก็บข้อมูลของ verbose GC event สำหรับ logging โดยที่ข้อมูลจะถูกเขียนไปในไฟล์เหมือนกับที่แสดงใน output ของ -verbose:gc
ซึ่ง -Xloggc
จะแทนที่ -verbose:gc
ถ้าใส่มาในคำสั่งชุดเดียวกัน
-Xmssize
เป็นการระบุค่าเริ่มต้นของขนาดของ Heap (หน่วยเป็น byte) เป็นค่าผลคูลของ 1024 และมากกว่า 1 MB ต่อท้ายด้วยตัวอักษรที่บ่งบอกว่าเป็นหน่วย, k
หรือ K
เป็นหน่วย kilobyte, m
หรือ M
เป็นหน่วย megabyte, g
หรือ G
เป็นหน่วย gigabyte ตัวอย่างต่อไปนี้เป็นการระบุค่า 6 MB
-Xms6291456
-Xms6144k
-Xms6m
ถ้าไม่ระบุ option นี้ขนาดเริ่มต้นของ Heap จะเป็นค่าของผลรวมของขนาดที่ allocate สำหรับ old generation และ young generation, -Xms
-Xmxsize
เป็นการระบุค่ามากที่สุดของขนาดของ Heap (หน่วยเป็น byte) ป็นค่าผลคูลของ 1024 และมากกว่า 2 MB ต่อท้ายด้วยตัวอักษรที่บ่งบอกว่าเป็นหน่วย, k
หรือ K
เป็นหน่วย kilobyte, m
หรือ M
เป็นหน่วย megabyte, g
หรือ G
เป็นหน่วย gigabyte ตัวอย่างต่อไปนี้เป็นการระบุค่า 80 MB
-Xmx83886080
-Xmx81920k
-Xmx80m
โดยเริ่มต้นจะใช้ค่าที่ถูกเลือกในขณะ runtime ซึ่งเป็นค่าของ system configuration
-Xnoclassgc
เป็นการปิดการทำงานของ Garbage Collection ของคลาส สามารถประหยัดเวลาขอ GC บ้าง ซึ่งทำให้ interrupt สั้นลงในขณะทำงานของแอพพลิเคชัน
Advance Options
นอกจาก Standard Option และ Non-Standard Option แล้วก็ยังมี option อื่นๆ อีกที่เป็นระดับสูง ซึ่งแบบได้ดังนี้
Behavior
-XX:+UseConcMarkSweepGC
สำหรับเปิดใช้งาน CMS Garbage Collection
-XX:+UseParallelGC
สำหรับเปิดใช้งาน Parallel Garbage Collection
-XX:+UseSerialGC
สำหรับเปิดใช้งาน Serial Garbage Collection
-XX:+UseG1GC
สำหรับเปิดใช้งาน G1 Garbage Collection
Performance
-XX:MaxPermSize=size
เป็นการระบุขนาดสูงสุดของ permanent generation space (หน่วยเป็น byte)
-XX:ThreadStackSize=size
เป็นการระบุขนาดของ thread stack (หน่วยเป็น byte)
-XX:+UseStringCache
เปิดใช้งานการ caching ของ commonly allocated strings
-XX:G1HeapRegionSize=size
เป็นการระบุขนาดของ sub-division ของ G1 Heap (หน่วยเป็น byte)
-XX:MaxGCPauseMillis=time
เป็นการระบุเวลานานที่สุดของการหยุดของ Garbage Collection
-XX:MaxNewSize=size
เป็นการระบุขนาดสูงสุดของ Heap สำหรับ young generation
-XX:+AggressiveOpts
เปิดใช้งาน aggressive performance optimization features
-XX:OnError=string
เป็นการระบุคำสั่งให้ทำงานเมื่อมี Error เกิดขึ้น
Debugging
-XX:ErrorFile=filename
เป็นการระบุ path และชื่อไฟล์ของ Error log
-XX:+HeapDumpOnOutOfMemory
เปิดใช้งาน dump ไฟล์ของ Java Heap ไปเป็นไฟล์ใน directory ที่ทำงานอยู่
-XX:+PrintGC
เปิดใช้งานให้แสดง message ของทุกๆ Garbage Collection
-XX:+TraceClassLoading
เปิดใช้งาน tract ของคลาสที่โหลดมาแล้ว
-XX:+PrintClassHistogram
เปิดใช้งานแสดงคลาส instance histogram หลังจาก Ctrl+C