1、java中的堆
在Java中,堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等 指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时 动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
2、Java中的栈
在Java中,栈中主要用于存放一些基本类型的变量(int, short, long, byte, float, double,boolean, char)和对象句柄。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
二、图例说明Java代码在内存堆和栈中的执行过程
示例代码如下:
public class Test{
public static void main(String[] args){
int i = 0;
Test test = new Test();
test.method(i);
System.out.println(i);
}
public void method(int temp){
temp = 1;
}
}
Java代码在内存中执行的详细过程如下图:

如图所示,当类装载器(classLoader)将class文件装载到Java虚拟机中的时候,开始执行main方法。此时会创建一个栈针,将main方法压入栈底。
1、给局部变量i赋值。
2、创建一个Test对象的引用(句柄)。当new Test() 执行的时候,会在堆区中创建一个新的Test对象,然后此引用指向新创建的对象,也就是将新创建的对象的地址赋给了引用。
3、执行到test.method(i)的时候,通过地址,找到Test对象的method方法,创建新的栈针,将method()方法压入栈中,给方法中的局部变量temp赋值。
4、最后输出 i=1;
了解更多软件开发培训相关信息,请关注成都计算机培训学校
