【Android面试八股文】性能优化相关面试题: 什么是内存抖动?什么是内存泄漏?

时间:2024-07-04 18:14:26

文章目录

  • 一、什么是内存抖动?
    • 内存抖动的问题
      • 卡顿
      • OOM(Out Of Memory)
  • 二、什么是内存泄漏(Memory Leak)?
      • 引用计数法
      • 可达性分析法

一、什么是内存抖动?

在Java中,每创建一个对象,就会申请一块内存,存储对象信息;

每分配一块内存,程序的可用内存也就少一块;

当程序被占用的内存达到一定临界程度,GC 也就是垃圾回收器(Garbage Collector)就会出动,来释放掉一部分不再被使用的内存。

这本身没有问题,但是当频繁创建对象就会造成内存不断地攀升,在回收了之后又迅速涨起来,接着又一次的回收。在短时间内反复地发生内存增长和回收,这就是内存抖动(Memory Churn)

我们可以通过 Android StudioMemory Profiler 来直观地观察到这种现象:

在这里插入图片描述
因此,内存抖动的定义如下:

内存抖动是指系统在处理任务时,由于频繁地进行内存页面的调度和交换,导致系统性能显著下降的现象。通常发生在系统内存不足时,操作系统不得不频繁地将内存页面从物理内存(RAM)交换到磁盘上的虚拟内存(swap space),然后再次调入内存,如此往复,造成了大量的磁盘读写操作,从而严重影响系统的响应速度和整体性能。