ARTICLE · 1266767
JVM规范学习总结:Java源码经过javac编译后
JVM规范学习总结:Java源码经过javac编译后
JVM规范学习总结:Java源码经过javac编译后
刚把 JVM 规范啃完,脑子里只剩一件事:Java 源码编译后到底生成了啥。
其实 javac 干完活,吐出来的不是 CPU 能直接认的机器码,而是一份符合规范的 .class 文件。顺着 OpenJDK 源码往下看,Gen.java 负责把代码转成 JVM 字节码,ClassWriter.java 再把它连同常量池、字段方法一起写进二进制文件里。
这文件里头结构还挺严实。开头是固定魔数 0xCAFEBABE,接着是版本号和常量池,后面跟着类信息、字段、方法和各种属性。拿个简单的加法源码做实验,用 javap 反编译一看,a + b 真就变成了 iload_0、iload_1、iadd、ireturn 这几条 JVM 指令。
顺带提一嘴,一个 .java 文件不一定只生成一个 .class。内部类、匿名类都会单独分家,注解处理器还能往外吐额外文件。最扎心的是,字节码到了运行期也不一定原样执行,HotSpot 这类 JVM 随时能把热点代码 JIT 编译成本地机器码。
原文JVM规范学习总结:Java源码经过javac编译后产物
作者提示: 个人观点,仅供参考
上海,3小时前,















































































