Skip to main content

บทความนี้เราจะมาพูดถึงการ compile โปรแกรมแบบ Just-in-Time (JIT) ว่ามันคืออะไร มีข้อดี ข้อเสียยังไงกันบ้างครับ

Just-in-Time (JIT) compiler คืออะไรกันนะ

เจ้า Just-do-It เอ้ยไม่ใช่!! Just-in-Time (JIT) compiler หรือ dynamic translation มันคือ “โปรแกรมที่จะแปลงโค้ดของเราที่ถูก complied เป็น bytecode แล้ว ให้ไปเป็นคำสั่ง ที่สามารถส่งตรงไปที่ CPU ให้สามารถทำงานได้เลย” สั้นๆ แบบนี้เลยครับ โดยส่วนใหญ่แล้วเจ้า Just-in-Time (JIT) compiler จะถูกใช้งานเพื่อทำให้ประสิทธิภาพการทำงานของโปรแกรมเร็วขึ้นครับ อาจจะยังงงๆนะครับว่ามันเร็วขึ้นยังไง ผมขออธิบายเพิ่ม แล้วเดี๋ยวมีรูปประกอบให้ด้วยนะครับ

โดยส่วนใหญ่แล้ว JIT compiler จะถูกเรียกใช้งานโดยอัตโนมัติ หลังจากโค้ดของเราถูก complied ไปเป็น bytecode ครับ (ทำงานแบบ just in time ตามชื่อเลยครับ) โดย bytecode ของเราที่ถูก complied นั้น จะถูก JIT compiler แปลงไปเป็น machine langauge หรือ native code ที่ง่ายและเหมาะสมต่อการทำงานของ CPU ให้มากขึ้นที่สุดเท่าที่จะทำได้ พอเจ้า CPU มันเจอกับภาษาที่มันคุ้นชิน มันก็ไม่ต้องคิดอะไรเยอะครับ รับมาแล้วไม่ต้องแปลง ทำงานได้เร็วขึ้นทันทีเลย (เร็วขึ้นตรงนี้แหละครับ) โดยภาษาดังๆ ที่นำ JIT compiler ไปใช้ก็เช่น Java Virtual Machine (JVM) ของ Java หรือ Common Language Run Time (CLM) ของ C# ครับ

ตัวอย่างในการทำงานในภาษา Java เช่น เจ้า just-in-time (JIT) compiler จะเปลี่ยน Java bytecode ไปเป็น native language เพื่อส่งตรงไปให้ CPU ทำงานอย่างมีประสิทธิภาพ โดยเจ้า JIT compiler จะถูกใช้ใน Java Runtime Environment เนื่องจากใช้เพื่อเพิ่มประสิทธิภาพการทำงานในแอปพลิเคชันของ Java ครับ

ภาพประกอบการทำงานแบบ Just-in-Time compiler ครับ

Cr. www.theserverside.com

ข้อดี และข้อเสียของ Just-in-Time (JIT) compiler

ข้อดีของ Just-in-Time (JIT) compiler

  • ใช้​ memory ที่น้อยกว่า compiler แบบอื่น
  • ทำงานทันทีเมื่อโปรแกรมเราเริ่มทำงาน
  • การเพิ่มประสิทธิภาพโค้ดสามารถทำได้ในขณะที่โค้ดกำลังทำงานอยู่

ข้อเสียของ Just-in-Time (JIT) compiler

  • เวลา start up ของโปรแกรมอาจนานกว่า compiler แบบอื่นๆ
  • ใช้งาน cache memory หนักมาก
  • เพิ่มระดับความซับซ้อนในการเขียนโปรแกรม (เพราะมันต้องแปลงโค้ดเราอีกรอบ)

บทความนี้ต้องบอกตรงๆว่า เขียนให้เข้าใจได้ยากหน่อย เพราะผมอาจจะไม่เทพขนาดนั้น พยายามแล้วครับบ ถ้ามีใครได้เข้ามาอ่านบทความนี้ แล้วสามารถช่วยให้ความหมายได้ง่ายกว่านี้ได้ แนะนำได้เลยนะครับ ขอบคุณล่วงหน้าเลยครับ 🙂

สามารถอ่านบทความ compiler แบบ Ahead-of-Time ที่มักถูกนำมาใช้คู่กันกับ JIT ได้ที่ลิงค์นี้เลยครับ: การคอมไพล์แบบ Ahead-of-Time compiler คืออะไร

Maris Kheawsaad

Maris Kheawsaad

let's technology make the world a better place

Leave a Reply