1.为什么可以一次编写,到处运行?
编译时:通过javac指令将文件编译成字节码,并存入到相应的.class文件中
运行时:JVM对.class文件进行解析,翻译成特定平台下的机器码并运行
2.为什么JVM不直接将源码解析成机器码去执行?
①若直接将源码解析成机器码,那么每次执行都需要进行各种检查 (语法,句法,语义),每次执行时,这些分析的结果都不会保留下来,都要重新编译重新分析,整体性能受到影响。引入中间字节码,保证编译成字节码后多次执行程序而不需要各种校验补全
②脱离java的束缚,也可将别的语言编译成字节码