Java虚拟机结构

JVM整体结构

  • class文件生成模块(通过jdk中自带javac编译命令来生成class文件)
  • 类加载器子系统模块(将class字节码加载到JVM虚拟机内存中)(在这个结构中占主要功能)
  • 内存空间主要分为方法区、Java堆、Java栈、本地方法栈,分别用来存储class字节码不同的内容
  • GC模块

编译流程:

JVM中的类加载器

  • Bootstrap ClassLoader(专门用来加载jre\lib\rt.jar包中的字节码)

  • Extension ClassLoader(专门用来加载jre\lib\ext中所有jar包的字节码)

前两个加载器是用来加载jdk中特定的jar包的

  • App ClassLoader(加载应用程序中的ClassLoader)

  • Custom ClassLoader(自定义的ClassLoader,可以进行重写来加载指定的class文件)

加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。

类的加载流程

Java虚拟机结构_第1张图片
  • Loading:类的信息从文件中获取并且载入到JVM的内存里(将class字节码加入了内存当中)

  • Verifying:检查读入的结构是否符合JVM规范的描述(验证字节码)

  • Preparing:分配一个结构用来存储类信息

  • Resolving:把这个类的常量池中的所有的符号引用改变成直接引用

  • Initializing:执行静态初始化程序,把静态变量初始化成指定的值

你可能感兴趣的:(Java虚拟机结构)