Skip to content

runtime interp stack

ceragon edited this page Jun 6, 2022 · 3 revisions

解释执行的栈结构

栈结构

索引 大小 名称 作用
0 8 save rax 保存返回地址
1 8 save rbp 保存栈帧的基址
=== = === ===
1 8 save rbcp(r13) 保存调用者的 rsp,产生方法调用那一刻时的 rsp
2 8 NULL_WORD 占位 (last_sp)
3 8 Method* (Method) 保存方法对象的地址
4 8 java mirror 方法所在的java class 对象地址
5 8 method data (Method->MethodData) 代码的首地址
6 8 constant pool cache 常量池的cache
7 8 locals pointer 局部变量表的地址
8 8 codes 代码地址
9 8 rsp 栈底的地址

栈帧涉及的对象

没有列出全部,只是一部分数据结构

Method

class Method : public Metadata {
    // 方法的只读数据
    ConstMethod*      _constMethod;
    MethodData*       _method_data;
    MethodCounters*   _method_counters;
    AccessFlags       _access_flags;
    
};

Method->ConstMethod

class ConstMethod : public MetaspaceObj {
    ConstantPool*     _constants;
    u2                _max_stack;
    u2                _max_locals;
    u2                _size_of_parameters;
};

Method->ConstMethod->ConstantPool

class ConstantPool : public Metadata {
    Array<u1>*           _tags;
    ConstantPoolCache*   _cache;
    InstanceKlass*       _pool_holder;
    Array<u2>*           _operands;
    int                  _length; // number of elements in the array
};

Method->MethodData

class MethodData : public Metadata {
    int _data_size;
    // Beginning of the data entries
    intptr_t _data[1];
};

InstanceKlass

class InstanceKlass: public Klass {
    Annotations*    _annotations;
    PackageEntry*   _package_entry;
    Klass* volatile _array_klasses;
    ConstantPool* _constants;
};

Clone this wiki locally