Java程序执行流程

1、Java程序的执行流程

如图所示,首先Java源代码文件(.java后缀)会被Java编译器(Java Compiler)编译为字节码文件(.class后缀),然后由JVM中的类加载器(Class Loader)加载各个类的字节码文件,加载完毕后,交由JVM执行引擎(Execution Engine)执行。在整个程序执行过程中,JVM会用一段空间来储存程序执行期间需要用到的数据和相关信息,这段空间一般被称作Runtime Data Area(运行时数据区域),也就是我们常说的JVM内存。因此,在Java中我们常常说到的内存管理就是针对这段空间进行管理(如何分配和回收内存空间)

2、Java虚拟机与Dalvik虚拟机的区别

(1)Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式dex(Dalvik Executable)

(2)Java编译器将.java文件转为字节码文件(即.class文件),如果是Java虚拟机,那么可以直接加载.class文件,而如果是Dalvik虚拟机,还需要使用AndroidSdk提供的dx工具(即dx.bat),将.class文件转换为.dex文件,而后Dalvik虚拟机会从其中读取指令和数据。实际上.dex文件就是把多个class文件中的常量、方法等放到一起。每个类文件中都存在一个常量池,在dex文件中由一个常量池来管理,.dex可执行文件比转换前的.class文件体积更小。

(3)Java虚拟机与Dalvik虚拟机架构不同

    Java虚拟机基于栈架构,程序在运行时虚拟机需要频繁地从栈上读取或写入数据。这个过程需要更多的指令分派与内存访问,会消耗不少CPU的时间。

    Dalvik虚拟机基于寄存器架构,寄存器是CPU上的一块存储空间,数据的访问通过寄存器间直接传递,这样的访问方式比基于栈方式快得多。

3、Dalvik和ART的区别

(1)Dalvik环境下,应用每次运行时,字节码都需要通过即时编译器(Just In Time,JIT)转换为机器码,这样每次应用启动的速度就会非常的慢。ART环境中,应用会在安装的时候,就将字节码预编译(Ahead of Time,AOT)成机器码,使其成为真正的本地应用。因此在ART环境中,应用除了在安装的时间上比Dalvik要长以外,启动和执行的速度都会比Dalvik要更快。

(2)ART占用的空间比Dalvik大,实际上就是用空间换时间,之所以会更大也是因为预编译的时候会将字节码转换成机器码,空间大概会增加10%~20%。

(3)ART不用每次运行时都重复编译,减少了CPU的使用频率,降低了能耗。

总的来说,ART和Dalvik的主要区别就是一个是预编译(Ahead of Time,AOT),另外一个是即时编译(Just In Time,JIT)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值