java new一个object对象占用多少内存 以及string内存揭秘

在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(),  语法糖而已。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我不知道这个时候还记不记得我,你不知道我有多期待看到你的样子,别让我失望好吗. 我希望你是快乐的,打心里的快乐,人...
    苍穹mmm阅读 2,915评论 0 0
  • 我的爱人住在海里 我是漂浮着的飞鸟 守望着落日的霞光 永不会再相见的爱 害怕眼睛会去看 耳朵自作主张的听 心上系了...
    念今尘阅读 3,064评论 8 50
  • 刘艳 原创作品转载请注明出处 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163...
    TheSoundOf_abb8阅读 2,540评论 0 0
  • 小蚂蚁英雄阅读 984评论 0 0