第233篇 OOM 与内存抖动:从分配速率看问题
先把结论放在前面:OOM 与内存抖动是两类不同的病,但共用同一个根源——分配速率大于回收速率。OOM 是"某时刻申请超过可用内存"的硬失败,抖动是"内存水位反复升降导致 GC 频繁"的慢性损耗。只盯着OutOfMemoryError去排查,会漏掉真正影响体感的抖动。面试里这题属于"性能优化的核心区"。答得浅的是"复用对象、及时释放、避免大对象";答得深的是能讲清 Java 堆、Native 堆、Bitmap 三块内存的分配路径,解释 GC 停顿与分配速率的关系,说清dalvik.vm.heapgrowthlimit与largeHeapSize的作用边界,以及内存抖动在指标上如何表现为"PSS 没涨但 jank 变多"。进程内存的四块构成一个 Android 进程的内存不是一块,而是多块叠加。搞清归属是定位问题的第一步。内存区域归属典型占用排查入口Java 堆ART 管理,可 GC对象、集合、类元数据heap dump、hprofNative 堆