บันทึกการจัดสรรแบบเนทีฟ
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
หากคุณเขียนโค้ดเนทีฟและกังวลเกี่ยวกับการใช้หน่วยความจำของโค้ดดังกล่าว คุณควรตรวจสอบการจัดสรรเนทีฟของแอปเพื่อดูว่ามีวิธีเพิ่มประสิทธิภาพหรือไม่
เหตุผลที่ควรวิเคราะห์หน่วยความจำของแอป
Android มีสภาพแวดล้อมหน่วยความจำที่มีการจัดการ เมื่อ Android พิจารณาแล้วว่าแอปของคุณไม่ได้ใช้ออบเจ็กต์บางรายการแล้ว ตัวเก็บขยะจะปล่อยหน่วยความจำที่ไม่ได้ใช้กลับไปยังกอง Android ปรับปรุงวิธีค้นหาหน่วยความจำที่ไม่ได้ใช้อยู่อย่างต่อเนื่อง แต่บางครั้งใน Android ทุกเวอร์ชัน ระบบจะต้องหยุดโค้ดของคุณชั่วคราว ส่วนใหญ่แล้ว คุณจะไม่เห็นการหยุดชั่วคราว
อย่างไรก็ตาม หากแอปของคุณจัดสรรหน่วยความจำเร็วกว่าที่ระบบจะรวบรวมได้ แอปอาจทำงานล่าช้าขณะที่เครื่องมือรวบรวมหน่วยความจำเพิ่มพื้นที่หน่วยความจำให้เพียงพอสำหรับการจัดสรรของคุณ ความล่าช้าอาจทําให้แอปข้ามเฟรมและทําให้แอปทำงานช้าอย่างเห็นได้ชัด
ดูข้อมูลเกี่ยวกับแนวทางปฏิบัติด้านการเขียนโปรแกรมที่สามารถลดการใช้หน่วยความจำของแอปได้ที่จัดการหน่วยความจำของแอป
ภาพรวมการจัดสรรเนทีฟ
เมื่อคุณเรียกใช้งานติดตามการใช้หน่วยความจำ (การจัดสรรแบบเนทีฟ) เครื่องมือวิเคราะห์ Android Studio จะติดตามการจัดสรรและการเลิกจัดสรรออบเจ็กต์ในโค้ดเนทีฟตามระยะเวลาที่คุณระบุ และแสดงข้อมูลต่อไปนี้
- การจัดสรร: จํานวนออบเจ็กต์ที่จัดสรรโดยใช้
malloc()
หรือโอเปอเรเตอร์ new
ในช่วงระยะเวลาที่เลือก
- Deallocations: จํานวนออบเจ็กต์ที่ยกเลิกการจัดสรรโดยใช้
free()
หรือโอเปอเรเตอร์ delete
ในช่วงระยะเวลาที่เลือก
- ขนาดการกําหนด: ขนาดรวมในไบต์ของการกําหนดทั้งหมดในระยะเวลาที่เลือก
- Deallocations Size: ขนาดรวมในหน่วยไบต์ของหน่วยความจําทั้งหมดที่ปลดปล่อยระหว่างระยะเวลาที่เลือก
- จํานวนทั้งหมด: ค่าในคอลัมน์การจัดสรรลบด้วยค่าในคอลัมน์Deallocations
- ขนาดที่เหลือ: ค่าในคอลัมน์ขนาดการจัดสรรลบด้วยค่าในคอลัมน์ขนาดการจอง

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

โดยค่าเริ่มต้น เครื่องมือวิเคราะห์จะใช้ขนาดตัวอย่าง 2048 ไบต์: ระบบจะจับภาพหน่วยความจำทุกครั้งที่มีการจองหน่วยความจำ 2048 ไบต์ การเก็บตัวอย่างน้อยลงส่งผลให้มีการจับภาพบ่อยขึ้น ซึ่งจะให้ข้อมูลที่แม่นยำมากขึ้นเกี่ยวกับการใช้หน่วยความจำ การเก็บตัวอย่างจำนวนมากขึ้นจะให้ข้อมูลที่แม่นยำน้อยลง แต่จะใช้ทรัพยากรของระบบน้อยลงและปรับปรุงประสิทธิภาพขณะบันทึก หากต้องการเปลี่ยนขนาดตัวอย่าง โปรดดูแก้ไขการกำหนดค่าการบันทึก
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-27 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2025-07-27 UTC"],[],[],null,["# Record native allocations\n\nIf you're writing native code and concerned about its memory usage, it's helpful\nto profile your app's native allocations to discover if there's opportunity to\noptimize.\n\nWhy you should profile your app memory\n--------------------------------------\n\nAndroid provides a [managed memory\nenvironment](/topic/performance/memory-overview)---when Android determines that\nyour app is no longer using some objects, the garbage collector releases the\nunused memory back to the heap. How Android goes about finding unused memory is\nconstantly being improved, but at some point on all Android versions, the system\nmust briefly pause your code. Most of the time, the pauses are imperceivable.\nHowever, if your app allocates memory faster than the system can collect it,\nyour app might be delayed while the collector frees enough memory to satisfy\nyour allocations. The delay could cause your app to skip frames and cause\nvisible slowness.\n\nFor information about programming practices that can reduce your app's memory\nuse, read [Manage your app's memory](/topic/performance/memory).\n\nNative allocations overview\n---------------------------\n\nWhen you run the [**Track Memory Consumption (Native Allocations)**](/studio/profile#start-profiling) task,\nthe Android Studio Profiler tracks allocations and deallocations of objects in\nnative code for the time period that you specify and provides the following\ninformation:\n\n- **Allocations** : A count of objects allocated using `malloc()` or the `new` operator during the selected time period.\n- **Deallocations** : A count of objects deallocated using `free()` or the `delete` operator during the selected time period.\n- **Allocations Size**: The aggregated size in bytes of all allocations during the selected time period.\n- **Deallocations Size**: The aggregated size in bytes of all freed memory during the selected time period.\n- **Total Count** : The value in the **Allocations** column minus the value in the **Deallocations** column.\n- **Remaining Size** : The value in the **Allocations Size** column minus the value in the **Deallocations Size** column.\n\nThe **Visualization** tab shows an aggregated view of all the objects related to\nnative code in the call stack during the time range selected. It essentially\nshows you how much total memory the callstack with the instances shown takes.\nThe first row shows the thread name. By default, the objects are stacked left to\nright based on allocation size; use the drop-down to change the ordering.\n\nBy default, the profiler uses a sample size of 2048 bytes: Every time 2048 bytes\nof memory are allocated, a snapshot of memory is taken. A smaller sample size\nresults in more frequent snapshots, yielding more accurate data about memory\nusage. A larger sample size yields less accurate data, but it consumes fewer\nsystem resources and improves performance while recording. To change the sample\nsize, see [Edit the recording configuration](/studio/profile#edit-recording)."]]