JVM & DVM&泄漏

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 mActivity;
       public  MyHandler(BaseActivity baseActivity){
          mActivity  = new WeakReference baseactivity
    } 
    @override 
      public  void handlerMessage(Message msg){
      if(mActivity!= null ){
         //do
      }
    } }
    
  • 针对Bitmap 使用之后销毁 Cursor FIle Finally的时候需要进行销毁

你可能感兴趣的:(JVM & DVM&泄漏)