内存分页引入MMU(内存管理单元),利用虚拟地址替代物理地址,MMU将虚拟地址映射为物理地址,引入TLB(页表寄存器缓冲),对页面进行缓存从而提升性能
http://kenwublog.com/tune-large-page-for-jvm-optimization
偏向锁可以跳过同步,但是只针对单线程
http://kenwublog.com/theory-of-java-biased-locking
java调试体系结构
1.java虚拟机工具接口(jvmti) 控制当前虚拟机运行状态
2.java调试线协议(jdwp) 定义命令传输的格式
3.java调试接口(jdi) 接收调试命令
Instrumentation 的基本功能和用法
1.编写premain函数
2.jar文件打包
3. java -javaagent:jar 文件的位置 [= 传入 premain 的参数 ]
ClassFileTransformer可以将class当作字节流替换对应class
agentmain可以在main方法之后启动
instrumentation可以动态改变native代码
BTrace可以动态跟踪代码运行
编译器的基本结构
源代码=》词法分析(Token流)=》语法分析(抽象语法树)=》语义分析(注解抽象语法树)。。。
javac分析和代码生成
1.属性标注与检查
2.数据流分析
3.泛型转换
4.解语法糖
5.生成class文件
javac源码对应
词法分析:com.sun.tools.javac.parser.Scanner
语法分析:com.sun.tools.javac.parser.Parser
将符号输入到符号表:com.sun.tools.javac.comp.Enter
注解处理:com.sun.tools.javac.processing.JavacProcessingEnvironment
标注:com.sun.tools.javac.comp.Attr
检查:com.sun.tools.javac.comp.Check
数据流分析:com.sun.tools.javac.comp.Flow
转换类型:com.sun.tools.javac.comp.TransType
接触语法糖:com.sun.tools.javac.comp.Lower
生成class文件:com.sun.tools.javac.jvm.Gen
Class文件信息
1.结构
2.元数据
3.方法信息
java -Xint 指定以纯解释模式执行
java -Xcomp指定以纯编译模式执行
java -Xmixed混合模式,默认
JVM优化之压缩普通对象指针(CompressedOops)
通常64位JVM消耗的内存会比32位的大1.5倍,这是因为对象指针在64位架构下,长度会翻倍(更宽的寻址)。
JVM支持了 -XX:+UseCompressedOops 压缩指针
热点编译
JIT编译器通过计数器来触发执行,某方法被调用若干次后(次数可指定)JIT对该方法实现本地方法编译,提升性能,另外可以设定衰减机制,累积仅指定时间内有效
profiling:解释器收集性能剖析信息
内联和性能优化有关,但要慎用
JIT即时编译时,首先将字节码翻译程平台无关的高级中间表示(HIR),然后由代码选择器将HIR转换为平台相关的低级中间表示(LIR),最后发射为可执行的本地代码
静态单赋值(SSA,Static Single-Assignment):在编译器里用到,是一种高效的数据流分析技术
c1visualizer:将C1编译器在编译各阶段的数据结构可规化展现出来的工具
https://c1visualizer.dev.java.net/