Instruments ObjectAlloc: คำอธิบายของ Live Bytes & Overall Bytes


86

ฉันใช้เครื่องมือ ObjectAlloc ของ Instument เพื่อพยายามทำความเข้าใจว่าหน่วยความจำแอปพลิเคชันของฉัน (iPhone) กำลังทำอะไรอยู่และทำเมื่อใดและที่ไหน

ฉันต้องการคำอธิบายพื้นฐานเกี่ยวกับสถิติเหล่านี้:

  • ไบต์สด
  • #การดำรงชีวิต
  • #ชั่วคราว
  • ไบต์โดยรวม

เมื่อฉันพยายามหาจำนวนหน่วยความจำที่แอปพลิเคชันของฉันใช้ฉันจะดู Live Bytes หรือ Overall Bytes หรือไม่ นี่รวมถึงหน่วยความจำที่รั่วไหลหรือไม่ Transitory object คืออะไร?

ขอบคุณ


6
คอลัมน์มีคำอธิบายสั้น ๆ เมื่อคุณวางเมาส์เหนือส่วนหัว
Piotr Byzia

คำตอบ:


110

ObjectAlloc ติดตามการจัดสรรหน่วยความจำและการจัดสรรหน่วยความจำทั้งหมดในช่วงเวลาที่โปรแกรมของคุณกำลังทำงานอยู่

Living bytes, or Net bytesเป็นวิธีการที่หน่วยความจำมากใบสมัครของคุณจะใช้ในเวลาที่คุณเลือกในระยะเวลา ซึ่งจะรวมถึงหน่วยความจำที่รั่วไหลเนื่องจากหน่วยความจำที่รั่วไหลจะไม่มีการจัดสรร

#Livingคือจำนวนการจัดสรรของขนาด / ประเภทออบเจ็กต์ที่แน่นอนที่เกิดขึ้น (และยังคงจัดสรรอยู่) สิ่งนี้มีประโยชน์มากเมื่อต้องการหารอยรั่ว

ตัวอย่างเช่นหากคุณดำเนินการซ้ำ ๆ (เช่นออกมาจากตัวควบคุมมุมมองโมดอล) และคุณเห็นว่า#Livingวัตถุนั้นเติบโตขึ้นในปริมาณที่เท่ากันในแต่ละครั้งแสดงว่าคุณอาจรั่วไหลของวัตถุ จากนั้นคุณสามารถยืนยันได้โดยการเจาะลึกลงไปและดูบรรทัดที่แน่นอนของรหัสที่จัดสรรวัตถุและแม้แต่ดูดัชนีเวลาที่สร้างขึ้น

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


3
คุณจะพยายามเพิ่มประสิทธิภาพอะไรในแง่ของ Bytes โดยรวม? การพยายามให้ตัวเลขมีขนาดเล็กหมายถึงประสิทธิภาพที่ดีขึ้นหรือไม่?
Dan Rosenstark

4
ใช่ถูกต้อง. สาเหตุทั่วไปของปัญหาด้านประสิทธิภาพคือการเรียกใช้รหัสเดียวกันมากกว่าหนึ่งครั้งโดยไม่ได้ตั้งใจ เครื่องมือการจัดสรรอาจเป็นวิธีที่ดีในการสังเกตเห็น ตัวอย่างเช่นแม้ว่าวัตถุพิเศษจะไม่รั่วไหลคุณอาจพูดว่า "ทำไมฉันถึงสร้างวัตถุ 3 ชิ้นนั้นควรจะมีเพียงชิ้นเดียวเท่านั้น!"
Ken Aspeslagh

2
ไบต์สดคือจำนวนหน่วยความจำที่แอปของคุณใช้อยู่ ภาพรวมเป็นเพียงการจัดสรรทั้งหมดที่แอปของคุณทำ (รวมถึงหน่วยความจำที่ได้รับการปลดปล่อย)
Ken Aspeslagh

1
@KenAspeslagh ทำไมฉันถึงสนใจไบต์โดยรวมถ้ามันมีวัตถุที่ปล่อยด้วย
Dejell

3
หากคุณกำลังปรับแต่งประสิทธิภาพคุณจะต้องลดจำนวนการจัดสรรที่แอปของคุณทำเมื่อทำงาน (แม้ว่าคุณจะไม่ได้เปิดเผยการจัดสรรก็ตาม) การจัดสรรที่มากเกินไปมักเป็นตัวบ่งชี้ว่าคุณทำผิด
Ken Aspeslagh

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.