。线程在启动运行时,主要是在运行时数据区(JVM的内存模型),而JVM的运行时数据区主要包括堆,方法区,Java栈,本地方法栈,程序计数器这个五个部分组成。每运行一个线程,都会在Java栈中创建一个栈帧。

图中是一个简单的示例代码,执行的是main线程中的代码,程序在启动后,先会将Demo.class文件加载到类加载器中,类加载器会把该Demo类中的所有方法代码转换成二进制的指令加载到方法区,然后会在栈内存中加载创建一个main线程的线程栈,此时在线程栈中创建一个main()方法的栈帧之后开始执行代码。栈帧由 局部变量表、操作数栈、动态链接、方法出口组成。然后执行第一行代码,跳转到methodA()方法中,此时在线程栈中创建一个methodA()方法的栈帧。在栈帧中创造的对象实例都是存该对象名对应的对象在堆中的地址,对象实例则是保存在堆当中,当methodA()方法执行完毕后,会先销毁methodA()方法栈帧中的所有信息。
以上就是线程在jvm里面运行的原理。对JVM及栈帧组成不理解的,可以参考我写的JVM原理文章。https://www.jianshu.com/p/3cbeb0cc167d
网友评论