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

目录

          • [1. 说明](#1. 说明)
          • [2. 结论](#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字节。
  • 5.JVM还可能使用其他优化技术来减少内存占用,如对象压缩、对象共享等
相关推荐
小江的记录本2 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
小江的记录本4 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
小江的记录本4 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:G1:Region分区、Mixed GC、回收流程、适用场景(高频)(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·spring cloud·面试
ID_180079054738 小时前
小红书评论 API 接口详解与实战开发
java·jvm·c++
東雪木10 小时前
JVM 与 Java 内存模型 专属复习笔记
java·jvm·笔记·java面试
Undergoer_TW13 小时前
Colmap 进军嵌入式:SQLite 数据库从崩溃退出到自动治愈
jvm·数据库·sqlite
骄马之死14 小时前
ThreadLocal 核心原理
java·jvm·算法
一只小白00014 小时前
【JVM | 第二篇】—— 类加载器 & 双亲委派模型
jvm
Nyarlathotep011314 小时前
自动内存管理(3):HotSpot中垃圾收集的实现
jvm·后端
仍然.15 小时前
浅谈JVM
jvm