รันไทม์ของ Android และ Dalvik

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

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

ฟีเจอร์ ART

ฟีเจอร์หลักบางส่วนที่ ART ใช้งานมีดังนี้

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

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

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

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

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

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

การปรับปรุงการพัฒนาและการแก้ไขข้อบกพร่อง

ART มีฟีเจอร์มากมายที่ช่วยปรับปรุงการพัฒนาแอปและการแก้ไขข้อบกพร่อง

สนับสนุนเครื่องมือสร้างโปรไฟล์การสุ่มตัวอย่าง

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

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

รองรับฟีเจอร์การแก้ไขข้อบกพร่องเพิ่มเติม

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

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

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

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

เช่น java.lang.NullPointerException ตอนนี้จะแสดงข้อมูลเกี่ยวกับสิ่งที่แอปพยายามทําด้วยตัวชี้ Null เช่น ช่องที่แอปพยายามจะเขียนลงไป หรือวิธีการที่ใช้เขียน การโทร ตัวอย่างทั่วไปบางส่วนมีดังนี้

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 ที่ทำให้เกิดปัญหาซ้ำ