Android 在 API 23 增長了運行時 GC 狀態的獲取接口,用法以下:spa
Map<String, String> map = Debug.getRuntimeStats();
String stat = Debug.getRuntimeStat("art.gc.gc-count");
截止目前(API 28),能獲取到的值以下表:code
運行時狀態名稱 | 含義 | 例子 |
art.gc.gc-count | 當前進程的 GC 次數 | 164 |
art.gc.gc-time | 當前進程的 GC 總耗時,單位是毫秒 | 62364 |
art.gc.bytes-allocated | 當前進程 art 虛擬機已分配的內存大小,單位字節 | 1463948408 |
art.gc.bytes-freed | 當前進程 GC 成功回收的字節數 | 1313493084 |
art.gc.blocking-gc-count | 當前進程的阻塞 GC 次數 | 2 |
art.gc.blocking-gc-time | 當前進程的阻塞 GC 總耗時,單位是毫秒 | 804 |
art.gc.gc-count-rate-histogram | 系統每10秒會計算一次 GC 次數,這個字段表明該進程運行到如今的每10秒 GC 次數的直方圖。好比此例子中,意味着進程運行到如今有34503個的10秒內沒有 GC 的狀況,而有8個10秒內 GC 了5次的狀況。 | 0:34503,1:45350,2:11281,3:8088,4:43,5:8 |
art.gc.blocking-gc-count-rate-histogram | 同上,不過是阻塞的 GC | 0:99269,1:1,2:1 |