内存优化(一)

2021-01-24  本文已影响0人  Dear月
分析内存常用工具

top/procrank
meinfo
Procstats
DDMS
MAT
Finder-Activity
LeakCanary
LeakInspector
工具很多,掌握原理方法,工具随便找两个能用就行

1、Java 虚拟机 简单讲解一下
image.png
image.png
线程私有

程序计数器(PC)
相当于一个执行代码的指示器,用来确认下一行执行的代码的地址,每个线程都有一个,没有OOM的区
虚拟机栈
存储着 局部变量,方法的返回地址
OOM stackoverflow 异常会在虚拟机栈中报错
重要特点
没有内存碎片*
本地方法栈
存放native方法

在 hotspotVM 把虚拟机栈和本地方法栈合并为一个栈

共享数据区

方法区

2、GC垃圾回收器(GC如何 确定内存回收)

应用计数法

ex:
Object o1=new Object(); 计数+1=1(内存引用的内存)
Object o2;
o2=o1; 计数+1=2
o1=null; 计数为1 o1和o2都不会回收
计数器不归零,引用块不会被回收

可达性分析算法

可达分析算法

例如上图 当ObjA =null后,ObjB、Objc对ObjA 的引用链断开,Gc就会视除了GcRoot 以外的的为垃圾,必要的时候就会回收,GC 会扫描两次。

引用类型
(引用分 强引用 软引用 弱引用 虚引用)
虚引用(PhantomReference):功能-不会影响到对象的生命周期,但是能让程序员知道对象什么时候被回收了
弱引用(WeakReference):第一次扫到了,就标记下来,第二次扫到直接回收
软引用(SoftReference)内存不足时回收,存放一些重要性不是很强又不能随便让清除的对象,比如图片切换到后台不需要马上显示了
强引用Object obj=new Object();

上一篇 下一篇

猜你喜欢

热点阅读