JVM相关知识一(基础)

1 篇文章 0 订阅

JVM是什么

JDK(JAVA开发工具包)= JRE + 开发工具(javac) + 类库

JRE(JAVA运行时环境)= JVM + 核心类库 + 支持文件

JVM即JAVA虚拟机,它可以将字节码文件解释生成当前操作系统可执行的文件,是Java程序跨平台运行的关键。

JVM的组成

JVM主要有三大组成部分 类加载子系统、运行时数据区和执行引擎

类加载子系统

负责从文件系统或网络中加载Java类文件,并将其转换为可执行的Java代码。

执行引擎

通过解释器或即时编译器,将字节码文件转变为机器码,根据程序计数器的记录逐条执行指令,并执行相应的操作。

运行时数据区

运行时数据区由堆、方法区、虚拟机栈、本地方法栈、程序计数器组成

1、存放了所有new出来的对象以及字符串常量

2、是jvm中最大的一块内存区域,可以通过-Xms(最小值)和-Xmx(最大值)参数设置大小(可动态调整)

3、作为垃圾回收的主要空间,由于现在的垃圾回收器多采用分代收集算法,因而堆被划分为新生代和老年代,新生代又被划分为Eden区和两个Survivor区。

方法区

存放了常量、静态变量以及类信息(类名、方法名、字段名等)

虚拟机栈

1、每个线程都会开辟一个虚拟机栈,每个方法都会在栈中压入一个栈帧

2、栈帧由局部变量表、操作栈、动态链接、方法出口

        动态链接记录了当前方法依赖的类库在内存中的地址,通过动态链接可以很方便得找到对应的类信息

程序计数器

记录了当前正在执行的指令的地址,同时他还会指向下一条指令

本地方法栈

是由native修饰的本地方法使用的内存区域

本人理解的JVM工作流程:

在java程序运行时,类加载子系统会将需要的字节码文件加载到方法区中,执行引擎通过解释或者即时编译执行代码,在执行方法时,会在虚拟机栈中压入对应栈帧,通过操作数栈对局部变量进行操作,通过动态链接得到依赖的其他方法,执行完成后,程序计数器通过方法出口获取下一步要执行的指令地址,方法出栈,执行引擎继续执行。

上述执行流程是本人根据各大组件功能所推导出来的,如有错误,还请指教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值