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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄玉昆 黑马帝   /  2013-2-6 09:56  /  1471 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄玉昆 于 2013-2-7 00:37 编辑

我在学习有关clone(克隆)的相关知识的时候,突然觉得堆内存还可以这样理解:

这里就涉及到了一个名词:“对象中的内部对象”或者说“深层对象”

我突然觉得,在堆内存中创建了一个对象,那么,这个对象中包含着诸如姓名(String类型),日期(Date类型)等等此类的数据,那么拿“姓名”这个数据来说,是对String中“对象”的引用(有关String的一些理解会在后面的文章中浅谈的),那么,这么说来,创建的对象中存在name,而name又是引用的String中的对象,这样说来,可以理解成“对象中的对象”或者说堆内存中存在“深层对象”。

用下面的图例表示说明:


图中表明:在堆内存中创建的对象,又会分别将自身的各对应的类型归类(字符串类型归为String类型中)。就好像说这是一种“深层引用”一般,从String这样的类型“数组”中引用出来,并用新的类型(如图中的Employee类型)包装(或集合)起来一样。而像salary这种数值数据,是属于基本double这样的类型数据的,是和String有着不一样的类型,因此不会“深层引用”对应的类型了(当然也没有这种类型)。

我不太确定,这种理解是不是正确的,只是突发奇想的理解,其实,更多的是对内存分配的一点点兴趣而已,清楚了内存是如何分配的,有利于更好地理解程序是如何运行的,这对于学习java也是一种激励和乐趣吧。


有对内存很清楚的朋友,希望可以帮我看看,这么理解是不是正确的呢?谢谢

栈和对内存图解.png (19.32 KB, 下载次数: 28)

栈和对内存图解

栈和对内存图解

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

4 个回复

倒序浏览
我也是如此认为的,但是如此的话,堆内存是否会被打成太多的碎片,是否会造成浪费、。???我还是期待,一个对象,能够根据其类的定义,自己划定一块区域。把自己的大部分需要占据内存的元素都放进来。这样既可以好点的管理。
回复 使用道具 举报
dzr19850306 发表于 2013-2-6 12:00
我也是如此认为的,但是如此的话,堆内存是否会被打成太多的碎片,是否会造成浪费、。???我还是期待,一 ...

怎么会打成很多碎片呢?同类型的数据会被放在一起管理,就像大药柜一样,分门别类的管理。
回复 使用道具 举报
类有很多,归根到底,类的最终数据都是普通类型的。想象一个类中的有其他类型,其他类型又有更多的类型。上百个类在一起。数千种数据,行成一面网,都得通过引用去访问。如果将地址放到一起,访问起来方便很多。对于机器来说,对于程序员来说,则都一样的。

评分

参与人数 1技术分 +2 收起 理由
滔哥 + 2 好好努力学习 多多参与

查看全部评分

回复 使用道具 举报
dzr19850306 发表于 2013-2-6 12:56
类有很多,归根到底,类的最终数据都是普通类型的。想象一个类中的有其他类型,其他类型又有更多的类型。上 ...

万变不离其宗嘛
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马