JVM java虛擬機$栌獭(基于棧穗慕,指令多才顿,復(fù)制多边臼,速度慢)
.java -> .class-> .jar (多個.class 加載方式會慢)
DVM Dalvik Virtual Machine(基于寄存器磷斧,指令大动分,指令少毅糟,)
.java -> .class-> .dex(工具會去除冗余信息,所有class文件被放在一起)
ART(Android Runtime) 替代了DVM(4.4發(fā)布 ,5.0使用)在 ART 中,系統(tǒng)在安裝應(yīng)用程序時會
進(jìn)行一次 AOT (ahead of time compilation ,預(yù)編譯) 這樣運行的效率就大大提升了澜公,缺點就是預(yù)編譯導(dǎo)致安裝的時間變長姆另,預(yù)編譯之后占用的空間會變大,7.0之后使用JIT+AOT
使用 systrace
python systrace.py --time=10 -o newtrace.html scahed gfx view wm
內(nèi)存泄漏:
對于一些需要Context的類坟乾,除了dialog(這個必須為Activity)其他的不跟隨Activity生命周期迹辐,需要使用Application的Context 以防止內(nèi)存泄漏
-
針對handle的內(nèi)存泄漏有兩種處理方式
1.在activity銷毀的時候進(jìn)行onDestory()的時候進(jìn)行 mHandler .removeCallbacksAndMessages (null) ;
2.使用靜態(tài)的handler類如:private static class MyHandler extends Handler{ private final WeakReference<BaseActivity> mActivity; public MyHandler(BaseActivity baseActivity){ mActivity = new WeakReference<BaseActivity> baseactivity } @override public void handlerMessage(Message msg){ if(mActivity!= null ){ //do } } }
針對Bitmap 使用之后銷毀 Cursor FIle Finally的時候需要進(jìn)行銷毀