[ของใหม่ Android 7.0] รันไทม์ ART นำเทคนิคการคอมไพล์ JIT มาผสมกับ AOT

by mk
29 August 2016 - 03:12

ฟีเจอร์ใหม่ของ Android 7.0 ที่ลึกลงไปในระดับของการคอมไพล์คือการนำเทคนิค Just in Time (JIT) compiler มาใช้กับรันไทม์แบบ ART ที่เริ่มใช้มาตั้งแต่ Android 5.0

ART ใช้แนวทางการคอมไพล์แบบ Ahead of Time (AOT) หรือคอมไพล์รอไว้ก่อนรันแอพ ข้อดีของ AOT คือไม่ต้องคอมไพล์ใหม่ทุกครั้งเมื่อรันแอพ (ส่วนใหญ่จะคอมไพล์ตอนติดตั้งแอพจาก Play Store) การรันแอพใช้แรมน้อยลง ใช้ทรัพยากรน้อยลง ประหยัดแบตเตอรี่มากขึ้น แต่ข้อเสียคือเปลืองพื้นที่เก็บไฟล์แอพที่คอมไพล์แล้ว กระบวนการติดตั้งแอพช้าลง และแอพที่คอมไพล์แล้วจะผูกกับคอนฟิกของระบบขณะคอมไพล์ ถ้าหากเราอัพเดตระบบปฏิบัติการใหม่ คอนฟิกเปลี่ยน แอพจะต้องถูกคอมไพล์ใหม่ตอนรีบูตเครื่องครั้งแรก (ซึ่งเป็นที่มาของหน้าจอ App Optimization)

ปัญหาเรื่องการรอ App Optimization อาจไม่ใช่เรื่องใหญ่ในอดีต เพราะกูเกิลอัพเดตระบบปฏิบัติการปีละครั้ง แต่ตอนนี้กูเกิลเปลี่ยนมาเป็นอัพเดตแพตช์ความปลอดภัยให้ทุกเดือน การต้องรีบูตเครื่องใหม่และรอคอมไพล์ใหม่ทุกครั้งคงไม่สะดวกนัก

ใน Android 7.0 กูเกิลจึงนำเทคนิคการคอมไพล์แบบ Just in Time (JIT) หรือคอมไพล์ตอนรันแอพมาผสมด้วย เพื่อดึงจุดเด่นของทั้ง JIT และ AOT มาใช้ร่วมกัน (ถือเป็นไฮบริดระหว่าง JIT/AOT)

Android 7.0 จะเลือกวิธีคอมไพล์แอพตามสถานการณ์เพื่อให้ได้ประโยชน์สูงสุด เช่น เมื่ออัพเดตและบูตเครื่องแล้ว ไม่ต้องคอมไพล์แบบ AOT ให้เสียเวลารอ optimize แต่จะไปคอมไพล์แบบ JIT แทนตอนรันแอพครั้งแรก และถ้ามือถือเราวางอยู่นิ่งๆ ไม่ใช่งาน แถมยังเสียบปลั๊กชาร์จไฟ ระบบจะใช้เวลาช่วงนี้มาคอมไพล์แบบ AOT ให้แทน

Android 7.0 ยังสามารถแยกส่วนการคอมไพล์ได้ด้วย (profile-guided compilation) เช่น บางส่วนอาจคอมไพล์แบบ AOT รอไว้ก่อน และบางส่วนค่อยรอคอมไพล์แบบ JIT ตอนรัน ซึ่งตัวระบบปฏิบัติการจะประเมินและปรับแต่งให้เองตามความเหมาะสมของแอพแต่ละตัว

ข้อดีของการนำ JIT มาใช้งานคือระยะเวลาติดตั้งแอพเร็วขึ้น และไม่ต้องรอ optimization ตอนรีบูตหลังอัพเดตอีกต่อไป

การบรรยายเรื่อง ART ในงาน Google I/O 2016

ความแตกต่างของ JIT กับ AOT (ภาพประกอบจาก IBM)

ที่มา - Android Developers, Ars Technica

Blognone Jobs Premium