文章目录
- 一、什么是内存抖动?
-
- 内存抖动的问题
-
- 卡顿
- OOM(Out Of Memory)
- 二、什么是内存泄漏(Memory Leak)?
-
-
- 引用计数法
- 可达性分析法
-
一、什么是内存抖动?
在Java中,每创建一个对象,就会申请一块内存,存储对象信息;
每分配一块内存,程序的可用内存也就少一块;
当程序被占用的内存达到一定临界程度,GC
也就是垃圾回收器(Garbage Collector)
就会出动,来释放掉一部分不再被使用的内存。
这本身没有问题,但是当频繁创建对象就会造成内存不断地攀升
,在回收
了之后又迅速涨起来
,接着又一次的回收
。在短时间内反复地发生内存增长和回收,这就是内存抖动(Memory Churn)
。
我们可以通过 Android Studio
的 Memory Profiler
来直观地观察到这种现象:
因此,内存抖动的定义如下:
内存抖动是指系统在处理任务时,由于频繁地进行内存页面的调度和交换,导致系统性能显著下降的现象。通常发生在系统内存不足时,操作系统不得不频繁地将内存页面从物理内存(RAM)交换到磁盘上的虚拟内存(swap space),然后再次调入内存,如此往复,造成了大量的磁盘读写操作,从而严重影响系统的响应速度和整体性能。