java-1.1 jvm-architecture

166 阅读3分钟

jvm体系

image.png

类装载器

每一个Java虚拟机都由一个类加载器子系统(class loader subsystem),负责加载程序中的类型(类和接口),并赋予唯一的名字。每一个Java虚拟机都有一个执行引擎(execution engine)负责执行被加载类中包含的指令。JVM的两种类装载器包括:启动类装载器和用户自定义类装载器,启动类装载器是JVM实现的一部分,用户自定义类装载器则是Java程序的一部分,必须是ClassLoader类的子类。

运行时数据区

主要包括:方法区,堆,Java栈,PC寄存器,本地方法栈

执行引擎:

它或者在执行字节码,或者执行本地方法

主要的执行技术有:解释,即时编译,自适应优化、芯片级直接执行其中解释属于第一代JVM,即时编译JIT属于第二代JVM,自适应优化(目前Sun的HotspotJVM采用这种技术)则吸取第一代JVM和第二代JVM的经验,采用两者结合的方式 。

自适应优化:开始对所有的代码都采取解释执行的方式,并监视代码执行情况,然后对那些经常调用的方法启动一个后台线程,将其编译为本地代码,并进行仔细优化。若方法不再频繁使用,则取消编译过的代码,仍对其进行解释执行。

JVM的特点

  • 基于堆栈的虚拟机:最流行的计算机体系结构,如英特尔 X86 架构和 ARM 架构上运行基于 寄存器。比如,安卓的 Davilk 虚拟机就是基于 寄存器 结构,而 JVM 是基于栈结构的。
  • 符号引用 :除了基本类型以外的数据 (类和接口) 都是通过符号来引用,而不是通过显式地使用内存地址来引用。
  • 垃圾收集 :一个类的实例是由用户程序创建和垃圾回收自动销毁。
  • 网络字节顺序 :Java class文件用网络字节码顺序来进行存储,保证了小端的Intel x86架构和大端的RISC系列的架构之间的无关性。

JVM启动

HotSpot VM是目前市面上高性能虚拟机的代表作之一。

它采用解释器与即时编译器并存的架构。

在今天,Java程序的运行性能早已脱胎换骨,已经达到了可以和C/C++程序一较高下的地步。

执行引擎包含三部分:解释器,即时编译器,垃圾回收器

image.png

  1. 根据JVM内存配置要求,为JVM申请特定大小的内存空间;
  2. 创建一个引导类加载器实例,初步加载系统类到内存方法区区域中;
  3. 创建JVM 启动器实例 Launcher,并取得类加载器ClassLoader;
  4. 使用上述获取的ClassLoader实例加载我们定义的 org.luanlouis.jvm.load.Main类;
  5. 加载完成时候JVM会执行Main类的main方法入口,执行Main类的main方法;
  6. 结束,java程序运行结束,JVM销毁。