您的位置:首页 > 编程语言 > Java开发

运行时java对象在内存中是什么样子的?

2015-11-19 18:00 281 查看
我们知道函数在内存中作为一条栈的激活记录被实现,我们也知道java方法作为栈的一片被实现,java对象在堆中被分配。

java对象在堆中是什么样的呢,一旦一个对象被放入内存中,那么它就是一连串的byte。那么我们怎么去找特定的区域呢,在编译器内存保存一个内部表包含每一个区域的位移量。下边是一个类“Base”对象的例子,这个类没有任何方法,方法在内存中是如何铺放的,我们下一节会讲到。



如果我们有另一个类Derived,继承自Base类,内存中的样子如下:



子对象有和父对象相同的内存分布,另外它需要额外的空间安放新增加的字段。这种分布的好处是,在开始的时候类B的指针A指向D对象依旧可以看到B对象的内容。因此,通过B的引用在D上的操作是安全的,没有必要检查B动态的指向什么。这就解释了多态的实现的原理



但是这种方法没有效率,如果一个类有很多的方法,那么每一个对象必须有相应的指针集合,另外每一个对象需要为这些指针分配空间,这样对象的创建变的很慢并且导致对象很大。优化的方法是创建一个虚拟的函数表,包含了为特定的类的函数分配的指针的数组。



原文链接:http://www.programcreek.com/2011/11/what-do-java-objects-look-like-in-memory/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: