这两天在研究性能中内存方面的一块,网上也零散看了挺多文章,写得很细但是感觉不够整体,所以这篇算是总结一下吧,当个复习资料。
那么这里个人分为两个大部分,第一部分应用内的内存管理,主要是oom的理解,GC机制和内存泄露这三个小部分;另一部分是系统级别的内存管理,包括内存共享,进程创建到LMK也就是消亡的一个简要了解,具体到某个细节,网上挺多的,就不细说了,后续看心情再补写⑧!
应用内的内存管理
一)为什么会发生OOM
Android系统为每一个运行的程序都指定了一个最大运行内存,超过这个值则会触发OOM机制,反应在界面就是闪退、crash现象,导致OOM发生的原因比如内存泄露或者是代码不考虑后果使用大量的资源,都有可能导致OOM出现的。OOM的临界值可以通过adb shell getprop | grep ‘heap’查看到
比如这里,heapgrowthlimit是默认单个app最大内存,heapsize则是manifest文件里设置android:largeHeap=”true”,则会使用这个最大值。
二)android里的GC机制
GC机制沿用了java的GC机制,当需要新内存去分配对象的时候而剩余不够的时候,会触发GC,把无用的对象回收掉,其中一个重要的算法便是分代式算法,这个算法把虚拟机分为年轻代、老年代和持久代,