189 8069 5689

如何让java代码JIT java怎么操作

如何控制JVM中的JIT行为

jvm的其中之一作用便是你说的执行class文件。而jvm中,执行class文件有两种方式,一种是传统的解释型,即一边翻译一边执行,翻译一句话成本地指令之后马上执行,然后回头再翻译下一句话,再执行下一句话,这是传统方式,从这里就可以知道为什么大家都叫java为解释型的语言了吧。第二种方式就是你说的,jvm中利用jit进行对class文件二次编译,这次编译就会直接编译成系统本地指令,这样再去运行的时候就快了吧,但是一开始的jit是比较弱智的,他会将你所有class代码都统统在运行时编译成本地指令,大家知道编译是非常耗时的啊,这种运行时编译和c++的静态编译不同,c++是在系统运行之前,就已经将所有的代码都编译成本地代码了,所有在运行时候是没有编译损耗的,运行时编译也叫做即时编译,这两种编译方式有好有坏,静态编译运行速度快,但是无法做到跨,运行时编译可跨,但是运行速度慢,所以到后来sun推出hotspot,出现了动态编译,即不是将所有代码都编译成本地指令了,而是将你系统常常运行的那块代码编译成指令而已。所以最后总结下,jvm的excution engine对待class的处理有两种方式,一种是解释执行,一种是动态即时编译执行。

创新互联公司是专业的浏阳网站建设公司,浏阳接单;提供做网站、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行浏阳网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

如何在Android上编写高效的Java代码

比较Android上的Dalvik Java和Java SE

虽然远在Android出现之前,开发者就能用Java编程语言为移动设备编写应用程序,但它只是Java中功能极为有限的一个版本,称为Java ME(微型版)。不同的移动设备还需编写不同的代码,因此,写一个应用程序就能在支持Java ME的任何手机上运行是几乎不可能的。此外,由于当时不存在很好的在线商店,应用发布过程极其复杂。

Android的问世为开发者提供了构建智能手机强大应用的机会,开发者只需用Java编程语言以及他们熟知的标准Java API编写代码。然而,尽管Android开发者仍使用Java SE编译器来编译应用程序,你会发现,James Gosling开发的Java和Android设备上的Java存在许多不同之处。

在Android设备上运行的VM(虚拟机)称为Dalvik。它最初由谷歌的Dan Bornstein开发,适用于CPU和内存受限的移动设备。Java SE和Dalvik Java存在一些差异,主要体现在虚拟机上。Java SE使用了栈机设计,而Dalvik被设计成了基于寄存器的机器。Android SDK中有一个dx工具,它会把Java SE栈机器的字节码转换成基于寄存器的Dalvik机器字节码,该转换步骤由IDE自动完成。

基于栈的虚拟机和基于寄存器的虚拟机的定义以及差异将不列入讨论范围。由于历史原因,Android使用基于寄存器的虚拟机。虽然基于寄存器的虚拟机最多可以比基于栈的虚拟机快32%,但这只限于执行时解释字节码的虚拟机(也就是说,解释型虚拟机)。在Android 2.2版本(也称为Froyo)之前,Dalvik虚拟机都是纯解释型的。Froyo版本引入了JIT编译器(即时编译),这是Java SE很早就有的一个优势。

JIT编译,也称为动态翻译。它在执行前把字节码翻译成本机代码(如图1所示),这样主要有两个好处。首先,它消除了那些纯解释型虚拟机的开销;其次,它能对本机代码执行优化,这通常是静态编译代码无法做到的。例如,JIT编译器可以在它运行的CPU上选择最合适的优化,也可以根据应用程序的输入来分析代码是如何运行的,以便进行下一步的优化

java中的JIT编译到底是什么意思?

在JIT编译器生成本机代码后,它会重写存根例程,插入一个jmp指令跳转到刚才JIT编译器的代码。只有当要调用某个方法时,JIT编译器才会将CIL的方法体编译为相应的本机机器码版本。这样可以优化程序的工作集。


网站栏目:如何让java代码JIT java怎么操作
文章位置:http://jkwzsj.com/article/hhesee.html

其他资讯