Java高级开发

Java程序运行原理

2019-12-28  本文已影响0人  依弗布德甘
  1. 编译生成.class字节码文件
  • class文件内容
    版本号
    访问控制标志
    常量池
    构造方法
    自定义方法
    指令(参照指令表)
  1. JVM加载class分配数据区,存至方法区

jvm运行时数据区

  • 线程共享: 所有线程都能方法这块内存数据,随虚拟机或GC而创建和销毁

    1. 方法区:存储加载类信息、常量、静态变量、编译后的代码等数据
    2. 堆内存:存储对象,细分为老年代、新生代
  • 线程独占:每个线程都会有它独立空间,随线程生命周期创建和销毁

    1. 虚拟机栈:每个线程都有一个私有空间,有多个栈帧组成,一个方法对应一个栈帧
    2. 本地方法栈:只是为虚拟机使用Native本地方法而准备的,与虚拟机栈类似
    3. 程序计数器:记录当前线程执行字节码的位置,存储的是字节指令码地址,如果执行Native方法则计数器值为空。CPU同一时间只会执行一个线程中的指令,JVM多线程会轮流切换并分别CPU执行时间的方式,为切换线程后通过计数器来恢复正确的执行位置。
  1. JVM创建线程,运行代码
  • 线程独占的空间
    1. jvm会根据方法描述,创建栈帧,通过程序计数器上当前的位置,执行字节码指令,对操作数栈和本地变量进行修改(如:本地变量数据压入栈,栈里面数据相加结果压入栈,栈中的数据保存至本地变量等)
    2. 每次执行都会记录当前线程执行的位置到程序计数器中,CPU切换线程后通过计数器来恢复执行位置
上一篇 下一篇

猜你喜欢

热点阅读