โปรแกรมที่กินหน่วยความจำ

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

กระบวนการD daemon สำหรับ Low Memory Kill (LMK) ของ Android จะตรวจสอบสถานะหน่วยความจำของระบบ Android ที่ทำงานอยู่ และตอบสนองต่อแรงกดดันของหน่วยความจำสูงด้วยการหยุดกระบวนการที่ไม่จำเป็นที่สุดเพื่อรักษาให้ระบบทำงานในระดับที่ยอมรับได้

ในการตัดสินว่าจะฆ่ากระบวนการใด เดมอน LMK จะใช้คะแนนหน่วยความจำไม่เพียงพอที่เรียกว่า oom_adj_score เพื่อจัดลำดับความสำคัญของกระบวนการที่ทำงานอยู่ ระบบจะหยุดกระบวนการที่มีคะแนนสูงก่อน ระบบจะปิดแอปที่ทำงานอยู่เบื้องหลังก่อน แล้วจึงปิดกระบวนการของระบบเป็นลำดับสุดท้าย ตารางต่อไปนี้แสดงหมวดหมู่การให้คะแนน LMK จากสูงไปต่ำ ระบบจะลบรายการในหมวดหมู่ที่มีคะแนนสูงสุดในแถวที่ 1 ออกก่อน

กระบวนการของ Android จัดอันดับจากคะแนนสูงสุดไปต่ำสุด ได้แก่ แอปเบื้องหลัง แอปก่อนหน้า แอปหน้าแรก บริการ แอปที่สังเกตได้ แอปที่ทำงานอยู่เบื้องหน้า แอปที่ทำงานอยู่เสมอ ระบบ และแอปเนทีฟ
รูปที่ 1 กระบวนการของ Android โดยคะแนนสูงจะแสดงที่ด้านบนและคะแนนต่ำจะแสดงที่ด้านล่าง

เมตริก LMK ใน Android Vitals

Android Vitals ช่วยให้คุณตรวจสอบและปรับปรุงอัตรา LMK ของแอปได้ Android Dev Tools จะวัดอัตรา LMK เพียงอัตราเดียวเท่านั้น ซึ่งก็คืออัตรา LMK ที่ผู้ใช้รับรู้

เมตริกนี้แสดงเปอร์เซ็นต์ของผู้ใช้ที่ใช้งานอยู่รายวันซึ่งพบ LMK ที่ผู้ใช้รับรู้อย่างน้อย 1 รายการ LMK ที่ผู้ใช้รับรู้คือ LMK ที่ผู้ใช้มีแนวโน้มที่จะสังเกตเห็นได้ ตัวอย่างเช่น LMK ที่เกิดขึ้นระหว่างที่แอปแสดงกิจกรรมหรือทำหน้าที่เป็นบริการที่ทำงานอยู่เบื้องหน้า

คุณดูเมตริกได้ในส่วนความเสถียรใน Android Vitals

รูปที่ 2 เข้าถึงอัตรา LMK ที่ผู้ใช้รับรู้ใน Android Vitals

คุณสามารถกรองเมตริก เปรียบเทียบเมตริกกับแอปที่เทียบเท่า หรือตรวจสอบการเปลี่ยนแปลงของเมตริกเป็นระยะเวลานาน (สูงสุด 3 ปี) ได้เช่นเดียวกับเมตริก Vitals หลักอื่นๆ เช่น ANR และการขัดข้อง ข้อมูลจะพร้อมใช้งานสำหรับแอปที่มีอยู่ตั้งแต่ 28 ม.ค. 2025

รูปที่ 3 ภาพรวมอัตรา LMK ใน Android Vitals

เครื่องมือสร้างโปรไฟล์หน่วยความจำ

เครื่องมือต่อไปนี้จะช่วยคุณค้นหาและวินิจฉัยปัญหาเกี่ยวกับหน่วยความจำได้

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

เครื่องมือสร้างโปรไฟล์หน่วยความจำของ Android Studio

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

รูปที่ 4 การดูการอ้างอิง JNI ทั่วโลกในเครื่องมือวิเคราะห์หน่วยความจำของ Android Studio

เครื่องมือการสร้างโปรไฟล์หน่วยความจำของ Unity

หากใช้ Unity Engine เพื่อสร้างแอป ให้ทําตามคําแนะนําในการสํารวจหน่วยความจําของ Unity Unity มีเครื่องมือ 2 รายการสำหรับวิเคราะห์การใช้หน่วยความจำในแอปพลิเคชันของคุณใน Unity

รายการแรกคือโมดูลเครื่องมือวิเคราะห์หน่วยความจำ ซึ่งเป็นเครื่องมือวิเคราะห์ในตัวที่ให้ข้อมูลพื้นฐานเกี่ยวกับตําแหน่งที่แอปพลิเคชันใช้หน่วยความจํา

โมดูลหน่วยความจําแสดงการจัดสรรหน่วยความจํา เช่น หน่วยความจําของพื้นผิวและหน่วยความจําของเ mesh
รูปที่ 5 หน้าต่างเครื่องมือวิเคราะห์ประสิทธิภาพของ Unity ที่เลือกโมดูลหน่วยความจำ

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

รูปที่ 6 การวิเคราะห์ภาพรวมหน่วยความจําโดยใช้หน้าต่างเครื่องมือวิเคราะห์หน่วยความจํา

Unreal Memory Insights

แอปที่สร้างโดย Unreal Engine สามารถใช้ข้อมูลเชิงลึกเกี่ยวกับหน่วยความจําของ Unreal เพื่อดูข้อมูลโดยละเอียดเกี่ยวกับการจองและการยกเลิกการจองหน่วยความจํา รวมถึงแท็กหน่วยความจําระดับล่าง (LLM) และกองคําเรียกที่เกี่ยวข้องกับบล็อกหน่วยความจํา

ระบบการค้นหาข้อมูลเชิงลึกเกี่ยวกับหน่วยความจําสามารถค้นหาการจัดสรรที่ใช้งานอยู่ ณ เวลาใดก็ได้ ระบุการเปลี่ยนแปลงในการใช้งานหน่วยความจํา ค้นหาหน่วยความจําที่รั่วไหล และแยกความแตกต่างระหว่างการจัดสรรระยะสั้นกับระยะยาว

ตั้งแต่ UE 5.4 เป็นต้นไป ข้อมูลเชิงลึกเกี่ยวกับหน่วยความจําจะรองรับการติดตามหน่วยความจําด้วยสแต็กการเรียกสำหรับโปรเจ็กต์ Android

เครื่องมือติดตามข้อมูลเชิงลึกเกี่ยวกับหน่วยความจำแสดงกราฟหน่วยความจำหลัก จํานวนการจัดสรรที่ใช้งานอยู่ และจํานวนเหตุการณ์การจัดสรร/การปลดปล่อย
รูปที่ 6 เครื่องมือติดตามข้อมูลเชิงลึกเกี่ยวกับหน่วยความจําของ Unreal

แหล่งข้อมูลเพิ่มเติม