JVM虚拟机概述

JVM虚拟机概述

一、JVM是什么?

JVM全称是 Java Virtual Machine ,中文译名 Java虚拟机 , 是一个运行在计算机上的程序,他的职责是运行Java字节码文件

在这里插入图片描述

二、JVM的功能

  • 1、解释和运行

    • 对字节码文件中的指令,实时的解释成机器码,让计算机执行
  • 2、内存管理

    • 自动为对象、方法等分配内存
    • 自动的垃圾回收机制 (GC) , 回收不再使用的对象
  • 3、即时编译

    • 对热点代码进行优化,提升执行效率

三、JVM的组成

JVM 大致可以划分为三个部分,分别是类加载器(Class Loader)、运行时数据区(Runtime Data Areas)和执行引擎(Excution Engine)

img

类加载器

类加载器用来加载类文件,也就是 .class 文件,主要负责将字节码文件加载到内存中,主要会经历加载->连接->实例化这三个阶段

运行时数据区

JVM 定义了 Java 程序运行期间需要使用到的内存区域,简单来说,这块内存区域存放了字节码信息以及程序执行过程的数据,垃圾收集器也会针对运行时数据区进行对象回收的工作。

img

执行引擎

执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以。简单来说,JVM 中的执行引擎充当了将高级语言翻译为机器语言的译者。

img

  • 解释器:读取字节码,然后执行指令。因为它是一行一行地解释和执行指令,所以它可以很快地解释字节码,但是执行起来会比较慢(毕竟要一行执行完再执行下一行)。
  • 即时编译器:执行引擎首先按照解释执行的方式来执行,随着时间推移,即时编译器会选择性的把一些热点代码编译成本地代码。执行本地代码比一条一条进行解释执行的速度快很多,因为本地代码是保存在缓存里的。
  • 垃圾回收器:用来回收堆内存中的垃圾对象。

四、虚拟机内存

JVM内存一般指的就是运行时数据区,通常包括:方法区、堆、虚拟机栈、本地方法栈以及程序计数器五个部分。不过,运行时数据区的划分也随着JDK的发展不断变迁,JDK 1.6、JDK 1.7、JDK 1.8 的内存划分都会有所不同。

img

程序计数器

程序计数器(Program Counter Register)也叫PC寄存器,每个线程会通过程序计数器记录当前要执行的的字节码指令的地址

在这里插入图片描述

虚拟机栈

Java虚拟机栈(Java Virtual Machine Stack)采用栈的数据结构来管理方法调用中的基本数据,先 进后出(First In Last Out),每一个方法的调用使用一个栈帧(Stack Frame)来保存

在这里插入图片描述

在这里插入图片描述

本地方法区

在这里插入图片描述

在这里插入图片描述

方法区

  • 方法区是存放基础信息的位置,线程共享,主要包含三部分内容:

    • 类的元信息:保存了所有类的基本信息(成员变量,方法等)
    • 运行时常量池:保存了字节码文件中的常量池内容
    • 字符串常量池:保存了字符串常量
  • 方法区是《Java虚拟机规范》中设计的虚拟概念,每款Java虚拟机在实现上都各不相同。Hotspot设计如下:

    • JDK7及之前的版本将方法区存放在堆区域中的永久代空间,堆的大小由虚拟机参数来控制。
    • JDK8及之后的版本将方法区存放在元空间中,元空间位于操作系统维护的直接内存中,默认情况下只要不 超过操作系统承受的上限,可以一直分配。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值