JVM对象、内存布局

对象创建

1.虚拟机遇到一个new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用
2.检查这个符号引用代表的类是否已经被加载,解析和初始化过。如果没有,那必 须先执行响应的类加载过程
3.在类加载检查功通过后,为新生对象分配内存。对象所需的内存大小在类加载完 成后便可完全确定。

对象内存布局

对象头,实例数据,对齐填充

  1. 对象头分为两部分,一部分用来记录对象自身的运行时数据,如在GC中的分代年龄、哈希码、持有的锁等等;另一部分是类型指针,用来记录引用,是谁指向了我?JVM通过这个来确定谁引用了对象。(是不是跟GC Root有关呢?没有研究过)
  2. 实例数据是对象真正存储的有效信息,也是在程序代码中所定义的各种类型的字段内容。
  3. 对齐填充不是必然存在的。有的虚拟机要求对象大小必须是8字节的整数倍。
    怎么理解呢,就当是你玩游戏时候选择的一个英雄吧,头信息一个是他的等级,另一个就是谁操控了他,实例数据就是他的人头数,装备等等,因为这些是你靠本事拿来的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第二部分 自动内存管理机制 第二章 java内存异常与内存溢出异常 运行数据区域 程序计数器:当前线程所执行的字节...
    小明oh阅读 1,212评论 0 2
  • Version:1.0 StartHTML:000000214 EndHTML:000030235 StartFr...
    小七奇奇阅读 687评论 0 0
  • 《深入理解Java虚拟机》笔记_第一遍 先取看完这本书(JVM)后必须掌握的部分。 第一部分 走近 Java 从传...
    xiaogmail阅读 5,175评论 1 34
  • JVM有哪些分区?程序计数器,java虚拟机栈,本地方法栈,堆,方法区。 java栈中存放的是一个个栈帧,每一个栈...
    irckwk1阅读 727评论 0 0
  • 文章的目的主要是针对面试官的提问,做出尽可能精简而全面的回答。若读者对某块的知识不能太理解,还请参阅其他大佬比较详...
    红茶玛奇朵鸭阅读 1,430评论 1 4