buder

201709011工作日记--ART与Dalvik&&静态类与非静态类

1.ART 与 Dalvik 的优缺点对比

  什么是Dalvik:Dalvik是Google公司自己设计用于Android平台的Java虚拟机。dex格式是专为Dalvik应用设计的一种压缩格。Dalvik允许同时运行多个虚拟机的实例,并且每一个应用作为独立的Linux进程执行。  目前在Android4.4及其以下的版本中,应该全都是使用的Dalvik这种模式。

  什么是ART:在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行,这一机制并不高效,但让应用安装比较快。  ART在应用安装时就预编译字节码到机器语言,在移除解释代码这一过程后,应用程序执行将更有效率,启动更快。

  区别:

  Dalvik在应用程序启动时,JIT通过进行连续的性能分析来优化程序代码的执行,在程序运行的过程中,Dalvik虚拟机在不断的进行将字节码编译成机器码的工作

  ART引入了AOT这种预编译技术,在应用程序安装的过程中,ART就已经将所有的字节码重新编译成了机器码应用程序运行过程中无需进行实时的编译工作,只需要进行直接调用.因此,ART极大的提高了应用程序的运行效率,同时也减少了手机的电量消耗,提高了移动设备的续航能力,在垃圾回收等机制上也有了较大的提升。

  相对于Dalvik虚拟机模式,ART模式下Android应用程序的安装需要消耗更多的时间,同时也会占用更大的储存空间(指内部储存,用于储存编译后的代码),但节省了很多Dalvik虚拟机用于实时编译的时间

 2. 为什么Java内部类要设计成静态和非静态

   从字面上看,一个被称为静态嵌套类,一个被称为内部类。

  从字面的角度解释是这样的:

  什么是嵌套?嵌套就是我跟你没关系,自己可以完全独立存在,但是我就想借你的壳用一下,来隐藏一下我自己(真TM猥琐)。

  什么是内部?内部就是我是你的一部分,我了解你,我知道你的全部,没有你就没有我。(所以内部类对象是以外部类对象存在为前提的)  

  非静态内部类有一个很大的优点:可以自由使用外部类的所有变量和方法。

  静态内部类就是个独立的类。 之所以要弄这么个东西,只是起到一个注释的效果,而且这个注释可静态检查。 比如有A,B两个类,B有点特殊,虽然可以独立存在,但只被A使用。 这时候怎么办?如果把B并入A里,复杂度提高,搞得A违反单一职责。如果B独立,又可能被其他类(比如同一个包下的C)依赖或者使用,不符合设计的本意。所以不如将其变成A.B,等于添加个注释,告诉其他类别使用B了,它只跟A玩。

  非静态的才是真正的内部类,对其外部类有个引用

  如果你在这个类里面需要外面类的引用,就不要用static。反之就尽量用static,这样可以提高性能。

  Inner类的实例有Outer的实例的指针(即可以访问Outer的成员)。而StaticInner类没有。之所以设计成这样,是因为他们区别还是挺大的,应用场景不同。

  使用的实例代码如下:

  

1 static class Outer {
2     class Inner {}
3     static class StaticInner {}
4 }
5 
6 Outer outer = new Outer();
7 Outer.Inner inner = outer.new Inner();
8 Outer.StaticInner inner0 = new Outer.StaticInner();

 

posted on 2017-09-11 15:17  buder  阅读(139)  评论(0编辑  收藏  举报

导航