【JVM】初步认识Java虚拟机

简介: 【JVM】初步认识Java虚拟机

一、初识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特性支持 微服务、云原生架构



相关文章
|
2天前
|
存储 Java C++
Java虚拟机(JVM)在执行Java程序时,会将其管理的内存划分为几个不同的区域
【6月更文挑战第24天】Java JVM管理内存分7区:程序计数器记录线程执行位置;虚拟机栈处理方法调用,每个线程有独立栈;本地方法栈服务native方法;Java堆存储所有对象实例,垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息;运行时常量池存储常量;直接内存不属于JVM规范,通过`java.nio`手动管理,不受GC直接影响。
11 5
|
1天前
|
存储 Java C++
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据
Java虚拟机(JVM)管理内存划分为多个区域:程序计数器记录线程执行位置;虚拟机栈存储线程私有数据,如局部变量和操作数;本地方法栈支持native方法;堆存放所有线程的对象实例,由垃圾回收管理;方法区(在Java 8后变为元空间)存储类信息和常量;运行时常量池是方法区一部分,保存符号引用和常量;直接内存非JVM规范定义,手动管理,通过Buffer类使用。Java 8后,永久代被元空间取代,G1成为默认GC。
10 2
|
6天前
|
监控 算法 Java
Java虚拟机(JVM)使用多种垃圾回收算法来管理内存,以确保程序运行时不会因为内存不足而崩溃。
【6月更文挑战第20天】Java JVM运用多种GC算法,如标记-清除、复制、标记-压缩、分代收集、增量收集、并行收集和并发标记,以自动化内存管理,防止因内存耗尽导致的程序崩溃。这些算法各有优劣,适应不同的性能和资源需求。垃圾回收旨在避免手动内存管理,简化编程。当遇到内存泄漏,可以借助VisualVM、JConsole或MAT等工具监测内存、生成堆转储,分析引用链并定位泄漏源,从而解决问题。
17 4
|
4天前
|
存储 监控 Java
JVM:Java虚拟机探秘
JVM:Java虚拟机探秘
8 1
|
8天前
|
算法 Java
Java垃圾回收(Garbage Collection,GC)是Java虚拟机(JVM)的一种自动内存管理机制,用于在运行时自动回收不再使用的对象所占的内存空间
【6月更文挑战第18天】Java的GC自动回收内存,包括标记清除(产生碎片)、复制(效率低)、标记整理(兼顾连续性与效率)和分代收集(区分新生代和老年代,用不同算法优化)等策略。现代JVM通常采用分代收集,以平衡性能和内存利用率。
34 3
|
13天前
|
存储 Java 编译器
JVM系列7-虚拟机字节码执行引擎
JVM系列7-虚拟机字节码执行引擎
14 1
|
16小时前
|
存储 Java 机器人
Java中的字节码与JVM指令集详解
Java中的字节码与JVM指令集详解
|
5天前
|
算法 Java 程序员
JVM虚拟机的故事
JVM虚拟机的故事
3 0
|
13天前
|
Java 编译器 开发者
Java基础3-JVM层面理解Java继承、封装、多态的实现原理(二)
Java基础3-JVM层面理解Java继承、封装、多态的实现原理(二)
11 0
|
13天前
|
存储 Java 索引
Java基础3-JVM层面理解Java继承、封装、多态的实现原理(一)
Java基础3-JVM层面理解Java继承、封装、多态的实现原理(一)
15 0