即时编译 – 它何时实际发生在Java中?
最近我参加了关于
Java效率的讨论.
正如我所听到的,反对Java的大量论据是解释“非常耗时”,因为它甚至简单的Java程序运行速度比直接编译到机器代码的类似程序慢. 答案就是Java代码经常直接编译为机器代码,如果只有JVM计算它会使程序比以标准方式解释更快. 我的问题是:JVM何时“决定”执行即时编译?使JIT比标准字节码解释更有效的标准是什么?我的意思是,编译本身需要一些时间,据我所知,当程序已经运行时,它应该发生了吗? 解决方法
这取决于您的JVM及其设置.维基百科:
对于vanilla HotSpot JVM in -server模式的粗略近似是当JVM注意到某个方法已被大量调用时,通常会超过某些特定次数,从而发生JIT. (这就是为什么JVM被称为“HotSpot” – 因为它识别并优化代码中的“热点”.)此时,JVM知道一些事情: >它知道这种方法值得花时间进行优化,因为它会被调用很多. >如果if语句的一个分支比另一个分支更常见,那么它可以改进branch prediction 请注意,如果您事先编译为机器代码,则不会有大量此类信息需要优化 – 编译器事先并不知道哪些路径比其他路径更常见.但是,如果您等到实际数据之后再进行优化,则可以做出更好的优化决策. 关于JIT做什么的更多细节是here. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |