class字节码文件加载到JVM流程

本文旨在给大家介绍java中JVM的内存结构以及类编译成class文件之后进入JVM内存的一些流程

  1. 首先,介绍一下JVM的内存模型.JVM内存模型并非只是由堆栈等组成,其实是由三部分构成.分别是类装载子系统,运行时数据区,以及字节码执行引擎. 只不过在运行时数据区中又分为了 堆,栈,本地方法栈,程序计数器以及方法区(元空间); 不喜欢看字,就看下图;

在这里插入图片描述

2.下面重点介绍流程.
1>当class文件进入通过类装载子系统进入运行时数据区之后,进入的是方法区.在方法区存储的是类的信息,包含常量,静态变量以及类元信息.
2>由字节码执行引擎开始执行字节码文件.找到程序的入口main方法
3> main所在的线程是主线程,一旦执行main函数,便会开启主线程.线程开启便会在栈内存中开辟一块空间,用于存放线程内部的局部变量.注意多个线程运行会从栈中分出多个空间用于存放自己线程内的局部变量.
4> 执行main方法会以栈帧的形式进入主线程在栈中分配的空间.如果main中再调用其他方法,则以压栈的方式进入栈内.这就是常说的先进后出(FILO)
5>每个线程栈会配有一个自己的程序计数器,用于记录程序执行的位置.程序计数器位置记录的变动则是由字节码执行引擎来修改.可以保证多线程并发情况下,两个线程交替执行而不会发生执行位置错乱.
6> main方法执行,如果调用其他方法,则在本线程栈内压入一个新的栈帧.
7> 栈帧又包含 成员变量表, 操作数栈, 动态链接以及方法出口.将方法中的成员变量存入成员变量表中,并指向堆中创建的实例地址.
8>栈帧中代码执行结束之后弹栈.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值