1.Java和jdk的关系
JDK(Java development kit) Java开发工具,包括: 编译器, Java运行环境(JRE,Java Runtime environment), JVM(Java虚拟机)监控和诊断工具等。 Java表示一种开发语言。
2.Java程序的执行
1 ) Java代码编译成字节码,即 .Java文件 编译成 .class文件 。具体过程为: Java源代码->词法分析器->语法分析器->语义分析器->字节码生成器->字节码 任一过程失败均会导致编译失败;
2 ) 把class文件放置到JVM(通常指oracle官方自带的Hotspot JVM);
3 ) JVM使用类加载器(Class Loader)装载class文件;
4 ) 字节码校验->JVM解释器翻译成机器码->操作系统执行机器码;
注:针对热点代码,Hotspot JVM提供了JIT(Just In Time,动态编译器),能够在运行时将热点代码编译为机器码,这个时候字节码就变成了编译执行。
3.JVM判定热点代码
1 ) 基于采样的热点判定 JVM周期性的检查各个线程的栈顶,若某些方法经常出现在栈顶,即为“热点方法”。
优点:实现简单
缺点:很难精确一个方法的热度,容易受到线程阻塞或外界因素的影响
2 )基于计数器的热点判定 JVM给每一个方法甚至代码块建立一个计数器,统计方法的执行次数,超过一定的阀值则标记为此方法为热点方法。
方法调用计数器:在client模式下阀值为1500次,server模式下为10000次,时间段内的调用方法的次数较少,计数器就减少。
回边计数器:主要统计方法中循环体代码执行的次数。