参考文献-阿里巴巴中间价
【运行时数据区】——程序计数器、虚拟机栈
尚硅谷JVM虚拟机
java小白自学笔记,有理解错误的地方请各位兄弟姐妹们指出来哈,玻璃心,求别喷,谢谢啦…
image.png

普通代码的执行过程与操作系统的关系

  1. 普通代码的执行运行之后生成可执行文件.exe,存储在计算机硬盘中的可执行.exe文件也就是二进制文件,运行后加载到计算机的内存中;
  2. CPU中的指令寄存器指向该文件在内存的ip地址,通过操作控制器将指令加载到指令寄存器(取址);
  3. 指令实际是二进串,计算机不知道具体需要进行什么操作,接下来指令译码器将这堆二进制串进行解码,分析出操作数是什么,在什么位置(译码);
  4. 操作控制器结合指令译码器分析的结果将操作数从内存的特定地址取出来,放到CPU的高速缓存中,其中一个数据块对应缓存中的一个缓存行;
  5. 有了操作数以及指令即可以在CPU的运算单元进行计算(执行)。

    java代码的执行过程与操作系统的关系

    image.png

  6. java代码经过前端编译器(javac)编译后生成字节码文件.class;

  7. 通过类加载器将字节码文件加载到JVM虚拟机中;
  8. 当前的线程通过PC计数器可以知道下一步要执行的字节码指令以及要操作的数据,通过压栈和出栈执行一个个方法,每个方法也就是一个栈帧,包含局部变量表、操作数栈等等的,数据操作的过程:先根据PC计数器指向的指令知道了要操作的数据,将数据压入操作数栈,进行计算时,操作数出操作数栈,最后生成的变量保存在局部变量表中;
  9. 上一步计算的过程需要用到执行引擎,执行引擎可以将一行行的字节码指令进行解释执行,也可以一步到位,直接将所有的字节码翻译成对应平台相应指令集的机器码;
  10. 操作系统调度器将CPU资源分配给当前线程,CPU根据翻译之后的机器码进行相应的计算操作。