JAVA全栈JVM篇————初识JVM

🍏🍏🍏一.JVM到底是什么

Java全称java virtual machine,中文译名Java虚拟机,本质上是一个运行在计算机上的程序,职责是运行java字节码文件

🍏🍏🍏二.JVM的作用------------机器世界的翻译官

字节码文件中包含了一连串的指令,我们称之为字节码指令,这些指令无法直接在计算机上运行,计算机只能识别机器码的内容,所以java虚拟机就需要将字节码转换成机器码,这个过程称为解释,类似于将一门语言翻译成另外一门语言的过程

🍏🍏🍏三.JVM的三大核心功能

其中内存管理是JVM相比于C和C++的一大优势,c和c++对象的回收需要程序员手动写代码,对程序员水平要求极高,如果不小心忘记,这个对象就会永远在内存中存在,不会再回收,而jvm的出现降低了程序员编程的难度,下面来重点介绍一下JVM的即时编译功能

🍏🍏🍏四.全面看待JVM---------哪有什么完美无暇,只是一种取舍罢了

下图是JVM同C和C++的编译过程对比图

🍬 在不做任何优化的前提下,java语言需要将字节码指令,实时的通过java虚拟机解释成机器码,才可以交给计算机运行,这个过程随着程序的执行需要反复进行,每一次进行都会花费一定的时间。

🍬相比之下,c和c加加在编译过程中可以直接将源代码文件转换成计算机认可的机器码,只要运行机器码就可以得到最终的结果,节省了解释的过程,这样java的性能就不如c和c++了。

实时解释是为了支持跨平台特性,java语言将字节码交给不同的平台比如windows和linux,这些平台会安装不一样的java虚拟机,他们分别将它解释成当前这个平台的机器码,然后就可以交给不同的操作系统运行从而实现跨平台。

🍬c和c加加追求性能,但是不能跨平台,java支持跨平台,性能就会差一些,但是好在JVM开发者很早的就注意到这个问题,在jdk1.1版本中就引入了即时编译功能

🍬假设现在有一个Java字节码文件,里面有一段字节码指令,虚拟机如果发现这段指令是热点代码,也就是在很短时间内被多次调用,它就会认为这段代码有必要去优化,就会主动优化并且解释成计算机能够执行的机器码,然后做一个非常关键的步骤,将这个机器码保存在内存中,第二次执行时就直接从内存中把这个机器码取出来直接进行调用,这样就省略了一次解释的步骤,提高了性能。如下图所示

🍬这样JVM提供即时编译(JIT)进行性能的优化,最终达到接近C,C++语言的运行性能甚至在特定场景下实现超越。

🍬那你是不是以为真的jvm就完全碾压C和C++了,那就大错特错了,前面说到JAVA会把代码存入内存,第二次直接调用,省去了一次解释的时间,但是也占用了内存,本质上是以空间换时间的思想,所以大多数java程序都很占内存

🍬所以说没有天生完美的语言,只有权衡利弊后的取舍罢了

🍏🍏🍏五.JVM的组成

类加载器 :加载class字节码文件中的内容到内存中
内存区 :负责管理JVM使用到的内存,比如创建对象和销毁对象
执行引擎 :将字节码文件中的指令解释成机器码,同时使用即时编译器优化性能,还可以调用本地接口
本地接口:调用本地已经编译的方法,比如线程类中提供的像线程休眠这种的C和C++方法

🍏🍏🍏六.JVM的发展历程

🍏🍏🍏七.不同版本的JVM之间的区别

🍬🍬🍬第一款(Oracle JDK)作为安装jdk时的默认虚拟机,社区最为活跃,使用也最为广泛,如下图,我们查看可以发现我们的电脑装的是HotSpot版本的虚拟机

🍬🍬🍬第二款(Open JDK)相比较于第一款,优点是开源,如果需要二次开发,增强虚拟机功能时更为适合,第一款虚拟机不开源,无法修改源代码,两款虚拟机垃圾回收器略有区别,其余大致相同

🍬🍬🍬第三款:基于HotSpot上的一款支持多语言混合开发(ruby,python等)的虚拟机,适用于微服务和云原生架构

🍬🍬🍬第四款:对高并发系统进行大量优化,安全性也有所提升,适合高并发,高性能要求的场景

🍬🍬🍬第五款:大多为IBM内部使用,设计初衷也是追求高性能和可扩展

🍏🍏🍏八.JVM规范

官网地址:https://docs.oracle.com/javase/specs/index.html

作用:对不同的虚拟机发行版本做一个统一的规范

只要其他语言能生成符合规范的class字节码文件,一样可以借助JVM运行,这在兼具标准性的同时也体现了虚拟机的灵活性。

相关推荐
IDOlaoluo几秒前
JK2连接器使用教程:jakarta-tomcat-connectors-jk2-src-current.zip 安装配置步骤详解
java·tomcat
j***29481 分钟前
对基因列表中批量的基因进行GO和KEGG注释
开发语言·数据库·golang
M***29913 分钟前
【Spring Boot】SpringBoot自动装配-Import
java·spring boot·后端
墨雪不会编程3 分钟前
C++基础语法篇五 ——类和对象
java·前端·c++
一 乐5 分钟前
农产品销售|农产品供销|基于SprinBoot+vue的农产品供销系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot
是小崔啊5 分钟前
【SAA】01 - Spring Ai Alibaba快速入门
java·人工智能·spring
寻找华年的锦瑟5 分钟前
Qt-视频九宫格布局
开发语言·qt
f***R86 分钟前
go测试问题记录
开发语言·后端·golang
爱学习的小可爱卢6 分钟前
JavaEE进阶——Cookie与Session:Web安全的双刃剑
java·javaee进阶
semantist@语校7 分钟前
第五十一篇|构建日本语言学校数据模型:埼玉国际学院的城市结构与行为变量分析
java·大数据·数据库·人工智能·百度·ai·github