本文源码: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集群管理

虚拟机系列 | JVM特点,基础结构与执行周期的更多相关文章

  1. 虚拟机系列 | JVM类加载机制

    本文源码:GitHub·点这里 || GitEE·点这里 一.类加载简介 类的加载机制是指把编译后的.class类文件的二进制数据读取到内存中,并为之创建一个java.lang.Class对象,用来封 ...

  2. 虚拟机系列 | JVM运行时数据区

    本文源码:GitHub·点这里 || GitEE·点这里 一.内存与线程 1.内存结构 内存是计算机的重要部件之一,它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱 ...

  3. 【java虚拟机系列】java虚拟机系列之JVM总述

    我们知道java之所以能够快速崛起一个重要的原因就是其跨平台性,而跨平台就是通过java虚拟机来完成的,java虚拟机属于java底层的知识范畴,即使你不了解也不会影响绝大部分人从事的java应用层的 ...

  4. JVM虚拟机系列(一)类的加载

    JAVA虚拟机系列(一) 类的加载 目录 1 类的初始化过程 2 详解初始化时的各个阶段 一.类初始化的过程 先来看一个CLASS文件在整体生命周期里会遇到的阶段: xxxx.class ---> ...

  5. Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区

    前言 之前写博客一直比较随性,主题也很随意,就是想到什么写什么,对什么感兴趣就写什么.虽然写起来无拘无束,自在随意,但也带来了一些问题,每次写完一篇后就要去纠结下一篇到底写什么,看来选择太多也不是好事 ...

  6. 【java虚拟机系列】从java虚拟机字节码执行引擎的执行过程来彻底理解java的多态性

    我们知道面向对象语言的三大特点之一就是多态性,而java作为一种面向对象的语言,自然也满足多态性,我们也知道java中的多态包括重载与重写,我们也知道在C++中动态多态是通过虚函数来实现的,而虚函数是 ...

  7. java虚拟机之JVM生命周期

    java生命周期分为以下三部分:启动,运行,消亡. 启动.启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的 ...

  8. Maven系列第6篇:生命周期和插件详解,此篇看过之后在maven的理解上可以超越同级别90%的人!

    maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能. 这是maven系列第6篇. 整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部 ...

  9. [转帖]Java虚拟机(JVM)体系结构概述及各种性能参数优化总结

    Java虚拟机(JVM)体系结构概述及各种性能参数优化总结 2014年09月11日 23:05:27 zhongwen7710 阅读数 1437 标签: JVM调优jvm 更多 个人分类: Java知 ...

随机推荐

  1. SpringBoot --- 自定义 Starter

    SpringBoot --- 自定义 Starter 创建 1.需要创建一个新的空工程 2.新的工程需要引入两个模块 一个Maven 模块 作为启动器 一个SpringBoot 模块 作为自动配置模块 ...

  2. ElasticSearch实战系列七: Logstash实战使用-图文讲解

    前言 在上一篇中我们介绍了Logstash快速入门,本文主要介绍的是ELK日志系统中的Logstash的实战使用.实战使用我打算从以下的几个场景来进行讲解. 时区问题解决方案 在我们使用logstas ...

  3. unity探索者之socket传输protobuf字节流(二)

    版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/6977935.html 上一篇主要说的是protobuf字节流的序列化和解析,将pr ...

  4. JAVA-单例模式的几种实现方式

    一.什么是单例模式 单例:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的软件设计模式之一,其目的是保证整个应用中只存在类的唯一个实例. 比如我们在系统启动时,需要加载一些 ...

  5. 非对称加密与HTTPS(转)

    序:HTTPS更安全,为什么? 因为HTTP协议本身毫无安全性可言. 当你访问一个纯HTTP的网站(以及与这个网站有任何网络交互)时,你发出去一个请求.在这个请求到达网站服务器的路途上,不管是你家的路 ...

  6. 测量定位实践-:C#采集控制

    用Halcon已经完成采集,在在C#中不行. 其实还是比较简单,主要是Halcon封装的太好了. 主要是以下几个算子: *打开 Image Acquisitionopen_framegrabber ( ...

  7. 复制输入框内容(兼容ios)

    const copyInput = document.querySelector('.copy-container'); copyInput.select(); //安卓可识别进行选中 copyInp ...

  8. shell脚本同步私人git仓库

    前言 分别在个人电脑.个人服务器.码云三个地方建立了数据仓库用于保存自己的各种数据,通过git+shell进行数据同步. 此举不仅可以避免因存储损坏.版本更迭.数据误操作等因素带来的各种麻烦,也能实现 ...

  9. quartz表(11张)

    /* Navicat Premium Data Transfer Source Server : 本地连接 Source Server Type : MySQL Source Server Versi ...

  10. Vue基础(一)---- 模板语法

    1.基本理解 Vue其实是一个渐进式JavaScript框架,封装好了一些方法,不再需要操作通过操作DOM,在相同的目标下能够更快的编写代码. 声明式渲染→组件系统→客户端路由→集中式状态管理→项目构 ...