本文源码: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-parentGitEE·地址https://gitee.com/cicadasmile/java-base-parent
举荐浏览:数据源治理系列
题目 |
---|
数据源治理:主从库动静路由,AOP模式读写拆散 |
数据源治理:基于JDBC模式,适配和治理动静数据源 |
数据源治理:动静权限校验,表构造和数据迁徙流程 |
数据源治理:关系型分库分表,列式库分布式计算 |
数据源治理:PostGreSQL环境整合,JSON类型利用 |
数据源治理:基于DataX组件,同步数据和源码剖析 |
数据源治理:OLAP查问引擎,ClickHouse集群化治理 |
数据源治理:Kafka集群环境搭建,音讯存储机制详解 |
数据源治理:搜索引擎框架,ElasticSearch集群模式 |
数据源治理:分布式NoSQL零碎,Cassandra集群治理 |