
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
java编程开发语言是目前大多数软件开发程序员都在学习的一个编程开发语言,而今天我们就一起来简单了解一下,java编程对象内存结构与指针压缩。
一、对象内存结构概述
在介绍对象在内存中的组成结构前,我们先简要回顾一个对象的创建过程:
1、jvm将对象所在的class文件加载到方法区中
2、jvm读取main方法入口,将main方法入栈,执行创建对象代码
3、在main方法的栈内存中分配对象的引用,在堆中分配内存放入创建的对象,并将栈中的引用指向堆中的对象
对各个组成部分的功能简要进行说明:
对象头:对象头存储的是对象在运行时状态的相关信息、指向该对象所属类的元数据的指针,如果对象是数组对象那么还会额外存储对象的数组长度
实例数据:实例数据存储的是对象的真正有效数据,也就是各个属性字段的值,如果在拥有父类的情况下,还会包含父类的字段。字段的存储顺序会受到数据类型长度、以及虚拟机的分配策略的影响
对齐填充字节:在java对象中,需要对齐填充字节的原因是,64位的jvm中对象的大小被要求向8字节对齐,因此当对象的长度不足8字节的整数倍时,需要在对象中进行填充操作。注意图中对齐填充部分使用了虚线,这是因为填充字节并不是固定存在的部分,这点在后面计算对象大小时具体进行说明。
二、指针
对指针压缩做一下简单总结:
通过指针压缩,利用对齐填充的特性,通过映射方式达到了内存地址扩展的效果
指针压缩能够节省内存空间,同时提高了程序的寻址效率
堆内存设置时好不要超过32GB,这时指针压缩将会失效,造成空间的浪费
此外,指针压缩不仅可以作用于对象头的类型指针,还可以作用于引用类型的字段指针,以及引用类型数组指针
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。