ฉันได้เปรียบเทียบแอปของฉันและวิเคราะห์ด้วย JMC ฉันสังเกตเห็นว่าภายใต้โหลด มันจะทำการคอมไพล์ JIT ค่อนข้างน้อย ถ้าฉันส่งธุรกรรมจำนวนมากต่อวินาที เวลาในการคอมไพล์จะเพิ่มขึ้นอย่างรวดเร็ว เวลาในการคอมไพล์จะเพิ่มขึ้นตามสัดส่วนเสมอเมื่อมีการทดสอบโหลดหนักกับแอป
ฉันยังสังเกตเห็นว่า Code Cache เพิ่มขึ้นอย่างช้าๆ เช่นกัน ดังนั้นฉันจึงตัดสินใจเพิ่มการสำรอง Code Cache เป็น 500MB เพื่อทดสอบ ย้ายไม่ดี! ตอนนี้มันใช้เวลามากขึ้นในการดำเนินการ JIT
จากนั้นฉันก็ปิดการใช้งานการล้างแคชโค้ดอย่างชัดเจนผ่าน -XX:-UseCodeCacheFlushing
อย่างไรก็ตาม ฉันสังเกตเห็นว่าการใช้งาน Code Cache สูงสุดนั้นมีขนาดใหญ่กว่าขนาดปัจจุบัน สิ่งนี้ทำให้ฉันมีคำถามสองสามข้อ:
- JVM พยายามแคชการคอมไพล์ JIT ทุกครั้งหรือไม่
- เหตุใดขนาดแคชโค้ดสูงสุดจึงใหญ่กว่าขนาดปัจจุบันแม้ว่าฉันจะปิดใช้งานการฟลัชแล้วก็ตาม
- มีโค้ดที่คอมไพล์ "ชั่วคราว" ที่ถูกลบออกโดยอัตโนมัติหลังจากฟังก์ชันสิ้นสุดหรือไม่