Google 致力于为黑人社区推动种族平等。查看具体举措
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

รันไทม์ Android (ART) และ Dalvik

รันไทม์ของ Android (ART) คือรันไทม์ที่มีการจัดการที่ใช้โดยแอปพลิเคชันและบริการระบบบางอย่างบน Android ART และ Dalvik รุ่นก่อนถูกสร้างขึ้นโดยเฉพาะสำหรับโครงการ Android ART เป็นรันไทม์เรียกใช้รูปแบบ Dalvik Executable และข้อกำหนด Dex bytecode

ART และ Dalvik เป็นรันไทม์ที่ใช้งานร่วมกันได้กับ Dex bytecode ดังนั้นแอปที่พัฒนาขึ้นสำหรับ Dalvik จึงควรใช้งานได้เมื่อทำงานกับ ART อย่างไรก็ตามเทคนิคบางอย่างที่ใช้กับ Dalvik ใช้ไม่ได้กับ ART สำหรับข้อมูลเกี่ยวกับปัญหาที่สำคัญที่สุดโปรดดู การตรวจสอบลักษณะการทำงานของแอปบนรันไทม์ของ Android (ART)

คุณสมบัติของ ART

นี่คือคุณสมบัติหลักบางประการที่ ART นำมาใช้

การรวบรวมล่วงหน้า (AOT)

ART แนะนำการรวบรวมล่วงหน้า (AOT) ซึ่งสามารถปรับปรุงประสิทธิภาพของแอปได้ ART ยังมีการตรวจสอบเวลาในการติดตั้งที่เข้มงวดกว่า Dalvik

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

ปรับปรุงการเก็บขยะ

การรวบรวมขยะ (GC) ใช้ทรัพยากรมากซึ่งอาจทำให้ประสิทธิภาพของแอปลดลงส่งผลให้การแสดงผลกระตุกการตอบสนองของ UI ไม่ดีและปัญหาอื่น ๆ ART ปรับปรุงการเก็บขยะในหลายวิธี:

  • การออกแบบพร้อมกันส่วนใหญ่โดยใช้ GC หยุดชั่วคราวเพียงครั้งเดียว
  • การคัดลอกพร้อมกันเพื่อลดการใช้หน่วยความจำพื้นหลังและการแยกส่วน
  • ความยาวของการหยุดชั่วคราวของ GC ไม่ขึ้นอยู่กับขนาดฮีป
  • ตัวสะสมที่มีเวลา GC รวมต่ำกว่าสำหรับกรณีพิเศษในการล้างอ็อบเจ็กต์ที่เพิ่งจัดสรรที่เพิ่งจัดสรร
  • การออกแบบตามหลักสรีรศาสตร์ของการเก็บขยะที่ได้รับการปรับปรุงทำให้การรวบรวมขยะพร้อมกันเป็นไปอย่างตรงเวลามากขึ้นซึ่งทำให้เหตุการณ์ GC_FOR_ALLOC หายากมากในกรณีการใช้งานทั่วไป

การพัฒนาและการปรับปรุงการดีบัก

ART นำเสนอคุณสมบัติมากมายเพื่อปรับปรุงการพัฒนาและแก้ไขข้อบกพร่องของแอป

รองรับการสุ่มตัวอย่าง profiler

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

ART เพิ่มการสนับสนุนสำหรับผู้สร้างโปรไฟล์การสุ่มตัวอย่างโดยเฉพาะที่ไม่มีข้อ จำกัด เหล่านี้ สิ่งนี้ให้มุมมองการทำงานของแอพที่แม่นยำยิ่งขึ้นโดยไม่มีการชะลอตัวอย่างมีนัยสำคัญ เพิ่มการรองรับการสุ่มตัวอย่างใน Traceview สำหรับ Dalvik ในรุ่น KitKat

รองรับคุณสมบัติการดีบักเพิ่มเติม

ART รองรับตัวเลือกการดีบักใหม่ ๆ จำนวนมากโดยเฉพาะในฟังก์ชันที่เกี่ยวข้องกับจอภาพและการรวบรวมขยะ ตัวอย่างเช่นคุณสามารถ:

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

ปรับปรุงรายละเอียดการวินิจฉัยในข้อยกเว้นและรายงานข้อขัดข้อง

ART ให้บริบทและรายละเอียดแก่คุณมากที่สุดเมื่อมีข้อยกเว้นรันไทม์เกิดขึ้น ART จัดเตรียมรายละเอียดข้อยกเว้นเพิ่มเติมสำหรับ java.lang.ClassCastException , java.lang.ClassNotFoundException และ java.lang.NullPointerException (เวอร์ชันต่อมาของ Dalvik ได้ให้รายละเอียดข้อยกเว้นเพิ่มเติมสำหรับ java.lang.ArrayIndexOutOfBoundsException และ java.lang.ArrayStoreException ซึ่งตอนนี้รวมขนาดของอาร์เรย์และการชดเชยนอกขอบเขตและ ART ก็ทำเช่นนี้เช่นกัน)

ตัวอย่างเช่นตอนนี้ java.lang.NullPointerException จะแสดงข้อมูลเกี่ยวกับสิ่งที่แอปพยายามทำกับตัวชี้ค่าว่างเช่นฟิลด์ที่แอปพยายามเขียนถึงหรือวิธีการที่พยายามเรียกใช้ นี่คือตัวอย่างทั่วไปบางส่วน:

java.lang.NullPointerException: Attempt to write to field 'int
android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object
reference
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String java.lang.Object.toString()' on a null object reference

ART ยังให้ข้อมูลบริบทที่ได้รับการปรับปรุงในรายงานข้อขัดข้องของแอปโดยรวมทั้ง Java และข้อมูลสแต็กดั้งเดิม

การรายงานปัญหา

หากคุณพบปัญหาใด ๆ ที่ไม่ได้เกิดจากปัญหา JNI ของแอปโปรดรายงานปัญหาดังกล่าวผ่าน เครื่องมือติดตามปัญหาโครงการโอเพนซอร์ส ของ Android รวมรายงานข้อ adb bugreport และลิงก์ไปยังแอปใน Google Play Store หากมี หากเป็นไปได้ให้แนบ APK ที่ทำให้เกิดปัญหาอีกครั้ง