搜课云网 > 成都华育 > 资讯总汇 > Java中堆和栈的区别

Java中堆和栈的区别

机构:成都华育 时间:2016-01-08 10:32:51 点击:905

  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;

  了解更多软件开发培训相关信息,请关注成都计算机培训学校

师资介绍