JIT and 解释器

解释执行:直接操作寄存器和cpu 编译速度很慢 执行很快
JIT:可以进行优化
都生成native代码,但是一般会有区别

java虚拟机执行字节码,执行的方式有两种:
1.通过解释器将字节码解析为native code 这是java虚拟机执行字节码的方式
对字节码查找对应的模板表,翻译成机器语言。响应速度很快,解释很慢,每次都要去解释,所以速度很慢。

2.通过JIT编译器解析为nativie code 。可以做一定的优化。 执行速度快。代码编译一次
(or只针对执行频率高的代码)后就不需要再编译了使用哪种方式取决于属性配置文件。
JIT需要单独使用一个线程来解析字节码。

执行字节码时,如果代码执行频率较高,则使用JIT,否则使用解释器来执行。即使设置属性JIT,但也并
不是所有的字节码都由JIT来执行。

解释执行响应快,执行慢。编译执行响应慢,执行快

C++代码依赖平台 如arm X86

每启动一个app,则先启动一个虚拟机,然后用虚拟机来启动这个app

在Java编程语言和环境中,即时编译器(JIT compiler,just-in-time compiler)是一个把Java的字节码
(包括需要被解释的指令的程序)转换成可以直接发送给处理器的指令的程序。当你写好一个Java程序后,
源语言的语句将由Java编译器编译成字节码,而不是编译成与某个特定的处理器硬件平台对应的指令代码
(比如,Intel的Pentium微处理器或IBM的System/390处理器)。字节码是可以发送给任何平台并且能在那个
平台上运行的独立于平台的代码。


JIT和解释器直接生成机器码?当中有汇编代码吗?  
每个zygote都加载了虚拟机 都加载了那些服务吗?

每启动一个app,就直接fork一个子进程,直接复制zygote的相关参数,然后launcher app。这样速度就很快。
由于手机启动zygote启动就需要配置好相关参数,所以导致手机启动很慢。


JIT & AOT(Ahead of time)
JIT 运行时需要消耗CPU 保存代码在内存中。比较浪费时间,性能差一些。可以进行一些优化
AOT 可以直接进行跑,但是没办法做优化。运行前编译好,缺点是全编译成 nativie code ,
不用的也编译了,解释时耗时间

davilk -》 odex
art -》 ELF

posted @ 2015-07-09 15:43  牧 天  阅读(515)  评论(0)    收藏  举报