当前位置: 首页 > news >正文

【JVM】初步认识Java虚拟机


在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis

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


JVM

  • 一、初识JVM
    • 1.1 什么是JVM
    • 1.2 JVM的功能
      • 1.2.1 解释和运行
      • 1.2.2 内存管理
      • 1.2.3 即时编译
      • 1.2.4 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有二次开发需求
GraalVMOracle11,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)IBM8,11,17,19,20低(3.1k)高性能、可扩展,JIT、AOT特性支持微服务、云原生架构
http://www.lryc.cn/news/189647.html

相关文章:

  • JAVA设计模式-模板模式
  • day007
  • Spring Boot项目在Windows上的自启动策略与Windows自动登录配置
  • mac 版hadoop3.2.4 解决 Unable to load native-hadoop library 缺失文件
  • mysql case when 不命中缓存
  • 2023年金九银十网络安全考试试题
  • JS 图片的左右切换
  • 什么是Python虚拟环境?
  • 知识增强语言模型提示 零样本知识图谱问答10.8+10.11
  • Linux编译FFmpeg
  • Netty深入浅出Java网络编程学习笔记(二) Netty进阶应用篇
  • 机器学习基础之《回归与聚类算法(1)—线性回归》
  • 如何实现制造业信息化转型?
  • stable diffusion艰难炼丹之路
  • 竞赛 深度学习 opencv python 实现中国交通标志识别
  • 用Python实现数据透视表、音频文件格式转换
  • java枚举中写抽象方法
  • 麒麟操作系统提示“默认密钥环已上锁”的解决办法
  • 云原生周刊:Docker 推出 Docker Debug | 2023.10.9
  • 设计模式 - 行为型模式考点篇:迭代器模式(概述 | 案例实现 | 优缺点 | 使用场景)
  • Spark任务优化分析
  • 最新数据库流行度最新排名(每月更新)
  • Python:如何在一个月内学会爬取大规模数据
  • K8S云计算系列-(4)
  • 【Mybatis源码】IDEA中Mybatis源码环境搭建
  • VUE如何使得大屏自适应的几种方法?
  • API接口安全运营研究(内附官方开发平台api接口接入方式)
  • 信钰证券:股票交易费用计算方法?
  • 通过js获取用户网络ip地址
  • 微信小程序wxml使用过滤器