让你的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讲细节