java虚拟机内存分配_深入理解java虚拟机第二版

java虚拟机内存分配_深入理解java虚拟机第二版深入理解Java虚拟机之对象的内存布局、访问定位

大家好,又见面了,我是你们的朋友全栈君。

内存布局

在HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)、对齐填充(Padding)。

对象头

对象头分为两个部分,第一部分存储自身的运行时数据,如对象的哈希码、GC分代年龄、锁标志位等。这部分数据的长度在32位和64位的虚拟机中分别为32bit和64bit,官方称它为“Mark World”,Mark Word被设计为一个非固定的数据结构,以便在极小的内存空间内存储尽量多的信息,它会根据对象的状态复用自己的存储空间。32位HotSpot虚拟机对象头Mark Word存储内容如下:

第二部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。

如果对象是一个Java数组,对象头中还必须有一块用于记录数组长度的数据,因为虚拟机可以通过普通Java对象的元数据信息确定Java对象的大小,但从数组的元数据却无法确定数组的大小。

实例数据

实例数据部分是对象真正存储的有效信息,也是程序代码中所定义的各种类型的字段内容。无论是从父类继承下来的,还是在子类中定义的,都需要记录下来。这部分的存储顺序会受到虚拟机分配策略参数(FieldsAllocationStyle)和Java字段在Java源码中定义的顺序的影响。HotSpot虚拟机默认的分配策略为longs/doubles、ints、shorts/chars、bytes/boolean、oops(ordinary object pointers),相同宽度的字段总是被分配到一起。

对齐填充

对齐填充并不是必然存在的,仅起着占位符的作用。由于HotSpot VM的自动内存管理系统要求对象的起始地址必须是8字节的整倍数,而对象头刚好是8字节的整倍数,所以当对象实例数据部分没有对齐时,就需要通过对齐填充来补全。

访问定位

建立对象是为了使用对象,我们的Java程序需要通过栈上的reference数据来操作堆上的具体对象。

访问方式

  • 句柄访问:在堆中划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,句柄中包含了对象实例数据与类型数据各自的地址信息。

  • 直接指针访问:reference中存储内容为对象地址。

两种访问方式优势对比

句柄访问最大的好处是reference中存储的是稳定的句柄地址,在对象被移动时只会改变句柄中的实例数据的指针,而无需修改reference本身。

直接指针访问的最大好处是速冻更快,节省了一次指针定位的时间开销。

如果读完觉得有收获的话,欢迎点赞、关注、加公众号【Java在线】,查阅更多精彩历史!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107291.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java dom4j 增删改查[通俗易懂]

    java dom4j 增删改查[通俗易懂]packagecn.itcast.dom4j;importjava.io.FileOutputStream;importjava.io.OutputStream;importjava.util.List;importorg.dom4j.Document;importorg.dom4j.DocumentException;importorg.dom4j.Document

    2022年7月14日
    15
  • 农行赵维平:农业银行自主可控的大数据平台建设[通俗易懂]

    农行赵维平:农业银行自主可控的大数据平台建设[通俗易懂]4月27日,中国大数据峰会上,农总行赵处的讲演,引得台下掌声雷动。“大数据建设只有起点,没有终点,我们一直在路上。在国产化的道路上,希望民族工业无比强大,在国际市场上挺起腰杆!”500-333文章照片-大数据推动金融创新-赵维平中国农业银行软件开发中心的专家赵维平农总行赵处的讲演的数据着实令国人振奋!农业银行以国产数据库GBase8a为基础的国…

    2022年5月8日
    78
  • 【centos7 + MySQL5.7 安装】centos7 安装MySQL5.7

    【centos7 + MySQL5.7 安装】centos7 安装MySQL5.7说明:我们安装MySQL位置在/usr/local下第一步、下载MySQL安装包:[root@localhostlocal]#wgethttps://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm安装mysql安装源:[root@localhostlocal]#yum-ylocali…

    2022年6月9日
    34
  • 关于VUE双向绑定失效的问题「建议收藏」

    关于VUE双向绑定失效的问题「建议收藏」双向绑定失效的原因有很多。lz就说最近遇到的。是的,单价下的那个输入框我用了双向绑定(比如叫price,比如100)。然后ipnut键入中文时,(即使我做了输入验证)。回车时虽然框中不会保留中文,但事实上VUE的双向绑定已经失效了。不管你后面输入什么,绑定的price保存的值只会是中文前的那个值(100)。这样就导致表面好像没事,但是当你提交时就数据不对了。还有

    2025年11月15日
    3
  • swal_piano中文什么意思

    swal_piano中文什么意思标题:title:”表结构同步成功”,类型:error,warnning,successtype:”success”,显示取消按钮:showCancelButton:false,显示确定按钮:showConfirmButton:false,定时关闭弹窗的计时器,单位为ms(毫秒)。timer:2000…

    2025年8月22日
    3
  • 北京方言集锦_各地方言大全

    北京方言集锦_各地方言大全A======================================================碍事儿:不方便暗门子:暗娼熬鹰:也做熬大鹰,不得已而彻夜不能睡眠。主要跟当时人喜欢

    2022年8月1日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号