แพลตฟอร์ม Android ทำงานบนสมมติฐานที่ว่าหน่วยความจำที่ไม่ได้ใช้งานคือหน่วยความจำที่สูญเปล่า Android พยายามใช้หน่วยความจำทั้งหมดที่มีอยู่ตลอดเวลา เช่น ระบบจะเก็บแอปไว้ในหน่วยความจำหลังจากปิดแอปแล้ว เพื่อให้ผู้ใช้เปลี่ยนกลับไปใช้แอปได้อย่างรวดเร็ว ด้วยเหตุนี้ อุปกรณ์ Android จึงมักทำงานโดยมีหน่วยความจำว่างเหลือน้อยมาก (ดูการจัดสรรหน่วยความจำของ Android ที่นี่)
กระบวนการ daemon การหยุดทำงานเนื่องจากหน่วยความจำไม่เพียงพอ (LMK) ของ Android จะตรวจสอบสถานะหน่วยความจำของระบบ Android ที่ทำงานอยู่และตอบสนองต่อ การใช้หน่วยความจำสูงด้วยการหยุดกระบวนการที่มีความสำคัญน้อยที่สุดเพื่อให้ ระบบทำงานในระดับที่ยอมรับได้
Daemon LMK จะใช้คะแนนหน่วยความจำไม่พอที่เรียกว่า oom_adj_score เพื่อจัดลำดับความสำคัญของกระบวนการที่กำลังทำงานเพื่อตัดสินใจว่าจะสิ้นสุดกระบวนการใด ระบบจะปิดกระบวนการที่มีคะแนนสูงก่อน ระบบจะปิดแอปในเบื้องหลังก่อน และปิดกระบวนการของระบบเป็นอันดับสุดท้าย ตารางต่อไปนี้ แสดงหมวดหมู่การให้คะแนน LMK จากสูงไปต่ำ ระบบจะปิดรายการในหมวดหมู่ที่มีคะแนนสูงสุดในแถวที่ 1 ก่อน
เครื่องมือสร้างโปรไฟล์หน่วยความจำ
เครื่องมือต่อไปนี้จะช่วยคุณค้นหาและวินิจฉัยปัญหาเกี่ยวกับหน่วยความจำได้ ด้วยวิธีต่อไปนี้
- ดูว่าแอปจัดสรรหน่วยความจำอย่างไรในช่วงระยะเวลาหนึ่ง คุณจะเห็นกราฟแบบเรียลไทม์ ของปริมาณหน่วยความจำที่แอปใช้ จำนวนออบเจ็กต์ Java ที่จัดสรร และเวลาที่เกิดระบบจัดการหน่วยความจำที่ไม่ใช้แล้ว
- เริ่มเหตุการณ์ระบบจัดการหน่วยความจำที่ไม่ใช้แล้วและถ่ายสแนปชอตของฮีป Java ขณะที่แอปทํางาน
- บันทึกการจัดสรรหน่วยความจำของแอป ตรวจสอบออบเจ็กต์ที่จัดสรรทั้งหมด และดู สแต็กเทรซสำหรับการจัดสรรแต่ละรายการ
หากเกมทำงานบนเอนจินดั้งเดิม ให้ใช้ HWAddress Sanitizer เพื่อแก้ไขข้อบกพร่องในการจัดสรรหน่วยความจำดั้งเดิม
เครื่องมือสร้างโปรไฟล์หน่วยความจำของ Android Studio
Android Studio มีเครื่องมือสร้างโปรไฟล์หน่วยความจำ เป็นคอมโพเนนต์ของเครื่องมือสร้างโปรไฟล์ Android ซึ่งช่วยคุณระบุหน่วยความจำรั่วไหลและการเสียหน่วยความจำที่อาจทำให้เกิดอาการกระตุกแบบข้ามเฟรม ค้าง และแม้กระทั่งแอปขัดข้อง Profiler จะแสดงกราฟแบบเรียลไทม์ของการใช้หน่วยความจำของแอป และช่วยให้คุณบันทึกฮีปดัมป์ บังคับให้มีการระบบจัดการหน่วยความจำที่ไม่ใช้แล้ว และติดตามการจัดสรรหน่วยความจำได้
เครื่องมือสร้างโปรไฟล์หน่วยความจำของ Unity
หากใช้ Unity Engine เพื่อสร้างแอป คุณสามารถทำตามคำแนะนำในการสร้างโปรไฟล์หน่วยความจำของ Unity Unity มีเครื่องมือ 2 อย่างสำหรับวิเคราะห์การใช้งานหน่วยความจำในแอปพลิเคชันของคุณใน Unity
ตัวแรกคือเครื่องมือสร้างโปรไฟล์หน่วยความจำ ซึ่งเป็นเครื่องมือสร้างโปรไฟล์ในตัวที่ให้ข้อมูลพื้นฐานเกี่ยวกับตำแหน่งที่แอปพลิเคชันใช้หน่วยความจำ
เครื่องมือที่ 2 คือแพ็กเกจเครื่องมือสร้างโปรไฟล์หน่วยความจำ ซึ่งเป็นแพ็กเกจ Unity ที่คุณเพิ่มลงในโปรเจ็กต์ได้ แพ็กเกจจะเพิ่มหน้าต่างเครื่องมือสร้างโปรไฟล์หน่วยความจำอีกหน้าต่างหนึ่งลงใน Unity Editor เครื่องมือสร้างโปรไฟล์หน่วยความจำช่วยให้คุณวิเคราะห์การใช้งานหน่วยความจำในแอปพลิเคชันได้ละเอียดยิ่งขึ้น คุณสามารถจัดเก็บ และเปรียบเทียบสแนปชอตเพื่อค้นหาหน่วยความจำรั่วหรือดูเลย์เอาต์หน่วยความจำเพื่อค้นหา ปัญหาการกระจายหน่วยความจำได้
ข้อมูลเชิงลึกเกี่ยวกับหน่วยความจำของ Unreal
แอปที่สร้างโดย Unreal Engine สามารถใช้ Unreal Memory Insights เพื่อดูข้อมูลโดยละเอียดเกี่ยวกับการจัดสรรและการยกเลิกการจัดสรรหน่วยความจำ รวมถึงแท็กหน่วยความจำระดับต่ำ (LLM) และ Callstack ที่เชื่อมโยงกับ บล็อกหน่วยความจำ
ระบบการค้นหาข้อมูลเชิงลึกเกี่ยวกับหน่วยความจำสามารถค้นหาการจัดสรรแบบเรียลไทม์ได้ทุกเมื่อ ระบุการเปลี่ยนแปลงในการใช้งานหน่วยความจำ ค้นหาหน่วยความจำรั่วไหล และแยกความแตกต่างระหว่างการจัดสรรระยะสั้นกับการจัดสรรระยะยาว
ตั้งแต่ UE 5.4 เป็นต้นไป Memory Insights จะรองรับการติดตามหน่วยความจำด้วย Callstack สำหรับ โปรเจ็กต์ Android
ข้อมูลเชิงลึกเกี่ยวกับหน่วยความจำเหลือน้อย
Android มีการเรียกกลับและ API ที่ช่วยให้คุณลดข้อกำหนดด้านหน่วยความจำของเกม และระบุสาเหตุที่ระบบสิ้นสุดการเรียกใช้เกมก่อนหน้านี้
Callback
อย่าลงทะเบียนสำหรับการเรียกกลับ trim
ที่เลิกใช้งานแล้ว Android ไม่มี API สำหรับตรวจหาเหตุการณ์แรงกดดันของหน่วยความจำดั้งเดิมเมื่อระบบทำงานจนถึงขีดจำกัดของหน่วยความจำ
เนื่องจาก Callback การตัดไม่ได้ช่วยป้องกันการสิ้นสุดเนื่องจากหน่วยความจำเหลือน้อย
Android จึงเลิกใช้งานทั้งหมด
ยกเว้น TRIM_MEMORY_UI_HIDDEN
และ TRIM_MEMORY_BACKGROUND
การสิ้นสุดการแข่งขัน
Android พยายามใช้หน่วยความจำทั้งหมดที่มีเพื่อแคชแอปและเกมเพื่อให้โหลดได้อย่างรวดเร็ว (ปรับปรุงประสบการณ์ของผู้ใช้) แต่เมื่อหน่วยความจำเหลือน้อย ระบบจะปิดแอปและเกมที่ใช้หน่วยความจำมากที่สุดเพื่อเพิ่มหน่วยความจำสำหรับการทำงานของอุปกรณ์ตามปกติ
ข้อมูล ข้อมูลเชิงลึก และแนวทางปฏิบัติแนะนำที่จะช่วยให้คุณใช้หน่วยความจำของเกมได้ดียิ่งขึ้นมีดังนี้
- ใช้
ApplicationExitInfo: API นี้จะแสดงเหตุผลที่ระบบ Android ปิดการเรียกใช้เกมก่อนหน้านี้ ใช้ApplicationExitInfoเพื่อตรวจสอบว่าหน่วยความจำเหลือน้อยเป็นสาเหตุที่ทำให้กระบวนการก่อนหน้านี้หยุดทำงานหรือไม่ ตรวจสอบว่าเกมถูกปิดเนื่องจากหน่วยความจำเหลือน้อยหรือไม่ เพื่อให้สามารถเพิ่มประสิทธิภาพเกมให้ใช้หน่วยความจำน้อยลงในอุปกรณ์นั้น - ดูRAM จริงทั้งหมด
เพื่อป้องกันไม่ให้ระบบปิดเกมเมื่อเกมอยู่เบื้องหน้าและเพื่อให้ตรงกับความสามารถของอุปกรณ์ ให้ดู RAM จริงทั้งหมดต่ออุปกรณ์เพื่อปรับการใช้งานหน่วยความจำของเกมอย่างละเอียดตามนั้น หากเป้าหมายคือการป้องกันไม่ให้ระบบปิดแอปหลังจากย้ายไปทำงานเบื้องหลังไม่นาน (เพื่อให้ผู้เล่นทำงานหลายอย่างพร้อมกันได้) ให้ใช้ Callback trim (
TRIM_MEMORY_UI_HIDDENโดยเฉพาะ) เพื่อลดการใช้งานหน่วยความจำของเกม