Tag: jit

热点JIT优化

在关于Hotspot中的JIT的讲座中,我想尽可能多地给出JIT执行的特定优化的示例。 我只知道“方法内联”,但应该有更多。 为每个例子投票。

什么时候java比c ++快(或者什么时候JIT更快然后预编译)?

可能重复: JIT编译器与离线编译器 我听说在某些情况下,由于JIT优化,Java程序或java程序的某些部分能够比C ++(或其他预编译代码)中的“相同”代码执行得更快。 这是因为编译器能够确定某些变量的范围,避免一些条件并在运行时拉出类似的技巧。 你能给出一个(或更好 – 一些)例子吗? 并且可能概述了编译器能够优化字节码超出预编译代码可能性的确切条件? 注意:这个问题不是将Java与C ++进行比较。 它关于JIT编译的可能性。 请不要燃烧。 我也不知道有任何重复。 如果你是的话请指出来。

如果JIT正在执行到机器指令的字节码转换,那么JVM的用途是什么

我真的很难理解以下事情 以前我知道: 编译Java程序时,将生成.class文件。 在那个代码是以字节的forms。 然后JVM将该字节代码转换为机器可理解的格式。 现在我在SO中的一个问题中看到了 Just-In-Time(JIT)编译器是运行时解释器的一个特性,它不是在每次调用方法时解释字节码,而是将字节码编译成运行机器的机器代码指令。 所以这里JIT将字节码转换为机器指令。 那么JVM的用途是什么。 我们可以用JIT做到这一点。 据我所知,JIT仅用于提高JVM的性能。

为什么Math.sin()委托给StrictMath.sin()?

我想知道,当我在Reddit线程中发现问题时,为什么Math.sin(double)委托给StrictMath.sin(double) 。 提到的代码片段如下所示(JDK 7u25): Math.java : public static double sin(double a) { return StrictMath.sin(a); // default impl. delegates to StrictMath } StrictMath.java : public static native double sin(double a); 第二个声明是native ,对我来说是合理的。 Math指出: 鼓励代码生成器使用特定于平台的本机库或微处理器指令(如果可用) 问题是 :是不是本机库实现了StrictMath平台特定的? JIT比安装的JRE更了解平台(请专注于这种情况)? 换句话说,为什么Math.sin()本身不是原生的?

JIT自动内联的方法大小是多少?

我听说JIT自动内联小方法,比如getter(它们大约有5个字节)。 边界是什么? 有没有JVM标志?

如何在Java中检查JIT编译器是否已关闭

我想知道如何检查JIT编译器是否已关闭。 我有以下代码,这意味着关闭JIT编译器。问题是,我不确定它是否真的这样做。 所以我想知道是否有办法检查JIT是否关闭。 我查看了Compiler类,但没有像isDisabled/enabled() 。 码: Compiler.disable(); 任何帮助或指示将受到高度赞赏。

Hotspot JIT编译器是否可以重现任何指令重新排序?

我们知道,一些JIT允许重新排序对象初始化,例如, someRef = new SomeObject(); 可以分解为以下步骤: objRef = allocate space for SomeObject; //step1 call constructor of SomeObject; //step2 someRef = objRef; //step3 JIT编译器可能会重新排序如下: objRef = allocate space for SomeObject; //step1 someRef = objRef; //step3 call constructor of SomeObject; //step2 即,步骤2和步骤3可以由JIT编译器重新排序。 即使这在理论上是有效的重新排序,我也无法使用x86平台下的Hotspot(jdk1.7)重现它。 那么,Hotspot JIT comipler是否可以重现任何指令重新排序? 更新 :我使用以下命令在我的机器(Linux x86_64,JDK 1.8.0_40,i5-3210M)上进行了测试 : java -XX:-UseCompressedOops -XX:+UnlockDiagnosticVMOptions -XX:CompileCommand=”print org.openjdk.jcstress.tests.unsafe.UnsafePublication::publish” -XX:CompileCommand=”inline, […]

反汇编Java JIT编译的本机字节码

有没有办法对Java即时编译器生成的本机代码进行汇编转储? 还有一个相关的问题:有没有办法在不运行JVM的情况下使用JIT编译器将我的代码编译成本机代码?

解释字节码与编译字节码?

我已经看到一些关于JVM / JIT活动的参考文献,其中似乎在编译字节码和解释字节码之间有所区别。 特定注释声明字节码被解释为前10000次运行并在此后编译。 “编译”和“解释”字节码有什么区别?

CompileThreshold,Tier2CompileThreshold,Tier3CompileThreshold和Tier4CompileThreshold控制什么?

HotSpot的分层编译使用解释器,直到调用(对于方法)或迭代(对于循环)的阈值触发具有自我分析的客户端编译。 使用客户端编译,直到另一个调用或迭代阈值触发服务器编译。 打印HotSpot的标志使用-XX:+ TieredCompilation显示以下标志值。 intx CompileThreshold = 10000 {pd product} intx Tier2CompileThreshold = 0 {product} intx Tier3CompileThreshold = 2000 {product} intx Tier4CompileThreshold = 15000 {product} 仅有客户端和服务器编译器的标志太多。 这些标志控制了哪些编译器? 如果不是客户端和服务器,其他编译器的目的是什么? 在这种情况下是否忽略CompileThreshold和Tier2CompileThreshold? 触发客户端编译时Tier3CompileThreshold控制什么? 触发服务器编译时Tier4CompileThreshold控制什么?