援引:《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》
https://pan.baidu.com/s/1yRNwG7_Fp61OAPWmtfvv2g 密码: 2bes
关键名词:
- JEP JDK Enhancement Proposals(JDK增强建议)
- IR: Intermediate Representation(中间表达形态)
- HIR: Higher Intermediate Representation
- LIR: Lower Intermediate Representation
- SSA: Static Single Assignment(静态单赋值)
- 窥孔优化:
- 寄存器分配:
关键参数:
- -XX:+TieredCompilation:开启分层编译,JDK8 之后默认开启
- -XX:+CICompilerCount=N:编译线程数,设置数量后,JVM 会自动分配线程数,C1:C2 = 1:2
- -XX:TierXBackEdgeThreshold:OSR 编译的阈值
- -XX:TierXMinInvocationThreshold:开启分层编译后各层调用的阈值
- -XX:TierXCompileThreshold:开启分层编译后的编译阈值
- -XX:ReservedCodeCacheSize:codeCache 最大大小
- -XX:InitialCodeCacheSize:codeCache 初始大小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| package com.neoadensce.jitpractice;
import org.slf4j.Logger; import org.slf4j.LoggerFactory;
public class JavacInTime {
private static Logger logger = LoggerFactory.getLogger(JavacInTime.class);
private static JavacInTime javacInTimeInstance;
public static void main(String[] args){ javacInTimeInstance = new JavacInTime(); javacInTimeInstance.beforeJavac(); javacInTimeInstance.afterJavac(); }
private void beforeJavac(){ logger.info("\n前端编译"); logger.info(String.format("\n%s\n%s\n%s\n", "词法分析","语法分析","语义分析")); logger.info("\n产出IR"); }
private void afterJavac(){ logger.info("\n后端编译"); logger.info("\n热点字节码翻译为机器码");
logger.info("\n分层编译"); logger.info(String.format("\n%s\n%s\n%s\n%s\n%s\n", "解释执行","执行不带profiling的C1代码","执行仅带方法调用次数以及循环回边执行次数profiling的C1代码","执行带所有profiling的C1代码","执行C2代码")); } }
|