他所说的是,在运行时将所有字节码编译成机器语言是不切实际的.您可以预先编译所有内容,但这并不是JIT所采用的方法.
一方面,不知道程序有多大.人们在30分钟的启动时会相当不高兴,因为它编译了可以找到的每个库(给定的Java程序不在一个文件中,它可以访问类路径中的所有内容)
对于另一个,即使你告诉系统你的程序将使用什么组件,也没有告诉你有多少程序可以用于给定的运行 – 人们会在30分钟的启动时感到更加不安,以运行一个命令行程序的参数由“–help”组成
最后,它可以通过编译在运行时做一些很好的技巧.用这样的方法:
public testMeh(int param) {
if(param == 35)
do bunches of crap;
else if (param > 5)
do much more crap;
else
return;
}
编译器可以调用它一次或两次,并且在运行中识别值5并且只返回.如果这个值总是为2,那么可以用if(param!= 2)testMeh(param)替换ENTIRE方法调用;
这消除了对该号码的整个方法调用.之后可以知道,不调用该方法意味着某些成员变量不能更改,并且可以将代码的其他部分折叠为无.
如果你预编译的东西,这只是平凡的地狱.我的意思是,你可以在任何地方写出异常代码,因为你识别模式,但你的代码很快就会变成一个噩梦.
现在,如果你问为什么不将整个程序编译成字节码,那么这是一个不同的问题,而不是引用的是什么,但是你可以这么做.它已经完成,效果很好.您可以交换便携性和运行时灵活性,以便更快的开始时间.