Java 对象内存布局

在虚拟机中,Java对象在内存中的布局可以分为三块:

  • 对象头(Header) :包含 markword 标记字段类型指针32 位上大小是 8 个字节64 位 16 个字节
  • 实例数据(Instance Data):包含了对象的所有成员变量,其大小由各个成员变量的大小决定,HotSpot虚拟机的默认分配策略中,宽度相等的字段总是被分配到一起存放,如longdouble, shortcharbyteboolean
  • 对齐填充(Padding) :占位符的作用,HotSpot 虚拟机要求对象的大小必须是 8 字节的整数倍因为对象头部分被精心设计成是 8 字节的倍数(1倍或2倍)),这部分并不是必然存在的,如果对象实例数据没有对齐的话,就需要通过对齐填充进行补全。

在这里插入图片描述
在这里插入图片描述

对象头又包括:

  • markword 标记字段哈希码、GC分代年龄、锁状态等,32位上是4字节,64位8字节
  • 类型指针指向对象的类型元数据的指针JVM 通过这个指针来确定这个对象是属于哪个类的实例32 位 4 字节,64 位开启指针压缩 4 字节,否则 8 字节,jdk 1.8 默认开启指针压缩后为 4 字节
  • 数组长度如果对象是一个数组对象, 那在对象头中还必须有一块数据用于记录数组长度。 4 字节

在这里插入图片描述

对于 64 位上的一个空对象:

在这里插入图片描述

也就是说,在 64 位系统上,不开启指针压缩的情况下,一个空对象也要占用 16 字节的大小,而如果这个对象是数组对象,还要额外占用 4 字节,即 20 字节。

所以,在开发中应当尽量避免使用包装类型和枚举类型作为参数类型设计,使用包装类型除了拆装箱的开销外,在数据规模较大的情况下,还有可能占用较大的内存或者造成内存抖动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/305321.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Download Monitor Email Lock下载监控器邮件锁插件

打开Download Monitor Email Lock下载监控器邮件锁插件 Download Monitor Email Lock下载监控器邮件锁插件下载监视器的电子邮件锁定扩展允许您要求用户在获得下载访问权限之前填写他们的电子邮件地址。 Download Monitor Email Lock下载监控器邮件锁插件用法 安装扩展程序后…

每日一题--------求数字的每⼀位之和

大家好今天的每日一题又来了,有啥不对的请在评论区留言哦 文章目录 目录 文章目录 求数字的每⼀位之和 题⽬描述: 输⼊⼀个整数m,求这个整数m的每⼀位之和,并打印。 一、解题思路 我们可以通过不断获取该整数的个位数&#xff0c…

crc算法的应用 CRC16 CRC32

提到crc算法,可能比较陌生,但是在日常开发中,有如下应用 循环冗余检查_百度百科 本质是一个哈希函数,用于文件校验处理。 CRC16 redis集群使用了crc16 来计算对应的哈希值来计算与 16384 取模,确定当前 key 所在的哈…

javaSwing车辆租赁管理系统

一、 引言 车辆租赁管理系统是一种便捷的解决方案,用于有效管理汽车租赁业务。本博客将介绍一个基于Java Swing的车辆租赁管理系统的开发,并展示相应的数据库设计。 二、 开发环境 Java Swing MySQL数据库 三、 数据库设计 在MySQL数据库中&#xf…

【C语言】程序练习(二)

大家好,这里是争做图书馆扫地僧的小白。 个人主页:争做图书馆扫地僧的小白_-CSDN博客 目标:希望通过学习技术,期待着改变世界。 目录 前言 一、运算符练习 1 算术运算符 1.1 练习题: 2 自加自减运算符 3 关系运…

最新AI系统ChatGPT网站系统源码,Midjourney绘画,GPT语音对话+ChatFile文档对话总结+DALL-E3文生图+思维导图一站式解决方案

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

射频PCB电路布局设计及布线注意事项

在电子产品和设备中,电路板是一个不可缺少的部件,它起着电路系统的电气和机械等的连接作用。如何将电路中的元器件按照一定的要求,在PCB上排列组合起来,是PCB设计师的主要任务之一。布局设计不是简单的将元器件在PCB上排列起来&am…

【ZYNQ】教你用 Vivado HLS 快速设计一个 IP

Xilinx 推出的 Vivado HLS 工具可以直接使用 C、C或 System C 来对 Xilinx 系列的 FPGA 进行编程,从而提高抽象的层级,大大减少了使用传统 RTL 描述进行 FPGA 开发所需的时间。 Vivado HLS 的功能简单地来说就是把 C、C 或 SystemC 的设计转换成 RTL 实…

分布式事务的8种解决方案(荣耀典藏版)

大家好,我是月夜枫,在上篇文章中,我们已经谈到了分布式中至关重要的两个理论:CAP 理论和 BASE 理论。 今天将带大家探讨分布式事务里的“八奇技”,帮助大家在实际的分布式系统中更好地运用事务。 时光穿梭机&#xff…

Redis缓存雪崩、缓存击穿、缓存穿透

1. 什么是缓存雪崩 当我们提到缓存系统中的问题,缓存雪崩是一个经常被讨论的话题。缓存雪崩是指在某一时刻发生大量的缓存失效,导致瞬间大量的请求直接打到了数据库,可能会导致数据库瞬间压力过大甚至宕机。尤其在高并发的系统中,…

CodeWhisperer——轻松使用一个超级强大的工具

CodeWhisperer 简介 CodeWhisperer是亚⻢逊云科技出品的一款基于机器学习的通用代码生成器,可实时提供代码建议。 CodeWhisperer有以下几个主要用途: 解决编程问题,提供代码建议,学习编程知识等等,并且CodeWhisper…

第一节 初始化项目

系列文章目录 第一节 初始化项目 文章目录 操作步骤 总结 操作步骤 打开cmd 输入 vue ui 在打开的网页中点击“创建”,复制文件夹路径并粘贴点击“在此创建新项目” 输入项目名称 点击下一步选择手动配置 选择babel、router、vuex、css pre-processors、 linter建…