Java虚拟机的技术总结

什么是Java虚拟机(JVM)

什么是 JVM ?
了解什么是JVM之前先简单说下什么是Java ?, 啥是Java很难用一句话来概括,我们从四个方面来阐述 .
在这里插入图片描述

  1. 通过JVM实现跨平台
    1. 简单说就是Java的代码编译好之后,是跑在一台虚拟的机器上的,并且负责分配内存和维护调用堆栈
    2. 为什么要做成虚拟的机器这要从Java的一次编译到处执行来说。事实上一次编译到处执行是不可能的,因为每个机器不一样,所以传统上我们必须针对每一种机器编译代码,才能在这个机器上运行。而Java通过引入虚拟机(VM)的概念,让编译后的代码直接跑在一台虚拟的机器上,无论最终的目标平台是什么,都在上面构建出一个虚拟的一致的虚拟机出来,就可以达到一次编译到处执行的效果了。
    在这里插入图片描述
  2. JVM的总体结构
    JVM 由 三个主要部件构成 :
    ① 类加载器 ② 运行时数据区 ③ 执行引擎
    在这里插入图片描述
    (1) 类加载器 [ClassLoader] :
    它负责在运行时查找和装入类文件的类 , JVM里有多个类加载器 , 每个类加载器负责加载特定位置的类.(如下图:) 例如
    引导类加载器(bootstrap) : 负责加载 jre/lib/rt.jar 中的类
    扩展类加载器(extclassloader) : 负责加载 jre/lib/ext/*.jar 中的类
    系统类加载器(appclassloader) :开发人员自己编写的类在这里插入图片描述
    (2) 运行时数据区
    运行时数据区分为五个区域
    方法区和堆区是一个公共区域
    虚拟机栈、本地方法栈、程序计数器是每个线程专有的私有区域

方法区:它存放一些加载后的类信息(有类的版本、字段、方法、接口等描述信息)、常量、静态变量等信息.
在这里插入图片描述
堆区:在JVM启动时创建 , 它存放对象实例,几乎所有的对象实例都在这里分配内存, 这块区域也是 GC(垃圾回收机制) 重点清理的区域 。

虚拟机栈:每一线程都会在这个区域创建一个栈, 当执行一个方法时会创建一个栈帧 , 栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息 , 基本变量和对象的引用变量都存放于此.栈中执行顺序是 “后入先出(LIFO)

在这里插入图片描述
程序计数器 : 它存储或说记录当前线程之前执行的任务状态,等线程抢到CPU时间片时,继续未完成的任务.[也称为PC寄存器]

本地方法栈: == 用于JNT调用等 ,.JNI技术,java调用c语言等其它语言开发的函数 == ,本地方法栈中也会抛出StackOverflowError 和 OutOfMemory异常.该区域不受 GC 所管制.

(3) 执行引擎 [Runtime Data Area] : (如上图所示) 执行引擎 将字节码分配给运行时数据区 , 执行引擎读取字节码并逐段执行.其中图中的
本地接口 (JNI): JNI 会与本地方法库进行交互并提供执行引擎所需的本地库。
本地方法库:它是一个执行引擎所需的本地库的集合。
  1. 总结
    跨平台方面:
    在不同操作平台上,jvm充当了一个翻译官的角色,也使java 有跨平台这个特性.也对应了他的口号==“一次编译,到处执行”==
    结构方面:
    对各个区域的作用以及流程都进行了一番梳理、
感谢观看,点赞!点赞!点赞!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值