JVM1-初识JVM

目录

什么是JVM

JVM的功能

解释和运行

内存管理

即时编译

Java性能低的主要原因和跨平台特性

常见的JVM


什么是JVM

JVM 全称是 Java Virtual Machine,中文译名:Java虚拟机

JVM本质上是一个运行在计算机上的程序,它的职责是运行Java字节码文件

Java源代码执行流程如下: 

分为三个步骤:

  1. 编写Java源代码文件
  2. 使用Java编译器(javac命令)将源代码编译成Java字节码文件
  3. 使用Java虚拟机加载并运行Java字节码文件,此时会启动一个新的进程

JVM的功能

解释和运行

对字节码文件中的指令,实时地解释成机器码,让计算机执行

字节码文件中包含了字节码指令,计算器无法直接执行,Java虚拟机会将字节码文件中的字节码指令实时地解释成机器码,机器码是计算机可以运行的指令

内存管理

  • 自动为对象、方法等分配内存
  • 自动的垃圾回收机制,回收不再使用的对象

Java虚拟机会帮助程序员为对象分配内存,同时将不用的对象使用垃圾回收器回收掉,这是对比C和C++这些语言的一个优势。在C/C++语言中,对象的回收需要程序员手动去编写代码完成,如果遗漏了这段删除对象的代码,这个对象就会永远占用内存空间,不会再回收。所以JVM的这个功能降低了程序员编写代码的难度

即时编译

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

即时编译可以说是提升Java程序性能最核心的手段

Java性能低的主要原因和跨平台特性

Java语言如果不做任何的优化,性能其实是不如C和C++语言的

主要原因是:在程序运行过程中,Java虚拟机需要将字节码指令实时地解释成计算机能识别的机器码,这个过程在运行时可能会反复地执行,所以效率较低

C和C++语言在执行过程中,只需要将源代码编译成可执行文件,就包含了计算机能识别的机器码,无需在运行过程中再实时地解释,所以性能较高

Java选择一条执行效率比较低的方式的原因:主要是为了实现跨平台的特性。Java的字节码指令,如果希望在不同平台(操作系统+硬件架构),比如在windows或者linux上运行。可以使用同一份字节码指令,交给windows和linux上的Java虚拟机进行解释,这样就可以获得不同平台上的机器码,实现了Write Once,Run Anywhere 编写一次,到处运行的目标

但是C/C++语言,如果要让程序在不同平台上运行,就需要将一份源代码在不同平台上分别进行编译,相对来说比较麻烦

再回到即时编译,在JDK1.1的版本中就推出了即时编译去优化对应的性能

虚拟机在运行过程中如果发现某一个方法甚至是循环是热点代码(被非常高频调用),即时编译器会优化这段代码并将优化后的机器码保存在内存中,如果第二次再去执行这段代码。Java虚拟机会将机器码从内存中取出来直接进行调用,这样节省了一次解释的步骤,同时执行的是优化后的代码,效率较高

Java通过即时编译器获得了接近C/C++语言的性能,在某些特定的场景下甚至可以实现超越

常见的JVM

平时最常用的就是Hotspot虚拟机

名称作者支持版本社区活跃度(github star)特性
HotSpot (Oracle JDK版)Oracle所有版本高(闭源)使用最广泛,稳定可靠,社区活跃JIT支持Oracle JDK默认虚拟机
HotSpot (Open JDK版)Oracle所有版本中(16.1k)同上开源,Open JDK默认虚拟机
GraalVMOracle11, 17,19企业版支持8高(18.7k)多语言支持高性能、JIT、AOT支持
Dragonwell JDK龙井Alibaba标准版 8,11,17扩展版11,17低(3.9k)基于OpenJDK的增强高性能、bug修复、安全性提升JWarmup、ElasticHeap、Wisp特性支持
Eclipse OpenJ9 (原 IBM J9)IBM8,11,17,19,20低(3.1k)高性能、可扩展JIT、AOT特性支持

《Java虚拟机规范》由Oracle制定,内容主要包含了Java虚拟机在设计和实现时需要遵守的规范,主要包含class字节码文件的定义、类和接口的加载和初始化、指令集等内容

《Java虚拟机规范》是对虚拟机设计的要求,而不是对Java设计的要求,也就是说虚拟机可以运行在其他的语言比如Groovy、Scala生成的class字节码文件之上

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

HotSpot的发展历程:

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值