首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

java中步骤不要写太长的真正原因

2012-07-30 
java中方法不要写太长的真正原因我以前也只是听说不能把方法写的过长,但一直没深究其原因.原来是jvm对其方

java中方法不要写太长的真正原因
我以前也只是听说不能把方法写的过长,但一直没深究其原因.
原来是jvm对其方法长度做了限制(8000字节).超过了不会编译.

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



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

        hotsopt源码中有一句

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

if (DontCompileHugeMethods && m->code_size() > HugeMethodLimit) return false;
 
        当DontCompileHugeMethods=true且代码长度大于HugeMethodLimit时,方法不会被编译。

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

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

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会停止所有后续的编译任务,虽然已编译的代码不受影响,但是后面的所有方法都会强制停留在纯解释模式。

热点排行