JVM的主要组成以及作用你知道吗

JVM是Java Virtual Machine 的缩写,正如他的英文名字,中文名字叫java虚拟机。
先来看看java虚拟机的结构吧!

在这里插入图片描述
JVM是有两个子系统和两个组件组成。
两个子系统:类加载系统和执行引擎系统;
两个组件:运行时数据区域和本地接口区域。

我们知道我们写的java文件(源文件),会先通过编译器(javac命令)编译成为字节码文件(.class文件)。然后运行字节码就是java命令完成,而这个过程就是将字节码文件翻译成机器语言,再让机器做一系列的操作的。这一系列的过程就是由JVM来完成的。

所以先来介绍一下jvm四大块的作用
类加载系统(classes loader):根据给定的类名来装载.class文件到运行时数据区域的方法区里面;

本地接口(Native Interface):是为编程语言提供了本地的其他语言交互的接口。即与native libraries交互。

执行引擎(Execution engine):执行classes文件的指令;

运行时数据区域(Runtime data area):这就是传说中的jvm的内存;

.class文件在jvm中的整个变化情况:.class文件通过jvm的类加载器,被加载到了运行时数据区里面的方法区里,由于将字节码版已成机器码是一套标准,所以使用JVM的执行引擎将字节码翻译成为机器码(这个过程中本本地接口会调用本地方法库与其他编程语言交互,从而实现整个程序的功能 ),最终交给CPU去执行相关的操作。

最后我们来了解一下jvm中运行时数据区的各部分作用

  • 方法区:用于存储已经被虚拟机加载的类信息、常量、静态变量、等即时被加载出来的信息
  • java虚拟栈:java虚拟栈是来存储局部变量表、方法出口、操作数栈、动态链接等
  • 本地方法栈:本地方法栈和java虚拟栈的作用相同,但是本地方法栈是给虚拟机服务的,而java虚拟栈是服务java的
  • java堆:java堆是java虚拟机中内存最大的一块,几乎所有的对象和实例都是在这里分配内存的。并且这部分是线程共享的
  • 程序计数器:当前线程所执行的当前指令的行号,指令连贯执行是通过改变程序计数器的值来实现的。分支、循环、跳转、异常处理、线程恢复等基础功能,都需要依赖这个计数器来完成;

猜你喜欢

转载自blog.csdn.net/weixin_43815275/article/details/114580259