本文源码:GitHub·点这里 || GitEE·点这里
一、虚拟机简介
1、虚拟机概念
虚拟机(Virtual Machine)指通过软件模仿的具备残缺硬件零碎性能的、运行在一个齐全隔离环境中的残缺计算机系统。在实体计算机中可能实现的工作在虚拟机中都可能实现。在计算机中创立虚拟机时,须要将实体机的局部硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的 CMOS、硬盘和操作系统,能够像应用实体机一样对虚拟机进行操作。
2、JVM 虚拟机
JVM 是 Java-Virtual-Machine 的缩写,即 Java 虚拟机,JVM 是一种用于计算设施的标准,它是一个虚构进去的计算机,是通过在理论的计算机上仿真模仿各种计算机性能来实现的。
3、JVM 特点
首先一次编译处处运行是学习 Java 语言都晓得的事件,其实并不是 Java 语言跨平台,是 JVM 跨平台,Jvm 运行时并不是执行 Java 文件,而是执行编译后的.class 文件。
字节码
字节码文件即 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 虚拟机。
五、源代码地址
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 集群治理 |