Repository navigation
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 | 栈底的地址 |
没有列出全部,只是一部分数据结构
class Method : public Metadata {
// 方法的只读数据
ConstMethod* _constMethod;
MethodData* _method_data;
MethodCounters* _method_counters;
AccessFlags _access_flags;
};class ConstMethod : public MetaspaceObj {
ConstantPool* _constants;
u2 _max_stack;
u2 _max_locals;
u2 _size_of_parameters;
};class ConstantPool : public Metadata {
Array<u1>* _tags;
ConstantPoolCache* _cache;
InstanceKlass* _pool_holder;
Array<u2>* _operands;
int _length; // number of elements in the array
};class MethodData : public Metadata {
int _data_size;
// Beginning of the data entries
intptr_t _data[1];
};class InstanceKlass: public Klass {
Annotations* _annotations;
PackageEntry* _package_entry;
Klass* volatile _array_klasses;
ConstantPool* _constants;
};