JIT ย่อมาจากคอมไพเลอร์ทันเวลาและชื่อคือ misson: ระหว่างรันไทม์จะเป็นตัวกำหนดโค้ดที่เหมาะสมที่สุด มันไม่ได้แทนที่คอมไพเลอร์ปกติ แต่เป็นส่วนหนึ่งของล่าม โปรดทราบว่าภาษาเช่น Java ที่ใช้รหัสกลางมีทั้ง : คอมไพเลอร์ปกติสำหรับการแปลซอร์สโค้ดถึงระดับกลางและ JIT รวมอยู่ในล่ามเพื่อเพิ่มประสิทธิภาพ
การปรับโค้ดให้เหมาะสมสามารถทำได้โดยคอมไพเลอร์ "คลาสสิค" แต่ทราบความแตกต่างที่สำคัญ: คอมไพเลอร์ JIT สามารถเข้าถึงข้อมูลที่รันไทม์ นี่เป็นข้อได้เปรียบอย่างมาก การหาประโยชน์จากมันอย่างถูกต้องอาจเป็นเรื่องยาก
ลองพิจารณาตัวอย่างเช่นโค้ดดังนี้:
m(a : String, b : String, k : Int) {
val c : Int;
switch (k) {
case 0 : { c = 7; break; }
...
case 17 : { c = complicatedMethod(k, a+b); break; }
}
return a.length + b.length - c + 2*k;
}
คอมไพเลอร์ปกติไม่สามารถทำอะไรเกี่ยวกับเรื่องนี้มากเกินไป อย่างไรก็ตามคอมไพเลอร์ JIT อาจตรวจพบว่าm
มีการเรียกด้วยk==0
เหตุผลบางอย่างเท่านั้น (บางสิ่งเช่นนั้นอาจเกิดขึ้นเมื่อมีการเปลี่ยนแปลงรหัสเมื่อเวลาผ่านไป); มันสามารถสร้างโค้ดที่มีขนาดเล็กลง (และคอมไพล์มันให้เป็นรหัสเนทีฟแม้ว่าฉันจะคิดว่านี่เป็นจุดย่อยแนวคิด):
m(a : String, b : String) {
return a.length + b.length - 7;
}
ณ จุดนี้มันอาจจะเป็นแบบอินไลน์เรียกวิธีที่มันเป็นเรื่องเล็กน้อยในขณะนี้
เห็นได้ชัดว่า Sun ได้ยกเลิกการปรับให้เหมาะสมที่สุดที่javac
ใช้ใน Java 6 ฉันได้รับแจ้งว่าการปรับให้เหมาะสมเหล่านั้นทำให้มันยากสำหรับ JIT ที่จะทำอะไรมากมายและโค้ดที่คอมไพล์อย่างไร้เดียงสาก็วิ่งได้เร็วขึ้นในตอนท้าย ไปคิด