onedrive|虚拟机系列:JVM特点,基础结构与执行周期

onedrive|虚拟机系列:JVM特点,基础结构与执行周期

文章图片


一、虚拟机简介1、虚拟机概念
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统 。 在实体计算机中能够完成的工作在虚拟机中都能够实现 。 在计算机中创建虚拟机时 , 需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量 。 每个虚拟机都有独立的CMOS、硬盘和操作系统 , 可以像使用实体机一样对虚拟机进行操作 。
2、JVM虚拟机
JVM是Java-Virtual-Machine的缩写 , 即Java虚拟机 , JVM是一种用于计算设备的规范 , 它是一个虚构出来的计算机 , 是通过在实际的计算机上仿真模拟各种计算机功能来实现的 。
3、JVM特点



首先一次编译处处运行是学习Java语言都知道的事情 , 其实并不是Java语言跨平台 , 是JVM跨平台 , Jvm运行时并不是执行Java文件 , 而是执行编译后的.class文件 。
【onedrive|虚拟机系列:JVM特点,基础结构与执行周期】字节码
字节码文件即JVM可以识别并执行的二进制文件 , 不同的编程语言经过编译器编译处理之后 , 转换成统一的字节码规范文件 , 这样JVM就可以执行 。
跨平台
跨平台的特性即JVM虚拟机可以运行在不同的计算机系统上 , 例如经常使用的Linux系统 , MacOS系统 , Win系统 , 一次编译 , 处处运行就是这样理解的 。
跨语言
随着JVM的不断发展和优化 , 很多语言都借助JVM的能力 , 各种编程语言经过编译 , 转换为字节码文件 , JVM都可以识别 , 这也是现在Java体系下业务编程经常混语言的原因 。
注意:现在和后续Jvm系列文章都是基于HotSpot-VM和JDK1.8+版本的基础之上 。
二、虚拟机结构Jvm的整体结构大致如下:


1、类加载器
类加载器用来加载Java类到JVM虚拟机中 , 源代码程序.java文件在经过编译器编译之后就被转换成字节代码.class文件 , 类加载器负责读取字节代码 , 并转换成java.lang.Class类的一个实例 。
2、运行时数据区
元数据区
JDK1.8开始的说法 , 之前称为方法区Method-Area , 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据 。
堆区
所有线程共享的一块内存区域 , 虚拟机启动时被创建用来存放对象实例 。
JVM栈
可以参考了解栈的数据结构 , 存放Java方法执行的内存模型 , 在Java开发中 , 一个功能实现需要多个子程序方法配合 , 程序执行时跳往子程序前 , 会将下个指令的地址存到堆栈中 , 直到子程序执行完后再将地址取出 , 退回到原来的程序中 。
本地方法栈
本地方法栈和虚拟机栈的功能类似 , 为JVM调用native方法时服务 。
程序计数器
相对较小的一块内存空间 , 作用可以理解是当前线程所执行的字节码的行号指示器 。
3、执行引擎
Java虚拟机最核心的组成部分 , 输入的是字节码 , 处理过程是字节码解析 , 输出执行结果 。
三、生命周期这里说的JVM生命周期 , 指JVM执行Java程序时的周期:
启动初始化:启动时通过引导类加载器创建初始类完成;
程序执行:从main方法开始 , 执行Java程序 , 直到程序执行完结束;
虚拟机退出:程序正常执行结束 , 或者发生异常、错误等而造成终止 , 也可以调用exit退出方法;
四、HotSpot虚拟机HotSpot是Java体系下使用最多的虚拟机 , 它结合了最新的内存模型 , 垃圾收集器和自适应优化器 , 为使用许多先进技术的Java应用程序提供了最佳性能 。
主要原因:使用多 , 大部分的Java运行环境都依赖HotSpot虚拟机 。


    推荐阅读