关于堆和栈的本质区别? 有没有人能给我讲明白点? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 堆:主要用于存储new出来的对象栈:主要用于对对象的引用,说简单点就是对象的地址 两个内存区。作用不一样。堆:主要用于存储new出来的对象栈:主要用于对对象的引用,说简单点就是对象的地址 http://blog.csdn.net/wulianghuan/article/details/8602254认真看完这边博客,我想你会理解得更加透彻 http://blog.csdn.net/yingfeng612/article/details/8750385仔细看看。 栈:对于一台机器而言,栈的空间是固定的,而且远小于堆空间。栈的先进后出无需多言,其使用是非常普遍的,但都是存储轻量型数据。比如在函数调用时,会将某些函数参数压栈保护;函数体内的指针、局部变量都是存储在栈中的。你不太可能会在一个函数体内使用几十万个字节的局部变量吧,栈的空间足矣;堆:堆的空间大小与机器的配置有关。你在使用new的时候,首先会在虚拟内存空间中开辟存储空间,若虚拟内存耗完,则会使用你的存储器,也就是你的硬盘空间,所以,在目前的机器配置上,你可以随意new而不太用担心内存不够用。但是,内存的泄露也都是由堆内存引发的。当然在java里面是不用太操心这个问题了。 栈:主要存放基本数据类型的变量,例如:int a 引用变量Integer in = null,栈中存储速度快堆:主要放new出来的对象,实例变量,如数组、new出来的对象,堆是动态分配内存空间的,所以带速度慢点。 说简单点,就是堆适用于存储对象实例,和类信息的,其中的数据可以为多线程共享,里面的数据存在时间视对象与类的存在时间而定。一般较长,而且里面的数据回收需要GC而栈是方法执行区,里面存储的是局部变量和方法运行时栈帧,里面的数据是私有的,不共享的,且随着方法的结束而销毁。无需GC回收 通俗来讲栈存的是对象的名字 而堆存的是new 出来的东西给一个例子就明白了 class A {private int i;private int j;}A a = new A();栈存的就是对象的名字a 而堆存的就是new A();这个new A()所包括的东西就是i,j所分配的空间。 JAVA 随机数取循环如何使其不出现空行 jdbc修改数据库里面的内容怎么不成功呀,有没有给我报错 求大侠共享一份六子棋(连六棋)java的ai代码 如下问题,解题,看大家如何解,修改。 包机制 请教线程问题 请教高手如何显示死循环的值?谢了 oracle 换成sqlserver的尴尬。。。。。 求解?JPRogressBar进度条到达不了100%? 请问如何调用命令行程序,并保持其窗口不关闭 一个小程序输出问题请教 构造方法问题
栈:主要用于对对象的引用,说简单点就是对象的地址
两个内存区。
作用不一样。
堆:主要用于存储new出来的对象
栈:主要用于对对象的引用,说简单点就是对象的地址
仔细看看。
堆:堆的空间大小与机器的配置有关。你在使用new的时候,首先会在虚拟内存空间中开辟存储空间,若虚拟内存耗完,则会使用你的存储器,也就是你的硬盘空间,所以,在目前的机器配置上,你可以随意new而不太用担心内存不够用。但是,内存的泄露也都是由堆内存引发的。当然在java里面是不用太操心这个问题了。
堆:主要放new出来的对象,实例变量,如数组、new出来的对象,堆是动态分配内存空间的,所以带速度慢点。
而栈是方法执行区,里面存储的是局部变量和方法运行时栈帧,里面的数据是私有的,不共享的,且随着方法的结束而销毁。无需GC回收
给一个例子就明白了 class A {
private int i;
private int j;
}
A a = new A();
栈存的就是对象的名字a 而堆存的就是new A();
这个new A()所包括的东西就是i,j所分配的空间。