A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jialihong 中级黑马   /  2013-8-5 15:29  /  980 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-8-6 21:31 编辑

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

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

3 个回复

倒序浏览
顾名思义,java声明出来的东西就是数据。关于数据是如何存在哪里,我会在下面一一说明

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

如图:

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

图

评分

参与人数 1技术分 +2 收起 理由
杨兴庭 + 2 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 罗广伟 于 2013-8-5 16:13 编辑

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

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
首地址指的是这个对象第一个数值对应的 内存地址!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马