目录
JVM完成对函数的入参空间计算后,接下来进行栈空间分配,具体的方式上一篇日志总结了,就是入参数量乘上当前操作系统环境指针的宽度,例如32位系统指针宽度为4个字节,64位宽度为8个字节,最后加上调用者函数现场保存过程中寄存器的值,即:
入参数量 * 4(或8)字节 + 4(假设有4个寄存器) * 4(或8)字节
也就是说,调用函数总的方法栈空间,除了和入参数量,入参类型有关,还要加上一些寄存器的大小,方法栈内除了保存参数数据,还要保存某些寄存器的值,这些寄存器的作用不可忽视。
现场保存
在方法栈空间分配完成后,执行具体的被调用函数指令前,还需要做一件事,那就是现场保存,JVM使用CS:IP段寄存器执行具体的函数机器指令,CS寄存器保存段地址,IP寄存器保存偏移地址,两者结合起来确定了待执行函数的首地址,所以发生函数调用时,CS:IP段寄存器会从调用者函数跳转到被调用者函数中,两个寄存器的值也会发生改变,CP