即時 編 譯
|
---|
|
编译 |
|
|
|
JIT编译
应用
[编辑]JIT编译
JIT编译
概 述
[编辑]JIT
- 编译
可 以针对目标CPU和 应用程 序 运行的 操作 系 统模型 进行优化。例 如,JIT可 以在检测到CPU支持 SSE2矢 量 CPU指令 时选择它们。要 使用 静 态编译器获得这种优化级别的 特殊 性 ,必须为每个预期 的 平台 /体系 结构编译一个二进制文件,或 者 在 一个二进制文件中包含多个版本的部分代码。 - 该系统能够
收集 关于程 序 在 其所在 环境中 实际运行情 况的统计信 息 ,并且能 够重新 排列 和重 新 编译以获得 最 佳 性能 。但 一些静态编译器也可以将概要信息作为输入。 - 该系统可以进
行 全局 代 码优化 (例 如内 联库函数 ),同 时不失 去 动态链接的 优点,也不会 失 去 静 态编译器和 链接器 固有 的 开销。具体 来 说,在 进行全局 内 联替换时,静 态编译过程 可能 需要 运行时检查,并确保 如果对象的 实际类重写 了 内 联方法 ,就会发生虚 拟调用 ,并且对数组访问的边界条件 检查可能 需要 在 循环中 处理。在 许多情 况下,使用 即 时编译,这种处理可 以从循环中 移出 ,通常 会 大 大 提 高速度 。 尽 管 使用 静 态编译的垃圾收集 语言可 以做到这一 点 ,但 字 节码系 统可以更容易 地 重 新 排列 执行的 代 码,以获得 更 好 的 缓存利用 率 。
启动延 迟和优化
[编辑]Sun
还有
历史
[编辑]Smalltalk(1983
Self
HP
2019
安全
[编辑]JIT编译从根
JIT编译
JIT喷射
参 见
[编辑]- 二进制翻译
- HotSpot
通用 語 言 運行 庫 - Crusoe,
一 种微处理器 ,基本 上 执行从x86代 码到微 处理器 内部 微 码的即 时编译 - GNU lightning — 一个在运行时生成汇编语言代码的库
- LLVM
自修 改代 码- 跟踪
即 时编译 動態 編 譯
注 释
[编辑]- ^
提 前 编译器 也可以针对特定 的 微 体系 结构,但 AOT和 JIT之 间的区 别在于可移植 性 。JIT可 以在运行时生成 为当前 运行的 CPU量 身 定 制 的 代 码,而AOT必须事 先 知道 目 标CPU,而不是 为微架 构的广义子 集 进行优化,这样的 代 码不仅不能 在 其他CPU类型上 执行,而且可能 完全 不 稳定。
参考 文献
[编辑]引用
[编辑]- ^
丁 宇新,梅 嘉 , &程 虎 . (1999).国 产开放系 统平台 Java 及时编译器 的 设计与实现 (Doctoral dissertation). http://www.cnki.com.cn/Article/CJFDTotal-JSJX199912010.htm (页面存 档备份,存 于互联网档案 馆) - ^
微 软语言 门户术语搜索 (页面存 档备份,存 于互联网档案 馆)中 英 语Just-in-time compilation到 简体中 文 - ^ Languages, Compilers, and Runtime Systems, University of Michigan, Computer Science and Engineering, [2018-03-15], (
原始 内容 存 档于2018-03-26) - ^ 4.0 4.1 4.2 Aycock 2003.
- ^ Does the JIT take advantage of my CPU?. David Notario's WebLog. [2018-12-03]. (
原始 内容 存 档于2018-12-04). - ^ Croce, Louis. Just in Time Compilation (PDF). Columbia University. (
原始 内容 (PDF)存 档于2018-05-03). - ^ What are the advantages of JIT vs. AOT compilation. Stack Overflow. 2010-01-21. (
原始 内容 存 档于2020-04-24). - ^ javascript - Compile a JIT based lang to Webassembly. Stack Overflow. [2018-12-04]. (
原始 内容 存 档于2019-12-14). - ^ Haase, Chet. Consumer JRE: Leaner, Meaner Java Technology. Sun Microsystems. May 2007 [2007-07-27]. (
原始 内容 存 档于2007-08-12).At the OS level, all of these megabytes have to be read from disk, which is a very slow operation. Actually, it's the seek time of the disk that's the killer; reading large files sequentially is relatively fast, but seeking the bits that we actually need is not. So even though we only need a small fraction of the data in these large files for any particular application, the fact that we're seeking all over within the files means that there is plenty of disk activity.
- ^ The Java HotSpot Performance Engine Architecture. Oracle.com. [2013-07-05]. (
原始 内容 存 档于2013-07-21). - ^ Schilling, Jonathan L. The simplest heuristics may be the best in Java JIT compilers (PDF). SIGPLAN Notices. February 2003, 38 (2): 36–46 [2020-04-18]. doi:10.1145/772970.772975. (
原始 内容 (PDF)存 档于2015-09-24). - ^ Toshio Suganuma, Toshiaki Yasue, Motohiro Kawahito, Hideaki Komatsu, Toshio Nakatani, "A dynamic optimization framework for a Java just-in-time compiler", Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA '01), pp. 180–195, October 14–18, 2001.
- ^ Matthew Arnold, Michael Hind, Barbara G. Ryder, "An Empirical Study of Selective Optimization", Proceedings of the 13th International Workshop on Languages and Compilers for Parallel Computing-Revised Papers, pp. 49–67, August 10–12, 2000.
- ^ Native Image Generator (Ngen.exe). Msdn2.microsoft.com. [2013-07-05]. (
原始 内容 存 档于2008-04-05). - ^ Matthew R. Arnold, Stephen Fink, David P. Grove, Michael Hind, and Peter F. Sweeney, "A Survey of Adaptive Optimization in Virtual Machines (页面
存 档备份,存 于互联网档案 馆)", Proceedings of the IEEE, 92(2), February 2005, pp. 449–466. - ^ 16.0 16.1 Aycock 2003,2. JIT Compilation Techniques, 2.1 Genesis, p. 98.
- ^ McCarthy, J. Recursive functions of symbolic expressions and their computation by machine, Part I. Communications of the ACM. April 1960, 3 (4): 184–195. CiteSeerX 10.1.1.111.8833 . doi:10.1145/367177.367199.
- ^ Thompson 1968.
- ^ Aycock 2003,2. JIT Compilation Techniques, 2.2 LC², p. 98–99.
- ^ Mitchell, J.G. The design and construction of flexible and efficient interactive programming systems. 1970.
- ^ Deutsch, L.P.; Schiffman, A.M. Efficient implementation of the Smalltalk-80 system (PDF). POPL '84: Proceedings of the 11th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages. 1984: 297–302 [2020-04-18]. ISBN 0-89791-125-3. doi:10.1145/800017.800542. (
原始 内容 (PDF)存 档于2004-06-18). - ^
存 档副本 . [2020-04-18]. (原始 内容 存 档于2006-11-24). - ^ Aycock, 2003 & 2.14 Java, p. 107, footnote 13.
- ^ "Dynamo: A Transparent Dynamic Optimization System" (页面
存 档备份,存 于互联网档案 馆) Vasanth Bala, Evelyn Duesterwald, Sanjeev Banerjia - PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation - pages 1 to 12 - doi:10.1145/349299.349303. Retrieved March 28, 2012 - ^ John Jannotti. HP's Dynamo - Page 1 - (3/2000). Ars Technica. [2013-07-05]. (
原始 内容 存 档于2012-02-05). - ^ The HP Dynamo Project. [2016-04-12]. (
原始 内容 存 档于2002-10-19). - ^ PHP Gr8. [2020-04-18]. (
原始 内容 存 档于2020-02-23). - ^ PHP 8 and 7.4 to come with Just-in-time (JIT) to make most CPU-intensive workloads run significantly faster. April 2019 [2020-04-18]. (
原始 内容 存 档于2020-10-07). - ^ "How to JIT – an introduction (页面
存 档备份,存 于互联网档案 馆)", Eli Bendersky, November 5th, 2013 at 5:59 am - ^ De Mooij, Jan. W^X JIT-code enabled in Firefox. Jan De Mooij. [2016-05-11]. (
原始 内容 存 档于2016-05-14).
来 源
[编辑]- Aycock, J. A brief history of just-in-time. ACM Computing Surveys. June 2003, 35 (2): 97–113. CiteSeerX 10.1.1.97.3985 . doi:10.1145/857076.857077.
- Thompson, K. Programming Techniques: Regular expression search algorithm. Communications of the ACM. 1968, 11 (6): 419–422. doi:10.1145/363347.363387.
外部 链接
[编辑]自由 在 线计算 机 词典的 词条- Mozilla Nanojit (页面
存 档备份,存 于互联网档案 馆) — 一个小型的可以产生机器码的跨平台C++库。它被用作 Mozilla Tamarin和 SpiderMonkey Javascript引擎的 JIT。 - OVPsim,一种嵌入式核心JIT
工具 ,它将ARM、MIPS和 其他ISA指令 转换为x86进行执行/模 拟 使用 “VTune性能 分析 器 ”评测运行时生成 和解 释的代 码(页面存 档备份,存 于互联网档案 馆)