java命令执行.java与.class文件的差异及无编译执行原理咨询
核心原因:Java 11引入的单文件源程序运行特性
你用的java Main.java是Java 11开始支持的单文件源程序直接运行功能,本质上它还是会编译,只是编译过程完全在内存中完成,不会把生成的字节码写入磁盘,所以你看不到Main.class文件。
具体实现流程
- 执行
java Main.java时,JDK会自动调用编译器(javac)在内存中编译指定的源文件 - 编译生成的字节码不会被持久化到磁盘,而是直接传递给JVM的类加载器
- 类加载器加载字节码后,JVM就会执行
main方法 - 执行完成后,内存中的字节码会被回收,不会留下任何磁盘文件
为什么耗时更长?
传统方式先执行javac Main.java生成Main.class,之后每次运行java Main都是直接加载已编译好的字节码,跳过了编译步骤。而java Main.java每次执行都要重新完成「编译+运行」的全流程,相当于把两步合成一步但重复做了编译工作,所以耗时自然更长。
补充说明
这个特性的设计初衷是简化小型Java程序(比如脚本、工具类)的开发和运行流程,不用再手动分编译、执行两步操作,尤其适合快速测试单文件代码的场景。
内容的提问来源于stack exchange,提问作者PatrickYoo
相关产品推荐
相关产品推荐

