JVM
JVM
是一种程序,提供了Java程序所需的运行时环境
,是字节码程序的解释器
。
JVM
:Java Virtual Machine ,java虚拟机运行时
:指一个程序在运行时或者被执行时需要的依赖解释器
:把字节码解释成机器码
JVM 的特点
- 代开发者管理内存
- 提供
跨平台
的执行环境
跨平台
JVM 是Java 跨平台(可移植性)的核心:因为JVM在不同的系统有不同的实现,而同一段代码在编译后的字节码是一样的,但同一段字节码,在不同的JVM实现上会映射到不同系统的API调用。
JRE
JRE
(Java Runtime Environment)是Java运行时环境,主要包括两个部分:
- JVM 的标准实现
- Java的一下基本类库(这个部分相当于 JVM 多出来的部分)
JDK
JDK
(Java Development Kit)是Java开发工具包,是Java开发的核心,继承了 JRE 和一些工具(javac.exe 、java.exe 、jar.exe)
JVM的两大编译器(java 8)
-
javac 编译器
:与一般的编译器
不同,javac生成的是字节码,而不是机器码。 -
JIT 编译器
:在java运行时的生命周期中,把热点方法(热点代码)
编译成机器码,提升程序运行性能。
编译器
:把源程序的语句编译成机器码热点方法(热点代码)
:被调用次数多的部分
Java程序运行时的情况
java 程序的字节码被解释器一条条地解释成机器码,如果通过热点探测
,发现热点代码,会将热点代码直接编译成机器码存起来(可以理解为缓存
),下次再被调用时,不用再解释成机器码。
热点探测
热点探测这里主要介绍2种方法:
- 基于
采样
的热点探测:采用这种方法的虚拟机会周期性地检查各个线程的栈顶,如果发现某些方法经常出现在栈顶,则判定为热点方法(热点代码)
优点:实现简单高效,容易获取方法调用关系
缺点:不准确,容易收到线程阻塞或别的外界因素的影响而扰乱热点探测
- HotSpot ,基于
计数器
的热点探测:采用这种方法的虚拟机会为每个方法(甚至是代码块)建立计数器,统计执行次数,如果次数超过一定的阈值,就认定为热点方法(热点代码
。
优点:统计结果精确严谨
缺点:实现麻烦,不能直接获取到方法的调用关系