การวิจัยหลักในบทความนี้คือเนื้อหาที่เกี่ยวข้องของคำอธิบายโดยละเอียดของการตั้งค่าการตั้งค่าสถานะใน JVM ซึ่งมีการแนะนำดังนี้
-XMX3550M: ตั้งค่าหน่วยความจำสูงสุดที่มีอยู่ของ JVM เป็น 3550M
-XMS3550M: ตั้งค่าหน่วยความจำเริ่มต้นของ JVM เป็น 3550M
-XMN2G: ตั้งขนาดของคนรุ่นใหม่เป็น 2G
-xSS128K: ตั้งค่าขนาดสแต็กของแต่ละเธรดเป็น 128K
-xx: newsize = 4: กำหนดขนาดของคนรุ่นใหม่เป็น 4
-xx: newRatio = 4: กำหนดอัตราส่วนของคนรุ่นใหม่ (รวมถึงอีเด็นและสองพื้นที่ผู้รอดชีวิต) ต่อคนรุ่นเก่า (ไม่รวมคนรุ่นต่อ ๆ ไป) ถึง 4 จากนั้นอัตราส่วนของคนรุ่นใหม่ต่อคนรุ่นเก่าคือ 1: 4
-xx: Survivorratio = 4: กำหนดอัตราส่วนขนาดระหว่างพื้นที่ Eden และพื้นที่ผู้รอดชีวิตในรุ่นใหม่ กำหนดไว้ที่ 4 อัตราส่วนระหว่างสองพื้นที่ผู้รอดชีวิตและพื้นที่อีเดนหนึ่งแห่งคือ 2: 4 และพื้นที่ผู้รอดชีวิตหนึ่งรายคิดเป็น 1/6 ของคนรุ่นใหม่ทั้งหมด
-xx: maxpermsize = 16m: ตั้งค่าขนาดการสร้างถาวรเป็น 16m
-xx: pretenuresizethreshold = n วัตถุที่มากกว่า n จะถูกวางไว้โดยตรงในวัยชรา
-xx: MaxtEnuringThreshold = 0: ตั้งค่าอายุสูงสุดของขยะ หากตั้งค่าเป็น 0 วัตถุรุ่นเยาว์จะไม่ผ่านพื้นที่ผู้รอดชีวิตและเข้าสู่รุ่นเก่าโดยตรง
-xx:+USEPRALLELLOLDGC: กำหนดค่าวิธีการรวบรวมขยะรุ่นเก่าในการรวบรวมแบบขนาน
ขนาดฮีปทั้งหมด = ขนาดรุ่นเล็ก + ขนาดรุ่นเก่า + ขนาดการสร้างแบบถาวร
-xx:+USERIALGC: ตั้งค่าตัวสะสมอนุกรม
-xx:+USEPRALLEGC: ตั้งค่าตัวสะสมแบบขนาน
-xx:+USEPARALLEDLOLDGC: ตั้งค่านักสะสมรุ่นเก่าแบบขนาน
-xx:+USECONCMARKSWEEPGC: ตั้งค่าตัวสะสมพร้อมกัน
-xx:+printgc
-xx:+printgcdetails
-xx:+printgctimestamps
-xloggc: ชื่อไฟล์
-xx: ParallelGcThreads = N: ตั้งค่าจำนวน CPU ที่ใช้เมื่อรวบรวมตัวสะสมแบบขนาน จำนวนเธรดที่รวบรวมในแบบขนาน
-xx: maxgcpausemillis = n: ตั้งค่าเวลาหยุดชั่วคราวสูงสุดสำหรับการรวบรวมแบบขนาน
-xx: gctimeratio = n: ตั้งค่าเปอร์เซ็นต์ของเวลาการรวบรวมขยะในการตั้งโปรแกรมเวลาทำงาน สูตรคือ 1/(1+n)
-XX:+CMSINCREMENTALMODE: ตั้งค่าเป็นโหมดเพิ่ม เหมาะสำหรับสถานการณ์ซีพียูเดี่ยว
-xx: ParallelGcThreads = N: ตั้งค่าจำนวน CPU ที่ใช้เมื่อรุ่นใหม่ของนักสะสมพร้อมกันคือคอลเลกชันแบบขนาน จำนวนเธรดที่ใช้ในคอลเลกชันแบบขนาน
สมมติว่ามีไฟล์ชื่อ testmem.java
javac testmem.java java -verbose: gc -xms20m -xmx20m -xmn10m -xx:+printgcdetails -xx: survivorratio = 8 testmem
-xms20m: ขนาดเริ่มต้นของ java heap ใน JVM คือ 20m (รวมถึงคนรุ่นใหม่และผู้สูงอายุ)
-xmx20m: ขนาดสูงสุดของกอง Java ใน JVM คือ 20m ซึ่งหมายความว่าไม่สามารถปรับขนาดได้ (รวมถึงคนรุ่นใหม่และผู้สูงอายุ)
-xmn10m: ขนาดของรุ่นใหม่คือ 10m
-xx:+printgcdetails: พิมพ์ข้อมูล GC โดยละเอียด
-xx: Survivorratio = 8: อัตราส่วนเชิงพื้นที่ของหนึ่ง Enden ถึงหนึ่งพื้นที่ผู้รอดชีวิตในรุ่นใหม่คือ 8: 1 จากนั้นอัตราส่วนของสองพื้นที่ผู้รอดชีวิตต่อพื้นที่ Eden หนึ่งแห่งคือ 2: 8
หลังจากทราบข้อมูลธงข้างต้นเราสามารถรับข้อมูลต่อไปนี้:
ขนาดทั้งหมดของกอง Java คือ 20m = 20 * 1024k = 20480K
ขนาดของ Ceponymous Generation: 10m = 10 * 1024k = 10240k
Eden Space: 10240K * 8/10 = 8192K
จากอวกาศ: 10240K * 1/10 = 1024K
สู่อวกาศ: 10240K * 1/10 = 1024K
ขนาดของอายุ: 20m - 10m = 10m = 10240k
ข้างต้นเป็นคำอธิบายโดยละเอียดทั้งหมดของการตั้งค่าธงใน JVM ในบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!