当前位置: 首页 > news >正文

【jvm】一个空Object对象的占多大空间

目录

          • 1. 说明
          • 2. 结论

1. 说明
  • 1.在Java中,一个空Object对象所占用的内存空间大小会受到JVM(Java虚拟机)实现和配置的影响,具体数值可能因不同JVM版本和配置而有所不同。
  • 2.但一般来说,可以基于一些通用的原则来估算这个大小。
  • 3.以一个常见的JVM实现——HotSpot虚拟机为例,一个对象在堆内存中的布局通常包括对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。
  • 4.对象头:对象头包含了用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、类元指针(指向当前实例对象所属的类)等。这些信息被官方称为“Mark Word”。在64位操作系统中,对象头通常占用16字节(开启指针压缩时为12字节),而在32位操作系统中则占用8字节。
  • 5.实例数据:对于空Object对象来说,实例数据部分通常是空的,不占用额外空间。
  • 6.对齐填充:JVM为了保证对象在内存中的对齐(通常是8字节对齐),可能会在对象头和实例数据之后添加一些填充字节。
  • 7.不同JVM实现和配置可能会有所不同,因此实际内存占用大小可能会有所差异。
  • 8.JVM还可能使用其他优化技术来减少内存占用,如对象压缩、对象共享等。
  • 9.一个空Object对象在Java中通常占用16字节的内存空间(在64位操作系统上,且考虑常见的JVM配置)。
2. 结论
  • 1.在64位操作系统上,且开启了指针压缩(UseCompressedOops)的情况下,一个空Object对象通常占用12字节(对象头)+ 0字节(实例数据)+ 4字节(对齐填充,使总大小达到16字节的倍数)= 16字节。
  • 2.但由于对齐填充的存在,实际分配的内存大小可能会是16字节的倍数,因此在这个情况下,空Object对象可能占用16字节。
  • 3.在64位操作系统上,且未开启指针压缩的情况下,一个空Object对象通常占用16字节(对象头,包括Mark Word和类元指针)+ 0字节(实例数据)+ 0字节或更多(对齐填充,但16字节已经是8的倍数,所以不需要额外填充)= 16字节。
  • 4.
  • 5.JVM还可能使用其他优化技术来减少内存占用,如对象压缩、对象共享等
http://www.lryc.cn/news/485535.html

相关文章:

  • 241114.学习日志——[CSDIY] [CS]数据结构与算法 [00]
  • The Planets: Earth -- 练习
  • linux逻辑卷练习
  • openai 论文Scaling Laws for Neural Language Models学习
  • __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined
  • 基于PHP技术的校园站的设计与实现
  • JVM回收机制与算法
  • 24/11/14 算法笔记 GMM高斯混合模型
  • Linux下编译安装Nginx
  • 算力100问☞第4问:算力的构成元素有哪些?
  • 安装paddle
  • 飞凌嵌入式RK3576核心板已适配Android 14系统
  • SpringBoot+MyBatis+MySQL的Point实现范围查找
  • 【Apache Paimon】-- 1 -- Apache Paimon 是什么?
  • 解决VsCode无法跳转问题
  • 优化C++设计模式:用模板代替虚函数与多态机制
  • 浪浪云轻量服务器搭建vulfocus网络安全靶场
  • C++builder中的人工智能(23):在现代C++ Windows上轻松录制声音
  • 避免误差!Android 中正确计算时间差的方式
  • unity3d————Resources异步加载
  • YOLOv11改进,YOLOv11添加GnConv递归门控卷积,二次创新C3k2结构
  • 如何选择国产化CMS来建设政务网站?
  • C/C++语言基础--initializer_list表达式、tuple元组、pair对组简介
  • paddle表格识别数据制作
  • python selenium库的使用:通过兴趣点获取坐标
  • 如何优化Kafka消费者的性能
  • 机器学习 决策树
  • 效益登记册效益管理计划
  • Go语言的零值可用性:优势与限制
  • 【自用】0-1背包问题与完全背包问题的Java实现