【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特性支持 微服务、云原生架构
相关推荐
周杰伦的稻香10 分钟前
Go + Redis:本地部署高性能图片主色调提取服务
开发语言·redis·golang
吴梓穆14 分钟前
Python 语法基础 函数
开发语言·python
不负岁月无痕17 分钟前
C++ 模板核心内容与高频面试题汇总
java·开发语言·c++
Flittly19 分钟前
【AgentScope Java新手村系列】(2)第一个Agent-基础对话
java·spring boot·spring·ai
Kobebryant-Manba22 分钟前
学习文本处理
开发语言·python
摇滚侠32 分钟前
Spring MVC 不是一个单独的框架,是 Spring 框架的一个模块
java·spring·mvc
阿正的梦工坊35 分钟前
【Rust】04-借用、引用与切片
java·数据库·rust
福大大架构师每日一题40 分钟前
2026年6月TIOBE编程语言排行榜,Go语言排名第13,Rust语言排名12。关于Rust已进入平台期的报道似乎为时过早。
开发语言·golang·rust
无限进步_44 分钟前
从零实现一个迷你Shell——深入理解Linux命令行解释器
linux·运维·服务器·开发语言·c++·chrome
拙慕JULY1 小时前
小程序返回 base64 文件报错
开发语言·javascript·小程序