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 程序的字节码被解释器一条条地解释成机器码,如果通过热点探测,发现热点代码,会将热点代码直接编译成机器码存起来(可以理解为缓存),下次再被调用时,不用再解释成机器码。

VisualVM工具的使用_jvmv 监控服务器_java



热点探测

热点探测这里主要介绍2种方法:

  • 基于采样的热点探测:采用这种方法的虚拟机会周期性地检查各个线程的栈顶,如果发现某些方法经常出现在栈顶,则判定为热点方法(热点代码)

优点:实现简单高效,容易获取方法调用关系
缺点:不准确,容易收到线程阻塞或别的外界因素的影响而扰乱热点探测

  • HotSpot ,基于计数器的热点探测:采用这种方法的虚拟机会为每个方法(甚至是代码块)建立计数器,统计执行次数,如果次数超过一定的阈值,就认定为热点方法(热点代码

优点:统计结果精确严谨
缺点:实现麻烦,不能直接获取到方法的调用关系