เหตุใดหน่วยความจำที่รั่วไหลจึงปรากฏ malloced ไปที่ kernel_task และทำไม OS X จึงไม่สามารถรวบรวมขยะได้
ก่อนหน้านี้ฉันได้รับแจ้งว่ามีสัญญาณว่าบางแอปพลิเคชันมีหน่วยความจำรั่วนั่นคือkernel_taskมีหน่วยความจำขนาดใหญ่ตามลำดับหน่วยเป็นกิกะไบต์ หากมีข้อผิดพลาดkextทำให้การใช้งานหน่วยความจำนี้เราคาดว่าจะเห็นความแตกต่างระหว่างหน่วยความจำที่จัดสรรและที่คาดว่าจะได้รับการจัดสรรคือ diff <(kextstat|tr -s ' ' | cut -d ' ' -f 5) <(kextstat| tr -s ' ' | cut -d ' ' -f 6) จะส่งคืนสิ่งอื่นนอกเหนือจากคำว่า 'Wired' และ 'Name' ในขณะที่เขียนวิทยานิพนธ์ของฉันฉันสังเกตเห็นว่าการเปลี่ยนไฟล์ PDF ในขณะที่เปิดอยู่ในหน้าตัวอย่างมักจะทำให้สิ่งเลวร้ายเกิดขึ้น: บางครั้งการใช้หน่วยความจำของkernel_taskสามารถเติบโตถึงประมาณแปดกิกะไบต์หรือมากกว่า ถ้าฉันฆ่าภาพตัวอย่างก็จะกลับสู่ปกติได้ทันที เห็นได้ชัดว่ามีบางอย่างผิดปกติและพรีวิวกำลังรั่วหน่วยความจำภายใต้เงื่อนไขเหล่านี้ ดังนั้นคำถามของฉันคือ: ถ้าฉันรู้ว่ากระบวนการรั่ว ram ผ่านการเพิ่มขึ้นอย่างกะทันหันและคาดไม่ถึงkernel_taskทำไมOS Xจึงไม่สามารถรู้ได้ว่ามีบางอย่างผิดปกติ ถ้าฆ่าดูตัวอย่างเรียกคืนของฉันหายไปmalloc()'d หน่วยความจำทำไมไม่ดาร์วินทำเก็บขยะโดยอัตโนมัติสำหรับฉันหรือไม่ ฉันมีความเข้าใจผิดพื้นฐานเกี่ยวกับการจัดการหน่วยความจำหรือไม่ แก้ไข: (15/9/15) นี่คือการสาธิตสิ่งที่ฉันพูดถึง ก่อนอื่นฉันสังเกตเห็นการใช้หน่วยความจำสูงด้วยkernel_task(หมายเหตุเปิดตัวอย่างอยู่ที่ด้านล่างของ Activity Monitor …