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

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

android studio字节码不匹配_字节码

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