首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Socket 線程崩潰 SIGSEGV:內存洩漏排查

     編輯:程式設計綜合問答

現象

Socket 接收線程運行一段時間後崩潰:Fatal signal 11 (SIGSEGV) at 0x96ebeffc (code=2)。

典型原因與修復

  1. 循環中頻繁創建對象:while(true) 內 new ByteBuffer()、new String()、new JSONObject() 等,導致 GC 壓力大、甚至 OOM 觸發 SIGSEGV。
    • 修復:對象移出循環復用,或使用對象池。
  2. JNI 邊界錯誤:Native 代碼訪問已釋放的 Java 對象、數組越界。
    • 修復:開啟 CheckJNI、AddressSanitizer 排查。
  3. 線程棧溢出:遞歸過深或大棧帧局部變量。
    • 修復:改迭代、減少局部大數組。

排查工具

  • adb logcat 完整堆棧。
  • Android Studio Profiler 觀察內存曲線、GC 頻率。
  • NDK_STACK 解析 Native 崩潰地址。

核心原則:熱路徑零分配,邊界必檢查,Native 崩潰用 Sanitizer。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved