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

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

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

  3. JVM虚拟机学习 - JVM类加载,JVM内存模型,JVM性能分析工具

    JVM虚拟机 二 JVM类加载 类的生命周期 加载: ​ 加载class文件到二进制字节流,然后再将二进制字节流转化为方法区的运行时数据结构,生成一个对应的Class对象作为类各种数据的访问入口. 链 ...

  4. java中判断undefined_Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区

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

  5. JVM(类加载、运行时数据区、堆内存、方法区、本地接口、执行引擎和垃圾回收)java虚拟机(JVM)的超详细知识点

    JVM虚拟机 一.JVM的概述 1.为什么要学习JVM 2.虚拟机 3.JVM的作用 作用 特点 4.JVM的位置 5.JVM的分类 6.各个组成部分的用途 7.Java 代码的执行流程 8.JVM ...

  6. 【Java书笔记】:《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》第2部分-自动内存管理,第3部分-虚拟机执行子系统,第5部分-高效并发

    作者:周志明 整理者GitHub:https://github.com/starjuly/UnderstandingTheJVM 第2部分-自动内存管理 第2章 Java内存区域与内存溢出异常 2.2 ...

  7. java虚拟机学习-JVM调优总结-新一代的垃圾回收算法(11)

    java虚拟机学习-深入理解JVM(1) java虚拟机学习-慢慢琢磨JVM(2) java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制 java虚拟机学习-JVM内存管理:深 ...

  8. 深入Java虚拟机之 --- JVM的爱恨情仇

    (本文参考深入理解JAVA虚拟机第二版第2章) 系列文章: 深入Java虚拟机之 - JVM的爱恨情仇 JAVA 垃圾回收机制(一) - 对象回收与算法初识 JAVA 垃圾回收机制(二) - GC回收 ...

  9. JVM基本架构及生命周期

    JVM基本架构及生命周期 Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成.JVM平台的各种语言可以共享Java虚拟机带来的 ...

最新文章

  1. Python 是一门动态的、强类型语言
  2. 简单实现支付密码输入框 By HL
  3. E. Turn Off The TV Educational Codeforces Round 29
  4. C语言面向对象编程(六):配置文件解析
  5. SAP云平台API portal里的discover all功能
  6. Java 答疑:JDK 11(Java 11)之后没有 JRE 目录,环境用户变量配置的解决方法
  7. 猴子选大王--约瑟夫问题浅析
  8. java stringjoiner_java-为什么我们已经拥有StringBuilder时使用StringJoiner?
  9. 列级触发器 SQL Server
  10. 年度影像旗舰vivo X70系列正式发布 售价3699元起
  11. 【链表】链表中环的入口结点
  12. 软考架构设计师脑图总结
  13. PHP银行卡信息基类大全
  14. 状压DP例题(种花小游戏+广场铺砖)
  15. 《具体数学》部分习题解答1
  16. nginx服务器,访问目录下php文档会直接下载,而不是转到页面
  17. 如何将彩色证件照调成黑白
  18. 服务器系统如何更新补丁,服务器更新操作系统补丁
  19. 计算机开机需要注意什么,笔记本电脑第一次开机注意事项
  20. wine的安装及使用

热门文章

  1. JAVA中extends 与implements区别
  2. VSCODE 一键编译运行
  3. 数据结构之图的存储结构:十字链表法
  4. opencv调试利器ImageWatch的安装使用
  5. Java数字匹配的kmp算法
  6. socket epoll网络编程实例
  7. Python判断一个字符串是否可以转换为数字(字符串转数字、字符串转整形、字符串转int、字符串转浮点型)
  8. docker 搭建 ftp服务器
  9. SQLAlchemy ORM教程之一:Create
  10. Nvidia Jetson TX2入门指南(白话版)