让你的JVM有自己的数据类型
1、数据在内存中是如何存储的
c++
char 1B
short 2B
int 4B
long 8B
float 4B
double 8B
指针 4B、8B
Java
bool 1B enum { FALSE, TRUE} #define TRUE 1
byte 1B
char 2B
short 2B
int 4B
long 8B
float 4B
double 8B
oop 4B、4B | 8B
小端存储:数据的高位在高地址,低位在低地址
0C 0D 0E 0F
44 33 22 11 小端存储
11 22 33 44 大端存储
44 33 22 11
———————————-
11 22 33 44
0x1122334
内存的存储模式
大端 数据的高位在低地址,低位在高地址
小端 数据的高位在高地址,低位在低地址
64bit
操作数栈 称为一个插槽,slot 4B 4B
指针压缩 虚拟机栈
c++,编译的时候,汇编代码已经区分好了数据占多少字节
StackValue
GC
GC ROOT
栈帧中的对象
1slot
2slot
jvm
bool 1B
byte 1B
char 2B
short 2B
int 4B
long 8B
float 4B
double 8B
2slot
oop 4B、4B | 8B
内存的存储模式
1、直接用int(32bit),long 浪费内存
2、byte数组 c++全部用这种方式实现的
3、Object int、long(Java特有的)
4、混合用
10
内存存储:00 00 00 00 00 00 24 40
0x04240000 | 00000000
int = 0x40240000 高位 0-3
int = 0 低位 4-7
pushDouble
popDouble
操作数栈
0-3
——————-
4-7
局部变量表
1 0-3
2 4-7
double实现的时候注意点
1、常量池,8B的数据,占常量池两个item 是合起来还是按部就班的存储,合起来了
我取值的时候,只取一项就可以了。如果不合,那取值需要取连续的两项
2、方法层面
2、通过查看内存理解大端小端
3、虚拟机数据存储设计方案
4、代码怎么写
5、单步调试ZVM讲细节