|
1
9
它在很大程度上是JIT编译器的实现细节。它将非常努力地将局部变量存储在一个CPU寄存器中,非常有效。堆栈是通常的后备存储,以防没有足够的寄存器来存储所有的局部变量。 例如,x86和X64抖动之间存在很大差异。X64有更多的寄存器可用。这也适用于传递给方法的参数。X86允许2在CPU寄存器中传递,X64允许4。加上可以存储在FPU堆栈或XMM寄存器中的任何内容。所以,有四个不同的地方可以存储局部变量。 |
|
|
2
9
在带有参数的堆栈上。
…
但是
…
现在,当方法中的执行流到达右大括号时 堆栈上的值类型数据在那里被销毁,而堆上的引用类型对象(其引用位于此方法堆栈上)则在垃圾收集器本身决定的适当时间移交给垃圾收集系统进行收集。 |
|
|
3
4
如果对象不是值类型,它将在堆上分配,对它的引用将存储在堆栈上。否则,它将直接分配到堆栈上。 |