java - 为什么 JVM 不缓存 JIT 编译的代码?

标签 java caching jvm compilation jit

Sun 的规范 JVM 实现对字节码进行了一些非常复杂的优化,以便在代码运行几次后获得接近 native 的执行速度。

问题是,为什么不将此编译后的代码缓存到磁盘以供后续使用同一函数/类时使用?

就目前而言,每次执行程序时,JIT 编译器都会重新启动,而不是使用代码的预编译版本。当字节码本质上是被解释时,添加这个特性不会显着增加程序的初始运行时间吗?

最佳答案

在不使用 @MYYN 发布的链接的情况下,我怀疑这是因为 JVM 执行的优化不是静态的,而是动态的,基于数据模式和代码模式。这些数据模式很可能会在应用程序的生命周期内发生变化,从而导致缓存的优化不是最优的。

因此,您需要一种机制来确定保存的优化是否仍然是最佳的,此时您不妨立即重新优化。

关于java - 为什么 JVM 不缓存 JIT 编译的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1992486/

相关文章:

java - 将非静态变量更改为静态变量

java - Java 内存数据库推荐

java - 没有 System.out 是否存在 Java 实现?是否可以?

java - 通知后控制不返回到等待线程

java - 如何使用 vertx3 进行数据库顶部异步缓存查询和更新

java - 什么限制了 Java 应用程序中创建的线程数?

java.lang.OutOfMemoryError : Java heap space - how to save memory? 错误

java - Spring Boot @RestController没有响应

javascript - 阻止用户浏览器缓存 Wakanda 页面?

java - Java中的反射: How do I create objects of different types with the same name?