คำตอบ:
แฟล็กXmx
ระบุพูลการจัดสรรหน่วยความจำสูงสุดสำหรับ Java virtual machine (JVM) ในขณะที่Xms
ระบุพูลการจัดสรรหน่วยความจำเริ่มต้น
ซึ่งหมายความว่า JVM ของคุณจะเริ่มต้นด้วยXms
จำนวนหน่วยความจำและจะสามารถใช้Xmx
หน่วยความจำได้สูงสุด ตัวอย่างเช่นการเริ่มต้น JVM เช่นด้านล่างจะเริ่มด้วยหน่วยความจำ 256 MB และจะทำให้กระบวนการใช้หน่วยความจำสูงสุด 2048 MB:
java -Xms256m -Xmx2048m
แฟล็กหน่วยความจำยังสามารถระบุได้ในขนาดต่าง ๆ เช่นกิโลไบต์เมกะไบต์และอื่น ๆ
-Xmx1024k
-Xmx512m
-Xmx8g
การXms
ตั้งค่าสถานะไม่มีค่าเริ่มต้นและXmx
โดยทั่วไปมีค่าเริ่มต้นของ 256 MB java.lang.OutOfMemoryError
ใช้งานทั่วไปสำหรับธงเหล่านี้คือเมื่อคุณพบ
เมื่อใช้การตั้งค่าเหล่านี้โปรดจำไว้ว่าการตั้งค่าเหล่านี้ใช้สำหรับฮีปของ JVM และ JVM สามารถ / จะใช้หน่วยความจำมากกว่าขนาดที่จัดสรรให้กับฮีป จากเอกสารของ Oracle :
โปรดทราบว่า JVM ใช้หน่วยความจำมากกว่าฮีป ตัวอย่างเช่นวิธี Java, สแต็กของเธรดและตัวจัดการเนทิฟถูกจัดสรรในหน่วยความจำแยกจากฮีปรวมถึงโครงสร้างข้อมูลภายใน JVM
OutOfMemoryError
จะเกิดขึ้น
-Xms256m
คือ "256 MiB" ไม่ใช่ "256 MB" เนื่องจากมันไปด้วยพลังไบนารีมากกว่าพลังสิบ ดูen.wikipedia.org/wiki/Binary_prefix นอกจากนี้เนื่องจากพื้นที่ที่ไม่สามารถใช้งานได้ถูกตั้งค่าไว้สำหรับสระว่ายน้ำพิเศษของพื้นที่ผู้รอดชีวิตจำนวนหน่วยความจำที่ใช้งานได้จริงจะRuntime.getRuntime().maxMemory()
น้อยกว่าค่าที่ระบุผ่าน -Xmx
เรียกใช้คำสั่งjava -X
และคุณจะได้รับรายการ-X
ตัวเลือกทั้งหมด:
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
ตัวเลือก -X ไม่ได้มาตรฐานและอาจมีการเปลี่ยนแปลงโดยไม่ต้องแจ้งให้ทราบล่วงหน้า
ฉันหวังว่านี้จะช่วยให้คุณเข้าใจXms
, Xmx
เช่นเดียวกับสิ่งอื่น ๆ ที่มีความสำคัญมากที่สุด :)
คุณสามารถระบุไว้ใน IDE ของคุณ ตัวอย่างเช่นสำหรับ Eclipse ในการเรียกใช้การตั้งค่า → การขัดแย้ง VM คุณสามารถป้อน-Xmx800m -Xms500m
เป็น
คำถามดังกล่าวได้รับการแก้ไขแล้วด้านบน เพียงเพิ่มส่วนหนึ่งของค่าเริ่มต้น
ตามhttp://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html
ค่าเริ่มต้นของ Xmx จะขึ้นอยู่กับแพลตฟอร์มและจำนวนหน่วยความจำที่มีอยู่ในระบบ
-Xmsขนาดฮีพเริ่มต้นสำหรับการเริ่มต้นอย่างไรก็ตามในระหว่างกระบวนการทำงานขนาดฮีปอาจน้อยกว่า-Xms เนื่องจากการไม่ทำงานของผู้ใช้หรือการทำซ้ำ GC นี่ไม่ใช่ขนาดฮีปที่ต้องการน้อยที่สุด
ขนาดxxสูงสุดสูงสุด
-Xmx128m -Xms64m
มันสามารถมีจุดสูงสุดรอบ ๆ275m
RES mem แต่เมื่อใช้-Xmx128m -Xms128m
มันสามารถไปรอบ ๆ550m
RES mem ได้โดยใช้ Java 8 สิ่งที่ดีที่สุดคือการเน้น GC และดูว่าเกิดอะไรขึ้น ...