第35讲 | JVM优化Java代码时都做了什么?
杨晓峰 & 郑雨迪
该思维导图由 AI 生成,仅供参考
我在专栏上一讲介绍了微基准测试和相关的注意事项,其核心就是避免 JVM 运行中对 Java 代码的优化导致失真。所以,系统地理解 Java 代码运行过程,有利于在实践中进行更进一步的调优。
今天我要问你的问题是,JVM 优化 Java 代码时都做了什么?
来自 JVM 专栏作者郑雨迪博士的回答
JVM 在对代码执行的优化可分为运行时(runtime)优化和即时编译器(JIT)优化。运行时优化主要是解释执行和动态编译通用的一些机制,比如说锁机制(如偏斜锁)、内存分配机制(如 TLAB)等。除此之外,还有一些专门用于优化解释执行效率的,比如说模版解释器、内联缓存(inline cache,用于优化虚方法调用的动态绑定)。
JVM 的即时编译器优化是指将热点代码以方法为单位转换成机器码,直接运行在底层硬件之上。它采用了多种优化方式,包括静态编译器可以使用的如方法内联、逃逸分析,也包括基于程序运行 profile 的投机性优化(speculative/optimistic optimization)。这个怎么理解呢?比如我有一条 instanceof 指令,在编译之前的执行过程中,测试对象的类一直是同一个,那么即时编译器可以假设编译之后的执行过程中还会是这一个类,并且根据这个类直接返回 instanceof 的结果。如果出现了其他类,那么就抛弃这段编译后的机器码,并且切换回解释执行。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
JVM优化Java代码的关键在于运行时优化和即时编译器(JIT)优化。运行时优化包括锁机制、内存分配机制以及解释执行效率的优化,而JIT优化则将热点代码转换成机器码,并采用多种优化方式。这些优化方式仅在运行应用代码时起作用,而阻塞的应用代码不在JVM的优化范畴。文章还探讨了如何与JIT等JVM模块进行交互,以及将JIT的知识落实到实际工作中的可能思路,包括收集JIT相关信息和具体的调优手段。总的来说,这篇文章从JVM专家的角度深入探讨了JVM优化Java代码的过程和方式,对于想要深入了解JVM优化的读者来说,是一篇值得阅读的文章。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 核心技术面试精讲》,新⼈⾸单¥59
《Java 核心技术面试精讲》,新⼈⾸单¥59
立即购买
登录 后留言
全部留言(17)
- 最新
- 精选
- BYprofile是啥意思。。。
作者回复: 这个我也不知道翻译用什么词好,大家平时都这么交流...
2018-07-26914 - 傑第二个图没有看太明白
作者回复: Profile可以看作是jvm学习的过程,统计程序执行的特点,找到热点,然后编译执行,最后是说仍然可能会发生逆优化
2018-07-297 - 杨东yy老师,请问下,整个内容有ppt么,我这快整体总结下,在做思考,如果有的话,希望可以提供下,可以节约我一些时间,感谢
作者回复: 没有,你可以截取主干
2018-07-272 - armado这一讲真的难啊,基本没看懂。2019-03-0418
- Lynncode cache 既然不能动态调整大小 为什么还有初始大小这个参数2019-05-096
- BewhY这一章感觉没几个人能看得懂,那些平时说老师讲的很浅的人呢?2019-09-1715
- 随心而至我觉得,这个问题的涉及面非常广,不是专门做这个的,了解一下就行了,不懂其实也没关系,毕竟社会分工不同。 真的想学JVM的,可以参考R大的豆列 https://www.douban.com/doulist/2545443/2021-01-073
- Geek_65a596final对性能的影响看看字节码就知道了 ,也可以通过查看编译详情查看2019-03-153
- Monday这章看了好多遍,却还是感觉不好理解。当然郑雨迪老师的课,我也已经订阅了。会抽时间慢慢消化2020-07-0142
- achenbj感觉去面试了才准备有点晚啊...2018-11-211
收起评论