Java 核心技术面试精讲
杨晓峰
前 Oracle 首席工程师
125942 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
Java 核心技术面试精讲
15
15
1.0x
00:00/00:00
登录|注册

第35讲 | JVM优化Java代码时都做了什么?

验证final关键字影响性能
优化安全点
调整编译器线程数
调整Code Cache大小
调整热点代码门限值
阻塞代码
栈上替换技术
投机性优化
逃逸分析
方法内联
内联缓存
模版解释器
内存分配机制
锁机制
动态编译
解释执行
调优角度和手段
JVM优化范畴
即时编译器(JIT)优化
运行时优化
JVM优化Java代码时都做了什么?

该思维导图由 AI 生成,仅供参考

我在专栏上一讲介绍了微基准测试和相关的注意事项,其核心就是避免 JVM 运行中对 Java 代码的优化导致失真。所以,系统地理解 Java 代码运行过程,有利于在实践中进行更进一步的调优。
今天我要问你的问题是,JVM 优化 Java 代码时都做了什么?
与以往我来给出典型回答的方式不同,今天我邀请了隔壁专栏《深入拆解 Java 虚拟机》的作者,同样是来自 Oracle 的郑雨迪博士,让他以 JVM 专家的身份去思考并回答这个问题。

来自 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
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • BY
    profile是啥意思。。。

    作者回复: 这个我也不知道翻译用什么词好,大家平时都这么交流...

    2018-07-26
    9
    14
  • 第二个图没有看太明白

    作者回复: Profile可以看作是jvm学习的过程,统计程序执行的特点,找到热点,然后编译执行,最后是说仍然可能会发生逆优化

    2018-07-29
    7
  • 杨东yy
    老师,请问下,整个内容有ppt么,我这快整体总结下,在做思考,如果有的话,希望可以提供下,可以节约我一些时间,感谢

    作者回复: 没有,你可以截取主干

    2018-07-27
    2
  • armado
    这一讲真的难啊,基本没看懂。
    2019-03-04
    1
    8
  • Lynn
    code cache 既然不能动态调整大小 为什么还有初始大小这个参数
    2019-05-09
    6
  • BewhY
    这一章感觉没几个人能看得懂,那些平时说老师讲的很浅的人呢?
    2019-09-17
    1
    5
  • 随心而至
    我觉得,这个问题的涉及面非常广,不是专门做这个的,了解一下就行了,不懂其实也没关系,毕竟社会分工不同。 真的想学JVM的,可以参考R大的豆列 https://www.douban.com/doulist/2545443/
    2021-01-07
    3
  • Geek_65a596
    final对性能的影响看看字节码就知道了 ,也可以通过查看编译详情查看
    2019-03-15
    3
  • Monday
    这章看了好多遍,却还是感觉不好理解。当然郑雨迪老师的课,我也已经订阅了。会抽时间慢慢消化
    2020-07-01
    4
    2
  • achenbj
    感觉去面试了才准备有点晚啊...
    2018-11-21
    1
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部