JVM java虚拟机 (基于栈,指令多,复制多,速度慢)
.java -> .class-> .jar (多个.class 加载方式会慢)
DVM Dalvik Virtual Machine(基于寄存器,指令大,指令少,)
.java -> .class-> .dex(工具会去除冗余信息,所有class文件被放在一起)
ART(Android Runtime) 替代了DVM(4.4发布 ,5.0使用)在 ART 中,系统在安装应用程序时会
进行一次 AOT (ahead of time compilation ,预编译) 这样运行的效率就大大提升了,缺点就是预编译导致安装的时间变长,预编译之后占用的空间会变大,7.0之后使用JIT+AOT
使用 systrace
python systrace.py --time=10 -o newtrace.html scahed gfx view wm
内存泄漏:
对于一些需要Context的类,除了dialog(这个必须为Activity)其他的不跟随Activity生命周期,需要使用Application的Context 以防止内存泄漏
-
针对handle的内存泄漏有两种处理方式
1.在activity销毁的时候进行onDestory()的时候进行 mHandler .removeCallbacksAndMessages (null) ;
2.使用静态的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的时候需要进行销毁