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

本文源码:GitHub·点这里 || GitEE·点这里java

1、虚拟机简介

一、虚拟机概念

虚拟机(Virtual Machine)指经过软件模拟的具备完整硬件系统功能的、运行在一个彻底隔离环境中的完整计算机系统。在实体计算机中可以完成的工做在虚拟机中都可以实现。在计算机中建立虚拟机时,须要将实体机的部分硬盘和内存容量做为虚拟机的硬盘和内存容量。每一个虚拟机都有独立的CMOS、硬盘和操做系统,能够像使用实体机同样对虚拟机进行操做。git

二、JVM虚拟机

JVM是Java-Virtual-Machine的缩写,即Java虚拟机,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是经过在实际的计算机上仿真模拟各类计算机功能来实现的。github

三、JVM特色

首先一次编译到处运行是学习Java语言都知道的事情,其实并非Java语言跨平台,是JVM跨平台,Jvm运行时并非执行Java文件,而是执行编译后的.class文件。编程

字节码数据结构

字节码文件即JVM能够识别并执行的二进制文件,不一样的编程语言通过编译器编译处理以后,转换成统一的字节码规范文件,这样JVM就能够执行。框架

跨平台jvm

跨平台的特性即JVM虚拟机能够运行在不一样的计算机系统上,例如常用的Linux系统,MacOS系统,Win系统,一次编译,到处运行就是这样理解的。编程语言

跨语言分布式

随着JVM的不断发展和优化,不少语言都借助JVM的能力,各类编程语言通过编译,转换为字节码文件,JVM均可以识别,这也是如今Java体系下业务编程常常混语言的缘由。源码分析

注意:如今和后续Jvm系列文章都是基于HotSpot-VM和JDK1.8+版本的基础之上。

2、虚拟机结构

Jvm的总体结构大体以下:

一、类加载器

类加载器用来加载Java类到JVM虚拟机中,源代码程序.java文件在通过编译器编译以后就被转换成字节代码.class文件,类加载器负责读取字节代码,并转换成java.lang.Class类的一个实例。

二、运行时数据区

元数据区

JDK1.8开始的说法,以前称为方法区Method-Area,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

堆区

全部线程共享的一块内存区域,虚拟机启动时被建立用来存放对象实例。

JVM栈

能够参考了解栈的数据结构,存放Java方法执行的内存模型,在Java开发中,一个功能实现须要多个子程序方法配合,程序执行时跳往子程序前,会将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,退回到原来的程序中。

本地方法栈

本地方法栈和虚拟机栈的功能相似,为JVM调用native方法时服务。

程序计数器

相对较小的一块内存空间,做用能够理解是当前线程所执行的字节码的行号指示器。

三、执行引擎

Java虚拟机最核心的组成部分,输入的是字节码,处理过程是字节码解析,输出执行结果。

3、生命周期

这里说的JVM生命周期,指JVM执行Java程序时的周期:

启动初始化:启动时经过引导类加载器建立初始类完成;

程序执行:从main方法开始,执行Java程序,直到程序执行完结束;

虚拟机退出:程序正常执行结束,或者发生异常、错误等而形成终止,也能够调用exit退出方法;

4、HotSpot虚拟机

HotSpot是Java体系下使用最多的虚拟机,它结合了最新的内存模型,垃圾收集器和自适应优化器,为使用许多先进技术的Java应用程序提供了最佳性能。

主要缘由:使用多,大部分的Java运行环境都依赖HotSpot虚拟机。

5、源代码地址

GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent

推荐阅读:数据源管理系列

标题
数据源管理:主从库动态路由,AOP模式读写分离
数据源管理:基于JDBC模式,适配和管理动态数据源
数据源管理:动态权限校验,表结构和数据迁移流程
数据源管理:关系型分库分表,列式库分布式计算
数据源管理:PostGreSQL环境整合,JSON类型应用
数据源管理:基于DataX组件,同步数据和源码分析
数据源管理:OLAP查询引擎,ClickHouse集群化管理
数据源管理:Kafka集群环境搭建,消息存储机制详解
数据源管理:搜索引擎框架,ElasticSearch集群模式
数据源管理:分布式NoSQL系统,Cassandra集群管理
相关文章
相关标签/搜索