您的当前位置:首页正文

JVM线程执行模型简介

来源:华佗健康网

PS:从我的新浪博客搬过来的文章


前段时间看了一下ASM3.2的文档,发现有一段关于JVM线程执行模型的描述说的比较经典,特意翻译一下留个底儿~~

原文:asm-3.2的guide文档的chapter 3.1.1 Execution model

    在JVM中,Java代码是通过线程来执行的。每个线程有自己的执行栈(execution stack),由帧(frame)组成。一个帧表示一个方法调用:每当一个方法被调用时,会创建一个帧,并把它push到当前线程的执行栈中。当这个被调用方法正常返回或抛出异常时,这个帧会被从执行栈中弹出,线程会继续执行栈顶的帧,即调用方法(现在调用方法的帧应该位于执行帧的栈顶了)。
    每个帧包含两部分:本地变量部分(local variables)和运算栈部分(operand stack)。本地变量部分包含方法的变量,它们可以依靠索引来随机访问。而运算栈部分,如它的名称一样,是个堆栈,里面放着用于字节码指令的运算值。这也意味着它的访问只能遵循后进先出的原则。
    local variables和operand stack的大小取决于方法的代码。它们的值在编译时确定,并存储在编译后的class文件中。因此,对于同一个方法调用,它们的大小在所有帧中都是一样的。

下面是自己画的一个草图:

转载于:https://www.cnblogs.com/snowboyovo/archive/2013/05/09/3068611.html

因篇幅问题不能全部显示,请点此查看更多更全内容