内存管理

概述

有时候,线上会出现一些”莫名其妙”的bug,比如用户用的好好的,突然就爆出一个空指针异常,这个异常的提示信息如下:

1
2
java.lang.RuntimeException: Unable to start activity
ComponentInfo{xxx.xxx.xxx/xxx.xxx.xxxActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'xxx' on a null object reference

看上去好像就是一般的空指针,但这个异常发生在启动Activity的时候。ActivityThread的performLaunchActivity方法确实有catch

1
2
3
4
5
6
7
8
9
...
} catch (Exception e) {
if (!mInstrumentation.onException(activity, e)) {
throw new RuntimeException(
"Unable to start activity " + component
+ ": " + e.toString(), e);
}
}
...

Read More

内存溢出分析

概述

OOM(Out of Memory)即内存溢出,是因为应用所需要分配的内存超过系统对应用内存的阈值,而抛出java.lang.OutOfMemoryError错误。

其根本原因是对象的生命周期不一致,导致内存泄漏。

内存抖动

内存抖动是指在短时间内有大量的对象被创建或者被回收的现象,主要是循环中大量创建、回收对象。

内存泄漏和内存溢出的区别

  • 内存溢出

Read More