meh*_*mak 33 compiler-construction jit
我只是在观看Google IO视频,他们谈到了他们在android中包含的JIT编译器.由于JIT编译器,他们展示了性能改进的演示.我想知道JIT编译器究竟做了什么,想要听取不同的人的意见.
那么,JIT编译器的职责是什么?
Pau*_*liL 33
Java代码通常作为字节码分发,字节码是与机器无关的伪代码.(以前在70年代开发的UCSD-p系统中使用了相同的想法.)这样做的优点是相同的应用程序可以在不同的处理器和操作系统中运行.此外,字节码通常小于编译应用程序.
缺点是与运行编译代码相比,解释代码很慢.为了解决这个问题,开发了JIT编译器.JIT编译器在代码执行之前将代码编译为机器代码.与解释器相比,这加快了执行速度,但每次运行程序时都会花费额外的时间进行编译.此外,由于JIT编译器必须快速编译,因此不能使用静态编译器中使用的复杂优化技术.
另一种方法是HotSpot编译.它最初作为解释器运行,但随后检测最常使用的例程并仅编译那些例程.优点是由于编译没有初始延迟.此外,HotSpot编译器可以在执行期间进行分析,然后为最重要的例程发出更强的优化.它甚至可能收集信息,以便当您一次又一次地运行相同的应用程序时,它将运行得越来越快.有关HotSpot编译的更多信息可以在本文中找到(tnx Pangea的链接).
当然,您可以使用静态编译器来编译机器的字节码,而不是使用JIT编译器.这允许完全优化,然后每次运行应用程序时都不需要再次编译.但是,在手机和网页中,您通常只执行一次代码(或applet),因此JIT编译器可能是更好的选择.
更新
Python字节码文件的扩展名为.py.当您执行字节码文件时,Python JIT编译器会生成编译文件.pyc.下次运行相同的程序时,如果.py文件没有更改,则无需再次编译,而是Python运行以前编译的.pyc文件.这加快了程序的开始.
Dav*_*d M 14
JIT是"及时"的缩写.JIT编译器将代码(通常是Java字节码或Microsoft IL等中间语言)编译为本机可执行代码,并且在调用代码时执行此操作.因此,在调用代码之前,它仅存在于可移植的,非机器特定的字节码或IL中,然后在调用时,生成本机代码(然后在后续调用中重复使用).
它是一个即时编译器,位于解释器和编译器之间(即它编译,但仅在代码执行之前).
这样就可以使用仅在运行时知道的动态信息来优化编译(因为编译器通常是静态运行的,因此只能访问编译时信息).它们写起来要困难得多,但可以带来很好的性能提升.
在计算中,即时编译(JIT),也称为动态转换,是一种用于改进计算机程序的运行时性能的技术.传统上,计算机程序有两种运行时操作模式,可以是解释的,也可以是静态的(提前)编译.解释的代码在每次执行期间不断地从高级语言翻译成机器代码,而静态编译在执行之前将代码翻译成机器代码,并且只需要翻译一次.
JIT编译器代表了一种混合方法,与解释器一样,翻译不断发生,但是通过缓存已翻译的代码来最小化性能下降.在开发时,它还提供了超过静态编译代码的其他优势,例如处理后期绑定数据类型和强制执行安全保证的能力.
| 归档时间: |
|
| 查看次数: |
8728 次 |
| 最近记录: |