JVM是什么(图文超详解)

JVM是什么(图文超详解)-mikechen

什么是JVM

JVM,或叫Java虚拟机(Java Virtual Machine),是Java平台的一部分,它是一个用于执行Java字节码的虚拟计算机。

Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码字节码。

如下图所示:

JVM是什么(图文超详解)-mikechen
简单来说JVM是用来解析和运行Java程序的,提供了许多功能,例如:垃圾回收、内存管理、安全性和线程管理等。

 

JVM的体系结构

JVM体系结构,如下图所示:

JVM是什么(图文超详解)-mikechen

包含:JVM堆虚拟机栈程序计数器Java方法区本地方法栈

1.JVM堆(Heap)

堆是Java应用程序中最重要的内存区域之一,其中包括对象的实例数据,例如类的字段和对象引用。

在堆中分配内存,对象的生命周期,由垃圾回收器来管理。

 

2.JVM方法区(Method Area)

方法区是用来存储类的元数据信息、静态变量、常量池、类的字节码等信息的内存区域。

Java 8之前,方法区是永久代(Permanent Generation),但在Java 8后,方法区被替换为元数据区(Metaspace)。

 

3.Java虚拟机栈(Java Virtual Machine Stacks)

虚拟机栈是每个线程私有的内存区域,用于存储方法调用的局部变量、操作数栈、方法返回地址以及异常处理信息。

虚拟机栈是用来执行方法的,每个方法调用都会创建一个栈帧,栈帧包含方法的参数、局部变量和操作数栈。

 

4.程序计数器(Program Counter Register)

程序计数器是每个线程私有的内存区域,用于存储当前线程正在执行的字节码指令的地址。

程序计数器通常用于顺序执行字节码指令,是线程私有的。

 

5.本地方法栈(Native Method Stacks)

本地方法栈与虚拟机栈一样是线程私有的,用于支持Java程序与本地代码(如C或C++编写的代码)的交互。

 

JVM垃圾回收算法

JVM使用不同的垃圾回收算法来管理内存中的对象,主要包含:标记-清除算法、

1.标记清除算法

这是最早的垃圾回收算法之一,它分为两个阶段:标记(Mark)和清除(Sweep)。

如下图所示:

JVM是什么(图文超详解)-mikechen

首先,它标记所有存活的对象,然后清除未标记的对象。

这个算法的主要问题是内存碎片化,会导致空间浪费和性能问题。

 

2.复制算法

复制算法步骤,主要分为如下步骤:

第一步:标记出所有的存活对象

从根集合节点进行扫描,例如:线程栈中的对象、静态变量、寄存器中的指针等,标记出所有的存活对象,

 

第二步:复制对象到新内存

找出所有仍然存活的对象,并将这些存活的对象复制到一块儿新的内存。

如下图所示:

JVM是什么(图文超详解)-mikechen

它将存活对象从一个区域复制到另一个区域,并清除非存活对象,这样可以解决内存碎片问题,但需要额外的内存空间。

 

3.标记整理算法

这个算法结合了标记和清除以及复制算法的优点。

首先,它标记存活对象,然后将它们压缩到一起,清除未标记的对象。这有助于减少内存碎片,并且不需要额外的内存空间。

如下图所示:
JVM是什么(图文超详解)-mikechen

 

4.分代收集算法

这个算法将堆分为不同的代,通常分为新生代和老年代。

大多数对象在短时间内变得不可达,因此新生代使用复制算法来回收,而老年代使用标记-整理算法,这种分代回收策略可以提高垃圾回收的效率。

 

JVM总结

JVM是Java平台的核心组件,负责执行Java程序,提供了跨平台性、内存管理、垃圾回收和性能优化等关键功能。

1.跨平台性

JVM的核心特点之一是跨平台性,Java程序被编译成字节码(bytecode),这些字节码可以在任何装有适当JVM的平台上运行。

2.内存管理

JVM负责内存管理,包括内存分配、垃圾回收和内存释放,JVM自动分配和回收内存,从而防止内存泄漏和提高程序的稳定性。

3.垃圾回收

JVM内置了垃圾回收器,负责回收不再使用的内存,垃圾回收可以大大减轻程序员的负担,因为它自动管理内存释放,而无需手动释放对象。

4.安全性

JVM提供了安全性特性,可以保护程序免受恶意代码执行和内存越界访问的威胁。这包括安全沙箱和字节码验证。

5.垃圾回收器

JVM有多种垃圾回收器,每个回收器都有不同的优点和适用场景,Java开发人员可以根据应用程序需求选择合适的垃圾回收器。

 

陈睿mikechen

十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法