JVM的组成

JVM可以分为5个部分,分别是:
(1)类加载器
(2)运行时数据区
(3)执行引擎
(4)本地库接口
(5)本地方法库
其基本流程为:
在这里插入图片描述
运行时数据区中的程序计数器、虚拟机栈、本地方法栈、堆、方法区;前三个是线程私有的,后两个是线程共享的;

类加载器:
加载字节码文件到内存;

执行引擎:
对JVM指令进行解析,翻译成机器码,解析完成后提交到操作系统中;

本地库接口:
供java调用的融合了不同开发语言的原生库;

本地方法库:
Java本地方法的具体实现;

运行时数据区:
JVM核心内存空间结构模型;其中各个组成部分各有各的用途;

(1)方法区:
存储虚拟机加载的类信息、常量、静态变量,即时器编译后的代码等数据。

(2)本地方法栈:
本地方法栈与java栈的作用和原理基本相同,都可以用来执行方法,不同观点在于java栈执行的是java方法,本地方法栈执行的是本地方法;
本地方法:Java是基于应用层的高级编程语言,无法访问操作系统底层 信息,如:底层硬件设备等,这个时候就需要使用其它语言来完成功能了,比如C语言;

(3)程序计数器:
程序计数器占用的内存空间较小,是当前线程所执行的字节码行号指示器,通过改变这个计算器的值来选取下一条需要执行的字节码指令;多个线程之间的线程计算器相互独立,互不影响;

(4)Java堆
用来存放实例化对象,java堆被所有线程共享,在虚拟机启动时创建,用来存放对象实例;

(5)虚拟机栈
其是Java方法执行的内存模型,java栈中存放的是多个栈帧,每个栈帧对应一个被调用的方法,主要包括局部变量表、操作数栈、动态链接、方法返回地址(方法出口)。每一个方法的执行,JVM都会创建一个栈帧,并将栈帧压入java栈,方法执行完毕,该栈帧出栈;
如图:
在这里插入图片描述
每个线程都有自己的java栈,相互独立,可以同时执行各种的方法,每个方法的执行都是一个栈帧的入栈和出栈过程,java虚拟机栈用来存储栈帧,方法调用结束之后,就会被销毁;

发布了53 篇原创文章 · 获赞 2 · 访问量 3010
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章