JVM基本介绍

JVM基本介绍

Java虚拟机的内部可以划分为:

  • 类加载器
  • 运行时数据区
  • 执行引擎

Java源代码通过Java编译器编译为Java字节码文件,然后通过类加载器加载Java字节码文件运行。

类加载器

类加载器是Java虚拟机的一个子系统,用于加载类文件。因此每当一个Java程序在被执行的时候,它都会由类加载器加载运行。

对于任意一个类,都需要由它的类加载器和这个类本身一同确定其在 JVM 中的唯一性。也就是说,如果两个类的加载器不同,即使两个类来源于同一个字节码文件,那这两个类就必定不相等(比如两个类的 Class 对象不 equals)。

运行时数据区

运行时数据区包括:

程序计数器

一般是寄存器,主要记录程序要下一步执行代码内存地址(基地址+偏移地址)

JVM栈

JVM 栈也是线程私有的。每一个 JVM 线程都有自己的 JVM 栈,这个栈与线程同时创建,它的生命周期与线程相同。

本地方法栈

JVM 可能会使用到传统的栈来支持 Native 方法(使用 Java 语言以外的其它语言[C语言]编写的方法)的执行,这个栈就是本地方法栈。

堆(Heap),在 JVM 中,堆是可供各条线程共享的运行时内存区域,也是供所有类实例和数据对象分配内存的区域。

方法区

堆(Heap),在 JVM 中,堆是可供各条线程共享的运行时内存区域,也是供所有类实例和数据对象分配内存的区域。

运行时常量池

堆(Heap),在 JVM 中,堆是可供各条线程共享的运行时内存区域,也是供所有类实例和数据对象分配内存的区域。

执行引擎

执行引擎包括了:

  • 解释器:读取字节码流,然后执行指令。因为它是一行一行地解释和执行指令,所以它可以很快地解释字节码,但是执行起来会比较慢(毕竟要一行执行完再执行下一行)。
  • 即时(Just-In-Time,JIT)编译器:即时编译器用来弥补解释器的缺点,提高性能。执行引擎首先按照解释执行的方式来执行,然后在合适的时候,即时编译器把整段字节码编译成本地代码。然后,执行引擎就没有必要再去解释执行方法了,它可以直接通过本地代码去执行。执行本地代码比一条一条进行解释执行的速度快很多。编译后的代码可以执行的很快,因为本地代码是保存在缓存里的。
posted @ 2023-02-20 17:24  LilyFlower  阅读(18)  评论(0编辑  收藏  举报