java new一个object对象占用多少内存

2018-04-22  本文已影响150人  tracy_668

在java中,一个引用在32位jdk中占用四个字节,64位jdk是8字节。一个对象由对象头,对象实际数据,以及对齐填充(可能存在)三部分组成。

对象头: 包括_mark:markOop : 用于存储对象状态信息,比如hashcode,对象年龄(经历gc的次数),是否被当作锁同步,等等信息, 并非全部信息而是有选择性记录一些。_klass:klassOop,类元数据指针,指向一个描述自身的元数据的对象。

对象实例数据: 笼统的说,基类声明的实例字段会出现在派生类申明的实例字段之前。

java.lang.String:

_mark: markOop 4字节

_klass: klassOop 4字节

value:char[]------------------------》 typeArrayOopDesc:  在java中数组也是一个对象

offset: int                                         _mark

count: int                                         _klass

hash: int (哈希缓存)                        _length=3

                                                        [0]='h' [1]='e'[2]='l'

这揭示了string对象在内存的本质情况。

receiver.instanceMethod(), receiver实际作为隐式参数传入,《==》instanceMethod(receiver)

instance.StaticMethod()   <==> instance.class.StaticMethod(),  语法糖而已。

上一篇下一篇

猜你喜欢

热点阅读