概述 早期编译过程 晚期编译优化 jvm编译优化学习笔记 早期 第一步: 词法分析: 语法分析(注意实际上只是生成一个语法树,还没做语法的校验): 填充符号表: 第二步: 注解处理器: 第三步: 语义分析: 解语法糖: 字节码生成: 晚期 解释器Interperter 编译器 晚期优化的一些常见措施(即运行中才会做优化的步骤) 热点代码 冗余访问消除 公共子表达式消除 数组边界检查 隐式异常处理 方法内联 逃逸分析 Java和C++,即时编译和静态编译的区别 首先提出一个问题,为什么C++的编译速度会比Java慢很…

2023年 3月 10日 0条评论 42点热度 0人点赞 阅读全文

Billy Korando on November 7, 2022 VM logging has long been part of the JDK. It can be an excellent tool for performing root cause analysis and figuring out performance quirks. In JDK 9, several changes were made to how VM logging is handled, making it mor…

2023年 3月 10日 0条评论 34点热度 0人点赞 阅读全文

问题 I am hacking OpenJDK7 to implement an algorithm. In the process of doing this, I need to output debug information to the stdout. As I can see in the code base, all printings are done by using outputStream*->print_cr(). I wonder why printf() was not used …

2023年 3月 10日 0条评论 32点热度 0人点赞 阅读全文

如上一篇系列文章中讲到的,jdk执行的核心方法,实际上也是调用jvm或者hotspot的接口方法实现的,这其中有个重要变量,供jdk使用。即:JNIEnv* env 。可见其重要性。我们再来回顾下它的初始化过程。 复制代码 //实际上,我们可以通过前面对 JNIEnv penv 的赋值中查到端倪: // hotspot/src/share/vm/prims/jni.cpp … // 将jvm信息存储到 penv 中,以备外部使用 (JNIEnv)penv = thread->jni_environment()…

2023年 3月 10日 0条评论 35点热度 0人点赞 阅读全文

前言: 经常有同学会问,为啥我的应用 Old Gen 的使用占比没达到 CMSInitiatingOccupancyFraction 参数配置的阈值,就触发了 CMS GC,表示很莫名奇妙,不知道问题出在哪? 其实 CMS GC 的触发条件非常多,不只是 CMSInitiatingOccupancyFraction 阈值触发这么简单。本文通过源码全面梳理了触发 CMS GC 的条件,尽可能的帮你了解平时遇到的奇奇怪怪的 CMS GC 问题。 先抛出一些问题,来吸引你的注意力。 为什么 Old Gen 使用占比仅 5…

2023年 3月 10日 0条评论 33点热度 0人点赞 阅读全文

前言 在深入openjdk源码全面理解Java类加载器(上 – JVM源码篇)我们分析了JVM是如何启动,并且初始化BootStrapClassLoader的,也提到了sun.misc.Launcher被加载后会创建ExtClassLoader和AppClassLoader。关于类加载的基础知识请参考虚拟机类加载机制(上)。这篇文章主要从Java源码层面总结一下双亲委派、TCCL的应用等,然后再聊聊自定义类加载器的注意事项。 一、双亲委派 1.1 类加载器结构 直接在idea里看看AppClassLoader的继承…

2023年 2月 28日 0条评论 71点热度 0人点赞 阅读全文