JVM 相关 - Tung in ECNU


JVM 相关

对Java 的理解

Java 的基本特性

  1. 平台无关性
  2. GC机制
  3. 语言特性:泛型、反射、Lambda表达式
  4. 面相对象:封装、继承、多态
  5. 类库
  6. 异常处理

平台无关性

Class文件

Class 文件指的是以.class为后缀的文件,它包含可被JVM执行的字节码,通常由JVM平台编程语言源代码文件(例如.java、.kt、.groovy文件等)编译而来,也可通过字节码工具生成(例如ASM

JVM的架构

完整的Java虚拟机由三块内容组成:

  1. 类装载子系统
  2. 运行时数据区(内存模型)
  3. 执行引擎

栈帧

栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。第一个方法从调用开始到执行完成,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

每一个栈帧都包括了局部变量表,操作数栈,动态连接,方法返回地址和一些额外的附加信息。在编译代码的时候,栈帧中需要多大的局部变量表,多深的操作数栈 都已经完全确定了,并且写入到了方法表的Code属性中,因此一个栈帧需要分配多少内存,不会受到程序运行期变量数据的影响,而仅仅取决于具体虚拟机的实现

img

JVM 如何加载 .class 文件

JVM 用来屏蔽底层操作系统的不同,并减少基于原生语言开发的复杂性

反射

Java的反射机制是在运行状态中,动态获取信息及动态调用对象方法

对于任意一个,都能知道这个类的所有方法和属性

对于任意一个对象,都能调用它的任意方法和属性

从编译到执行

ClassLoader

它主要工作在Class装在的加载阶段,主要作用是从系统外部获得Class二进制数据流,他是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过将Class文件里的二进制数据装进系统,然后交给Java虚拟机进行连接、初始化。

双亲委派机制

本文链接:

https://noahtung.xyz/index.php/archives/6/