Bat*_*tty 5 java memory stack-frame
Java 堆栈为每个方法调用创建新框架,但是此框架是否占用堆栈上的内存?
澄清我的问题:
public void oneWay()
{
System.out.println("start");
get1();
}
private void get1()
{
System.out.println("get1");
get2();
}
private void get2()
{
System.out.println("get2");
}
Run Code Online (Sandbox Code Playgroud)
此输出与以下内容相同:
public void anotherWay()
{
System.out.println("start");
System.out.println("get1");
System.out.println("get2");
}
Run Code Online (Sandbox Code Playgroud)
但是第二个片段在堆栈上占用更多内存还是相等?简而言之,堆栈帧是否占用内存?
编辑:堆栈帧需要多少内存?Sun(现在是 Oracle)是否有任何规范?
正如《Java 虚拟机内部》中所述,
栈帧由三部分组成:局部变量、操作数栈和帧数据。局部变量和操作数堆栈的大小以字为单位,取决于每个方法的需要。这些大小是在编译时确定的,并包含在每个方法的类文件数据中。帧数据的大小取决于实现。
当Java虚拟机调用Java方法时,它会检查类数据以确定该方法所需的局部变量和操作数堆栈中的字数。它为该方法创建一个适当大小的堆栈帧并将其推送到 Java 堆栈上。
| 归档时间: |
|
| 查看次数: |
1874 次 |
| 最近记录: |