运行Java命令带.java后缀和不带后缀的区别及执行耗时差异原因
java Hello与java Hello.java的运行机制差异及耗时原因 二者核心运行逻辑区别
- 执行
java Hello时:
该命令用于直接运行已编译完成的Java字节码文件,要求当前路径下提前存在通过javac Hello.java编译生成的Hello.class文件。JVM启动后会直接读取现成的字节码文件加载执行,全程没有编译环节。 - 执行
java Hello.java时:
这是Java 11版本新增的单文件源码直接运行特性,目的是简化小型单文件Java程序的调试流程。JVM启动后会先在内存中完成该源文件的完整编译,生成对应字节码后才会进入执行步骤,隐含了全量编译环节。
耗时差异的原因
你观测到的1秒左右的耗时差,完全来自于java Hello.java多出来的源码编译步骤。java Hello的执行流程只有「JVM启动 → 字节码加载执行」两步,而java Hello.java需要走「JVM启动 → 内存编译源文件 → 字节码加载执行」三步,额外的编译开销就是两者的耗时差来源。
内容的提问来源于stack exchange,提问作者Sbu_05
相关产品推荐
相关产品推荐

