Java Virtual Machine - ระดับการคอมไพล์

JVM รองรับการรวบรวมห้าระดับ -

  • Interpreter
  • C1 พร้อมการเพิ่มประสิทธิภาพเต็มรูปแบบ (ไม่มีการทำโปรไฟล์)
  • C1 พร้อมการเรียกและตัวนับขอบหลัง (การทำโปรไฟล์แบบเบา)
  • C1 พร้อมโปรไฟล์แบบเต็ม
  • C2 (ใช้ข้อมูลการทำโปรไฟล์จากขั้นตอนก่อนหน้า)

ใช้ -Xint หากคุณต้องการปิดใช้งานคอมไพเลอร์ JIT ทั้งหมดและใช้เฉพาะตัวแปล

ไคลเอนต์เทียบกับเซิร์ฟเวอร์ JIT

ใช้ -client และ -server เพื่อเปิดใช้งานโหมดต่างๆ

ไคลเอนต์คอมไพเลอร์ (C1) เริ่มคอมไพล์โค้ดเร็วกว่าคอมไพเลอร์เซิร์ฟเวอร์ (C2) ดังนั้นเมื่อถึงเวลาที่ C2 เริ่มการรวบรวม C1 จะรวบรวมส่วนของโค้ดแล้ว

แต่ในขณะที่รอ C2 จะสร้างโปรไฟล์ให้รหัสรู้มากกว่าที่ C1 ทำ ดังนั้นเวลาที่รอหากสามารถใช้การชดเชยด้วยการปรับให้เหมาะสมเพื่อสร้างไบนารีที่เร็วกว่ามาก จากมุมมองของผู้ใช้การแลกเปลี่ยนจะอยู่ระหว่างเวลาเริ่มต้นของโปรแกรมและเวลาที่โปรแกรมทำงาน หากเวลาเริ่มต้นเป็นเบี้ยประกันภัยควรใช้ C1 หากคาดว่าแอปพลิเคชันจะทำงานเป็นเวลานาน (โดยทั่วไปของแอปพลิเคชันที่ติดตั้งบนเซิร์ฟเวอร์) ควรใช้ C2 เนื่องจากสร้างโค้ดที่เร็วกว่ามากซึ่งจะชดเชยเวลาเริ่มต้นที่เพิ่มขึ้นอย่างมาก

สำหรับโปรแกรมเช่น IDEs (NetBeans, Eclipse) และโปรแกรม GUI อื่น ๆ เวลาเริ่มต้นเป็นสิ่งสำคัญ NetBeans อาจใช้เวลาหนึ่งนาทีหรือนานกว่านั้นในการเริ่มต้น มีการรวบรวมคลาสหลายร้อยคลาสเมื่อเริ่มโปรแกรมเช่น NetBeans ในกรณีเช่นนี้คอมไพเลอร์ C1 เป็นตัวเลือกที่ดีที่สุด

โปรดทราบว่า C1 มีสองเวอร์ชัน - 32b and 64b. C2 เข้ามาเท่านั้น64b.

การรวบรวมฉัตร

ในเวอร์ชันเก่าบน Java ผู้ใช้สามารถเลือกหนึ่งในตัวเลือกต่อไปนี้ -

  • ล่าม (-Xint)
  • C1 (- ลูกค้า)
  • C2 (- เซิร์ฟเวอร์)

มาใน Java 7 โดยใช้คอมไพเลอร์ C1 ในการเริ่มต้นและเมื่อโค้ดร้อนขึ้นให้เปลี่ยนไปใช้ C2 สามารถเปิดใช้งานด้วยตัวเลือก JVM ต่อไปนี้: -XX: + TieredCompilation ค่าเริ่มต้นคือset to false in Java 7, and to true in Java 8.

จากห้าชั้นของการรวบรวมการรวบรวมแบบฉัตรใช้ 1 -> 4 -> 5.