黑马程序员技术交流社区

标题: 内存存储问题 [打印本页]

作者: jialihong    时间: 2013-8-5 15:29
标题: 内存存储问题
本帖最后由 杨兴庭 于 2013-8-6 21:31 编辑

堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,这里的首地址怎么解释呢,不是特别理解?

作者: wang100753    时间: 2013-8-5 15:42
顾名思义,java声明出来的东西就是数据。关于数据是如何存在哪里,我会在下面一一说明

1,寄存器(register)。在这里的数据处理时反应最快。是由编译器分配的。
2,栈(stack) java new出来的对象的引用放在栈中。原始数据类型(整型,浮点型等等)也存放在这里。
3,堆(heap) java new出来的对象存放在堆中。
举例:Student st1=new Student();
st1是对象的引用,它存放在栈中。可以把它理解为一个指针,指向所存放在堆中的对象。
而int,double,float等原始数据类型则存放在栈中。这是由于分配栈的速度比分配堆的速度快的多,而这些数据经常使用。
就这些,希望会对你有所帮助。

如图:

123.jpg (8.02 KB, 下载次数: 6)

图

作者: 罗广伟    时间: 2013-8-5 15:52
本帖最后由 罗广伟 于 2013-8-5 16:13 编辑

拿数组来做比较,如果数组比喻成一排房子a,那么数组中的数据就是房子里面的东西,每个房子都有编号,首地址就是第一个房子的编号。也是这排房子a的地址。

作者: 心灵之歌    时间: 2013-8-5 18:54
首地址指的是这个对象第一个数值对应的 内存地址!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2