觀看2018 wwdc中的iOS Memory Deep Dive視頻做的一些筆記.
1、查看虛擬內(nèi)存區(qū)域分配:vmmap
如:
1)、列出對象占用虛擬內(nèi)存大小
vmmap --summary App.memgraph
圖1.1 列出對象占用虛擬內(nèi)存大小截圖
DiRTY SIZE + SWAPPED SIZE = 真實虛擬內(nèi)存大小
2)、列出具體的地址區(qū)間
vmmap App.memgraph
圖1.2 具體的地址區(qū)間截圖
3)、查看虛擬內(nèi)存中的CG image的信息
vmmap --verbose PlanetPics.memgraph
| grep "CG image"圖1.3 虛擬內(nèi)存中的CG image的信息截圖
2、檢查泄漏:leaks
1)、查看內(nèi)存泄漏情況
leaks App.memgraph
如:leaks retain_cycle.memgrahp
2.1 內(nèi)存泄漏命令截圖
2)、查看0x000000014b9b400地址泄漏的調(diào)用數(shù)信息
leaks --traceTree 0x000000014b9b400 PlanetPics.memgraph
2.2 內(nèi)存泄漏調(diào)用棧截圖
3、堆內(nèi)存:heap
1)、查看堆內(nèi)存的情況
heap App.memgraph
如:heap PlacetPics.memgraph
3.1 查看堆內(nèi)存的情況截圖
2)、將堆內(nèi)存按照從大到小進行排序
heap App.memgraph -sortBySize
如:
heap -sortBySize PlanetPics.memgraph
3.2 將堆內(nèi)存按照從大到小進行排序截圖
3)、查看對象的地址情況
heap App.memgraph -addresses all | <classes-pattern>
如:
查看NSConcreteData對象的堆內(nèi)存的使用情況
heap -addresses NSConcreteData PlacnetPics.memgraph
3.3 查看NSConcreteData對象的堆內(nèi)存的使用情況截圖
4、分配棧記錄:malloc_history
在使用命令之前必須在xocde中開啟Malloc Stack,如圖七所示
3.1 開啟棧記錄
命令: malloc_history App.memgraph [address]
如:
1)、查看地址0x1016e6ff0堆內(nèi)存的調(diào)用結(jié)構(gòu)
malloc_history -callTree PlanetPics.memgraph 0x1016e6ff0
3.2 0x1016e6ff0調(diào)用棧信息截圖
2)、查看地址0x000000014b9b4000調(diào)用棧信息
malloc_history PlanetPics.memgraph --fullStacks 0x000000014b9b4000
3.3 查看地址0x000000014b9b4000調(diào)用棧信息截圖
3)、查看地址0x00000001439b4000 地址調(diào)用棧信息
malloc_history PlanetPics.memgraph --fullStacks 0x00000001439b4000
3.4 查看地址0x00000001439b4000 地址調(diào)用棧信息
參考地址:
[1] : https://developer.apple.com/videos/play/wwdc2018/416/#