黑马程序员技术交流社区
标题:
什么是栈内存和堆内存?
[打印本页]
作者:
赵鸿富
时间:
2013-3-13 18:51
标题:
什么是栈内存和堆内存?
本帖最后由 赵鸿富 于 2013-3-14 15:50 编辑
为什么对象要通过NEW关键字才能出现在堆内存中?
作者:
赵亚威
时间:
2013-3-13 19:10
new 是实例化的过程 实例化需要耗费资源 因为Java是面向对象的 所以实例化的过程也就是创建对象 内存作为暂时处理数据的空间 因为擦写比较快 而内存分为5大区:栈内存,堆内存 ,方法区,地址池,寄存区。栈内存是按队列先进先出 所以一般存储成员变量 堆内存是先进后出 即存储引用变量 这样的处理机制可以加快电脑的性能。
作者:
黑马-郑玉元
时间:
2013-3-13 19:11
先给你讲个笑话:面向对象编程,没对象编什么程,没对象就new一个啊!接下来仔细给你说说内存的事:
java虚拟机中内存的原型:有寄存器、栈、堆、静态域、常量池
寄存器:我们在程序中无法控制 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
堆:存放用new产生的数据 静态域:存放在对象中用static定义的静态成员
java的虚拟机就是这么工作的,你要问为什么,我只能说因为1+1等于2.
作者:
薛飞
时间:
2013-3-13 19:29
Java程序在运行时,需要在内存中分配空间。
为了提高运算效率
,又对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
5片区域:栈内存,堆内存,方法区,本地方法区,寄存器。
栈内存:用于存储局部变量,当数据使用完,所占空间会
自动释放
。
堆内存:数组和对象,通过new建立的实例都存放在堆内存中;
特点:1每一个实体(用来封装数据)都有内存地址值;2实体中的变量都有默认初始化值(int型0,double型0.0,float型0.0f,boolean型false);3(x=null)实体不再被使用,会在
不确定的时间内被垃圾回收器回收。
作者:
孙传磊
时间:
2013-3-13 20:00
本帖最后由 孙传磊 于 2013-3-13 20:01 编辑
这问题看是容易回答难,我按自己的理解说吧:
首先要明确什么是堆和栈:
简单的说堆和栈都是jvm在内存中开辟的空间,并赋予不同的功能。
接下来明确他们的作用,
栈的作用:栈中主要存放一些基本类型的变量(如int, short……)和对象句柄。存取速度比堆要快,栈数据 可以共享。这里的“对 象句柄”也可以说是 new 出来的对象名字或者叫它地址。
堆的作用:堆内存用来存放由new创建的对象和数组,一般占用的内存空间相对较大。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。简单的就是存放对象的具体内容。
这是后new的作用就突出啦:
new关键字的作用就是在堆内存中分配一块空间,将栈中的引用(叫它指针更形象,指针内存放的是地址)指向这在堆中开辟的空间,同时调用对象的构造方法。
这就是使用new的原因吧。
作者:
陈丽莉
时间:
2013-3-13 22:22
如果还有问题,请继续追问;若没问题了,请将帖子分类改成【已解决】~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2