草庐IT

java - 为特定方法/类禁用 Java JIT?

我的Java应用程序出现问题,JIT破坏了代码。如果我禁用JIT,一切正常,但运行速度会慢10-20倍。有什么方法可以禁用特定方法或类的JIT吗?编辑:我正在使用Ubuntu10.10,通过以下方式获得相同的结果:OpenJDKRuntimeEnvironment(IcedTea61.9)(6b20-1.9-0ubuntu1)OpenJDK64-BitServerVM(build17.0-b16,mixedmode)和:Java(TM)SERuntimeEnvironment(build1.6.0_16-b01)JavaHotSpot(TM)64-BitServerVM(build14

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

我想知道如何检查JIT编译器是否关闭。我有以下代码,用于关闭JIT编译器。问题是,我不确定它是否真的在这样做。所以我想知道是否有办法检查JIT是否关闭。我查看了Compiler类,但没有任何类似isDisabled/enabled()的方法。代码:Compiler.disable();我们将不胜感激任何帮助或指导。 最佳答案 (不是对您的问题的直接回答,因为您似乎试图以编程方式关闭JIT编译器,但根据您的评论,这可能很有趣。)如果您想在Sun/OracleJVM上关闭JIT编译器,您应该尝试-Xintoption:-XintOper

java - CPU 的 div 指令和 HotSpot 的 JIT 代码之间的性能差距很大

自从CPU出现以来,整数除法指令的开销就众所周知。我去看看今天它有多糟糕,在拥有数十亿个晶体管的CPU上。我发现硬件idiv指令对于常数除数的性能仍然明显低于JIT编译器能够发出的代码,后者不包含idiv指令。为了在专门的微基准测试中展示这一点,我编写了以下内容:@BenchmarkMode(Mode.AverageTime)@OutputTimeUnit(TimeUnit.NANOSECONDS)@OperationsPerInvocation(MeasureDiv.ARRAY_SIZE)@Warmup(iterations=8,time=500,timeUnit=TimeUnit.

java - HotSpot JIT 中的去反射优化是什么?它是如何实现的?

正在观看TowardsaUniversalVM在演示文稿之前,我研究了这张幻灯片,其中列出了HotSpotJIT所做的所有优化:在language-specifictechniques部分有一个反反射。我试图在Internet上查找有关它的一些信息,但没有成功。我知道这种优化以某种方式消除了反射成本,但我对细节感兴趣。有人可以澄清这一点,或提供一些有用的链接吗? 最佳答案 是的,有一个优化来降低反射成本,尽管它主要是在类库中而不是在JVM中实现的。在Java1.4之前,Method.invoke通过对VM运行时的JNI调用工作。每次

java - 更改 JIT 编译的最终值

我注意到一件非常奇怪的事情,即在通过反射更改最终字段后,返回该字段的方法始终给出旧值。我想这可能是因为JIT编译器。示例程序如下:publicclassMain{privatestaticfinalMainm=newMain();publicstaticMaingetM(){returnm;}publicstaticvoidmain(Stringargs[])throwsException{Mainm=getM();intx=0;for(inti=0;i结果是:Main@1be6f5c3Main@1be6f5c3Main@6b884d57我想知道,如何让getM()返回更新后的值?

c# - 如何编写(测试)不会被编译器/JIT 优化的代码?

我不太了解编译器和JIT优化的内部原理,但我通常尝试使用“常识”来猜测哪些可以优化,哪些不能。所以我今天写了一个简单的单元测试方法:@Test//[Test]inC#publicvoidtestDefaultConstructor(){newMyObject();}这个方法其实就是我所需要的。它检查默认构造函数是否存在并无异常运行。但后来我开始考虑编译器/JIT优化的效果。编译器/JIT能否通过完全消除newMyObject();语句来优化此方法?当然,它需要确定调用图对其他对象没有副作用,这是普通构造函数的典型情况,它只是简单地初始化对象的内部状态。我假设只允许JIT执行这样的优化。

java - 为什么我的算法在执行了几次之后变得更快了? ( java )

我有一个数独求解算法,我的目标是尽可能快地完成。为了测试这个算法,我多次运行它并计算平均值。在注意到一些奇怪的数字后,我决定一直打印并得到这个结果:ExecutionTime:4.257746ms(#1)ExecutionTime:7.610686ms(#2)ExecutionTime:6.277609ms(#3)ExecutionTime:7.595707ms(#4)ExecutionTime:7.610131ms(#5)ExecutionTime:5.011104ms(#6)ExecutionTime:3.970937ms(#7)ExecutionTime:3.923783ms(#

java - Java 和 C++ 中 for 循环边界检查的编译器/JIT 优化

我从thisanswer中学到了在C#中的for和while循环中:“只要您使用arr.Length,编译器/JIT就会针对这种情况进行优化>在条件:"for(inti=0;i这让我想知道java编译器是否有这样的优化。for(inti=0;i我认为是的,嗯,是吗?使用像ArrayList这样的Collection时会发生同样的情况吗?但是,如果我必须在for循环的主体内使用myList.size()的值,现在考虑myList怎么办?成为一个ArrayList?所以在那种情况下,提升myList.size()不会有帮助,因为size()是一个方法调用?例如可能是这样的:intlen=m

c++ - libjit 什么时候真正值得?

我编译并尝试分析libjit(mul_add)中的第一个教程:-https://www.gnu.org/software/libjit/doc/libjit_3.html#SEC6但是,将其与native编译代码进行比较时,它的运行速度大约慢1000倍。在使用callgrind进行分析时,出现的一些热点是:-jit_apply(17.5%)jit_apply_builder_add_arguments(14.25%)jit_type_normalize(9%)jit_backtrace_push(7%)jit_exception_clear_last(6.5%)jit_thread_g

c++ - 使用 LLVM JIT 代码对程序进行编码以调用 C++ 代码

我的项目有一个C++库,我想允许用户通过某种编程语言使用它来进行JIT调用所述库中的函数。为了简单起见,假设库有如下类:classitem{public:item();item(int);~item();//...};classitem_iterator{public:virtual~item_iterator();virtualboolnext(item*result)=0;};classsingleton_iterator:publicitem_iterator{public:singleton_iterator(itemconst&i);//...};我知道LLVM对C++一无所