導讀:C++內存泄漏問題的分析、定位一直是Android平臺上困擾開發人員的難題。因爲地圖渲染、導航等核心功能對性能要求很高,高德地圖APP中存在大量的C++代碼。解決這個問題對於產品質量尤爲重要和關鍵,高德技術團隊在實踐中形成了一套自己的解決方案。
分析和定位內存泄漏問題的核心在於分配函數的統計和棧回溯。如果只知道內存分配點不知道調用棧會使問題變得格外複雜,增加解決成本,因此兩者缺一不可。
Android中Bionic的malloc_debug模塊對內存分配函數的監控及統計是比較完善的,但是棧回溯在Android體系下缺乏高效的方式。隨着Android的發展,Google也提供了棧回溯的一些分析方法,但是這些方案存在下面幾個問題:
1.棧回溯的環節都使用的libunwind,這種獲取方式消耗較大,在Native代碼較多的情況下,頻繁調