可能的重复:
为什么 JVM 不缓存 JIT 编译的代码? https://stackoverflow.com/questions/1992486/why-doesnt-the-jvm-cache-jit-compiled-code
我理解 JIT 编译是使用热点机制编译为本机代码,它可以非常非常快,因为它是对操作系统、硬件等的优化。
我的问题是,为什么 Java 不将 JIT 编译的代码存储在文件中的某个位置并将其用于将来的目的?这也可以减少“初始预热”时间。
请让我知道我在这里缺少什么。
添加到我的问题:
为什么 Java 不将完整的代码编译为本机并始终使用它(对于特定的 JVM、IS、平台)?为什么是即时生产?
虽然可以保证您始终使用 JVM,但不能保证您始终使用相同的 JVM。热点优化代码仅对您的机器有效。
对于 Java,无法保证代码是 JVM 本地的。 Applet 就是一个完美的例子,Webstart 也说明了这一点。通用的“保持优化”只会使很少运行的代码中的缓存变得混乱,并在保留优化扩展的位置上产生问题。
它还会在知道磁盘缓存保留多长时间方面造成相当大的难题,并且您是否必须重新编译“类”文件来验证缓存是否用于正确“释放”类文件? Java 没有相同类文件指示符的“此版本”,除了可选的串行版本 uid 之外。
也许有一个解决方法,通过检查总结类文件并将其放置在已编译类的字段中,但我不想考虑 JVM 的启动时间,该 JVM 的任务是扫描所有缓存的机器特定代码、构建表、干预类加载器,并使用优化后的代码检查加载的类的校验和。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)