【JVM】初步认识Java虚拟机


🐌个人主页: 🐌 叶落闲庭

💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


JVM

  • 一、初识JVM
    • [1.1 什么是JVM](#1.1 什么是JVM)
    • [1.2 JVM的功能](#1.2 JVM的功能)
      • [1.2.1 解释和运行](#1.2.1 解释和运行)
      • [1.2.2 内存管理](#1.2.2 内存管理)
      • [1.2.3 即时编译](#1.2.3 即时编译)
      • [1.2.4 JVM 即时编译功能原理](#1.2.4 JVM 即时编译功能原理)
    • [1.3 常见的JVM](#1.3 常见的JVM)

一、初识JVM

1.1 什么是JVM

JVM全称是Java Virtual Machine,中文译名Java虚拟机,JVM本质上是一个运行在计算机上的程序,它的职责是运行Java字节码文件,在字节码文件中包含了一连串的指令,这个指令就是字节码指令,这些指令是无法直接在计算机上运行的,因为计算机只能识别机器码,而Java虚拟机就负责将字节码转换成机器码从而让电脑识别,这个过程被称为解释,相当于将一门语言翻译成另一门语言。



1.2 JVM的功能

1.2.1 解释和运行

Java虚拟机可以将字节码文件中的指令实时的解释成机器码,让计算机执行

1.2.2 内存管理

  • 自动为对象、方法等分配内存
  • 自动的垃圾回收机制,回收不再使用的对象,不用像C/C++那样需要手动释放空间,降低了程序员写代码的难度

1.2.3 即时编译

  • 对热门代码进行优化,提升执行效率

Java语言如果不做任何优化,其性能不如C/C++,因为Java语言需要将字节码指令通过JVM实时的解析为机器码才可以交给计算机运行,这个过程随着程序的执行,需要反复地执行,每次进行都需要花费一定的时间,而C/C++在编译过程中可以直接将源代码转换为计算机任何的机器码。

Java这样做的目的主要是为了支持跨平台特性,将一份字节码指令交给Linux、Windows平台,这些平台会安装不一样的JVM,分别将字节码解释成该平台上对应的机器码,实现了跨平台特性。

1.2.4 JVM 即时编译功能原理

有一个字节码文件,里面有一段字节码指令,虚拟机如果发现这段指令在很短时间内被多次调用,那么就会认为这段代码有必要去优化,会主动将代码解释并优化解析成机器码,然后将这个机器码保存在内存当中,这样当这段代码再次被执行时,就会直接从内存当中取出,直接调用。

  • JVM利用即时编译(Uust-In-Time简称IT)进行性能的优化,最终能达到接近C、C++语言的运行性能

1.3 常见的JVM

名称 作者 支持版本 社区活跃度(github star) 特性 适用场景
HotSpot(Open JDK版) Oracle 所有版本 高(闭源) 使用最广泛,稳定可靠,社区活跃,JIT支持,Oracle JDK默认虚拟机 默认
HotSpot(Open JDK版) Oracle 所有版本 中(16.1k) 同上,开源,Open JDK默认虚拟机 默认,对JDK有二次开发需求
GraalVM Oracle 11,17,19,企业版支持8 高(18.7k) 多语言支持,高性能、JT、AOT支持 微服务、云原生架构,需要多语言混合编程
Dragonwell JDK,龙井 Alibaba 标准版8,11,17,扩展版11,17 低(3.9k) 基于OpenJDK的增强,高性能、bug修复、安全性提升,JWarmup、ElasticHeap、Wisp特性支持 电商、物流、金融领域,对性能要求比较高
Eclipse OpenJ9,(原BM)9) IBM 8,11,17,19,20 低(3.1k) 高性能、可扩展,JIT、AOT特性支持 微服务、云原生架构
相关推荐
熊大如如11 分钟前
Java 反射
java·开发语言
猿来入此小猿29 分钟前
基于SSM实现的健身房系统功能实现十六
java·毕业设计·ssm·毕业源码·免费学习·猿来入此·健身平台
ll77881142 分钟前
C++学习之路,从0到精通的征途:继承
开发语言·数据结构·c++·学习·算法
我不想当小卡拉米1 小时前
【Linux】操作系统入门:冯诺依曼体系结构
linux·开发语言·网络·c++
teacher伟大光荣且正确1 小时前
Qt Creator 配置 Android 编译环境
android·开发语言·qt
炎芯随笔1 小时前
【C++】【设计模式】生产者-消费者模型
开发语言·c++·设计模式
goTsHgo1 小时前
Spring Boot 自动装配原理详解
java·spring boot
卑微的Coder1 小时前
JMeter同步定时器 模拟多用户并发访问场景
java·jmeter·压力测试
pjx9871 小时前
微服务的“导航系统”:使用Spring Cloud Eureka实现服务注册与发现
java·spring cloud·微服务·eureka
乌鸦9441 小时前
《类和对象(下)》
开发语言·c++·类和对象+