文章中知识点摘自/总结于尚硅谷教育《剑指JVM:虚拟机实践与性能调优》
文章如有错误or需要完善,还请指正,非常感谢!
文章参考/节选尚硅谷教育《剑指JVM:虚拟机实践与性能调优》,感兴趣的朋友可以直接阅读此书。
知识点:
- JVM负责解释执行字节码的程序,不仅可以执行Java程序,任何一种能够编译成字节码的计算机语言都可以在JVM上运行,如Groovy、Scala、JRuby、Kotlin等语言。
- JVM可以抽象的看做一台计算机,有自己的指令集以及各种运行时内存区域。
- JVM与Java语言并没有必然的联系,只与特定的二进制文件格式–class文件格式所关联。class文件包含JVM指令集[或者称为字节码(Bytecode)]和符号表,以及其他辅助信息。只要其他编程语言的编译结果满足并包含JVM的内部指令集、符号表以及其他辅助信息,它就能被虚拟机识别并装载执行。
- 平时说的Java字节码,指的是用Java语言编译成的字节码。任何能在JVM平台上执行的字节码格式都是一样的,统称JVM字节码。
- Java平台上的多语言混合编程正在成为主流,不同层用不同语言开发。接口对每一层的开发者都是透明的,各种语言交互不存在困难,最终都运行在一个虚拟机上。
- jdk包含jre包含jvm。
- 虚拟机分为物理虚拟机、程序虚拟机。前者有visualbox、VMware,完全是对物理计算机进行仿真。后者如JVM,专门为执行单个计算机程序而设计,在JVM中执行的指令称为Java字节码指令。
- JVM是一台可以执行Java字节码的虚拟机。运行的字节码文件不一定由Java语言编译而成。
- JVM包含自动垃圾回收的垃圾回收器和可靠的即时编译器。
- JVM是二进制字节码的运行环境。每一条Java指令,JVM规范中都有详细定义。
- JVM直接运行在操作系统上。
- hotspotvm是高性能虚拟机之一,采用解释器和即时编译器并存的架构。
- hotspotvm架构可以分成三层,
- 最上层为类装载器子系统。javac编译器将编译好的字节码文件,通过Java类装载器执行机制,把对象或字节码文件存放在JVM内存划分区域。
- 中间层为运行时数据区。主要是在Java代码运行时用于存放数据的区域,包括方法区、堆、Java栈、程序计数器、本地方法栈。
- 最下层为执行引擎层。执行引擎包含解释器、jit编译器和垃圾回收器。