有没有人能给我讲明白点?

解决方案 »

  1.   

    堆:主要用于存储new出来的对象
    栈:主要用于对对象的引用,说简单点就是对象的地址
      

  2.   

      
    两个内存区。
    作用不一样。
    堆:主要用于存储new出来的对象
    栈:主要用于对对象的引用,说简单点就是对象的地址
      

  3.   

    http://blog.csdn.net/wulianghuan/article/details/8602254认真看完这边博客,我想你会理解得更加透彻
      

  4.   

    http://blog.csdn.net/yingfeng612/article/details/8750385
    仔细看看。
      

  5.   

    栈:对于一台机器而言,栈的空间是固定的,而且远小于堆空间。栈的先进后出无需多言,其使用是非常普遍的,但都是存储轻量型数据。比如在函数调用时,会将某些函数参数压栈保护;函数体内的指针、局部变量都是存储在栈中的。你不太可能会在一个函数体内使用几十万个字节的局部变量吧,栈的空间足矣;
    堆:堆的空间大小与机器的配置有关。你在使用new的时候,首先会在虚拟内存空间中开辟存储空间,若虚拟内存耗完,则会使用你的存储器,也就是你的硬盘空间,所以,在目前的机器配置上,你可以随意new而不太用担心内存不够用。但是,内存的泄露也都是由堆内存引发的。当然在java里面是不用太操心这个问题了。
      

  6.   

    栈:主要存放基本数据类型的变量,例如:int a 引用变量Integer in = null,栈中存储速度快
    堆:主要放new出来的对象,实例变量,如数组、new出来的对象,堆是动态分配内存空间的,所以带速度慢点。
      

  7.   

    说简单点,就是堆适用于存储对象实例,和类信息的,其中的数据可以为多线程共享,里面的数据存在时间视对象与类的存在时间而定。一般较长,而且里面的数据回收需要GC
    而栈是方法执行区,里面存储的是局部变量和方法运行时栈帧,里面的数据是私有的,不共享的,且随着方法的结束而销毁。无需GC回收
      

  8.   

    通俗来讲栈存的是对象的名字 而堆存的是new 出来的东西
    给一个例子就明白了 class A {
    private int i;
    private int j;
    }
    A a = new A();
    栈存的就是对象的名字a 而堆存的就是new A();
    这个new A()所包括的东西就是i,j所分配的空间。