java中方法不要写太长的真正原因

    科技2022-07-12  114

    java中一般建议一个方法不要写的过长,不方便维护和阅读是其中的一个原因,但是其真正性能的原因大家知道吗?

    我们知道,JVM一开始是以解释方式执行字节码的。当这段代码被执行的次数足够多以后,它会被动态优化并编译成机器码执行,执行速度会大大加快,这就是所谓的JIT编译。

    hotsopt源码中有一句

    if (DontCompileHugeMethods && m->code_size() > HugeMethodLimit) return false;

    当DontCompileHugeMethods=true且代码长度大于HugeMethodLimit时,方法不会被编译。

    DontCompileHugeMethods与HugeMethodLimit的值在globals.hpp中定义:

    product(bool, DontCompileHugeMethods, true, "don't compile methods > HugeMethodLimit") develop(intx, HugeMethodLimit, 8000, "don't compile methods larger than this if +DontCompileHugeMethods")

    上面两个参数说明了Hotspot对字节码超过8000字节的大方法有JIT编译限制,这就是大方法不会被JIT编译的原因。由于使用的是product mode的JRE,我们只能尝试关闭DontCompileHugeMethods,即增加VM参 数”-XX:-DontCompileHugeMethods”来强迫JVM编译大方法。但是不建议这么做,因为一旦Code Cache满了,HotSpot会停止所有后续的编译任务,虽然已编译的代码不受影响,但是后面的所有方法都会强制停留在纯解释模式。

    转自:https://blog.csdn.net/enetor1/article/details/83879251

    Processed: 0.009, SQL: 8