- 先通过javac编译,获得class字节码文件
- class文件在内存中表现为十六进制的数值
- 这些数值有java静态代码,也包含有可执行的代码
- 可执行的代码是在class文件结构中属性为attribute_info表示的,它联系着具体的代码数据
- 使用javap -p -c Test.class查看代码对应的字节码指令
- 每个指令对应一位16进制数值
- 每个16进制数值对应一段机器码
- 解释成机器码这过程就是编译,模板解释有冗余的代码,需要优化
- 通过jit技术对解释进行优化,当前出现的编译器有c1和c2,c1快,c2质量高
- 当前jvm都是是分层编译
- 执行完后 ,就会把机器码缓存下来,可以通过jvm参数设置代码缓存,XX:InitialCodeCacheSize 设置codeCache初始大小,一般默认是48M,XX:ReservedCodeCacheSize 设置codeCache预留的大小,通常默认是240M
java-字节码到指令流程
于 2024-08-21 14:33:32 首次发布