虚拟机
![](https://img2022.cnblogs.com/blog/1437100/202209/1437100-20220904091436649-1853638851.png)
class 和 java类库都加载到内存
利用字节码解释器 逐行解释 对于热点代码用即时编译器处理
利用JVM跨平台
不同的平台有特定的JVM ,由JVM将Class文件转换成对应平台的二进制文件,才实现了平台无关性
实际上,JVM不仅被Java语言所使用,还有如Scala、Jython等语言的编译过程也使用JVM
其实JVM和Java无关
JVM vs JDK vs JRE
JVM
java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在
JRE
JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不能用于创建新程序
JDK
jDK 是 Java Development Kit 缩写,它是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序
JVM 命令
jps 查看java进程
jinfo 实时查看和调整jvm配置参数
jinfo -flag MaxHeapSize 11280
-XX:MaxHeapSize=85.....
jstat
查看虚拟机性能统计信息
查看类加载信息
jstat -class 进程号 打印间隔时间 打印次数
如 jstat -class 11280 500 10
打印gc信息
jstat -gc 11280 500 10
jmap
jamp -heap 11280 打印堆内存相关信息
jstack PID
查看线程堆栈信息 --- 便于判断jvm死锁问题
JVM 性能优化指南