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

new Object()到底占用几个字节

Java内存模型

对象内存中可以分为三块区域:对象头(Header),实例数据(Instance Data)和对齐填充(Padding),以64位操作系统为例(未开启指针压缩的情况)Java对象布局

如下图所示:

其中对象头中的Mark Word中的详细信息在文章synchronized锁升级原理中有详细介绍。上图中的对齐填充不是一定有的,如果对象头和实例数据加起来刚好是8字节的倍数,那么就不需要对齐填充。

Object obj=new Object()占用字节

这是网上很多人都会提到的一个问题,那么结合上面的Java内存布局,我们来分析下,以64位操作系统为例,new Object()占用大小分为两种情况:

  • 未开启指针压缩 占用大小为:8(Mark Word)+8(Class Pointer)=16字节
  • 开启了指针压缩(默认是开启的) 开启指针压缩后,Class Pointer会被压缩为4字节,最终大小为:8(Mark Word)+4(Class Pointer)+4(对齐填充)=16字节

结果到底是不是这个呢?我们来验证一下。首先引入一个pom依赖:

<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.10</version></dependency>
package com.zwx.jvm;import org.openjdk.jol.info.ClassLayout;public class HeapMemory {public static void main(String[] args) {Object obj = new Object();System.out.println(ClassLayout.parseInstance(obj).toPrintable());}
}

输出结果如下:

最后的结果是16字节,没有问题,这是因为**默认开启了指针压缩**,那我们现在把指针压缩关闭之后再去试试。

-XX:+UseCompressedOops  开启指针压缩
-XX:-UseCompressedOops  关闭指针压缩

得到如下结果:

可以看到,这时候已经没有了对齐填充部分了,但是占用大小还是16位。

以上是Object 内无任何成员变量的情况

如果有成员变量,以下是成员变量数据类型占用字节大小情况

类型存储取值范围
int4byte-2^31 ~ 2^31 - 1
short2byte-2^15 ~ 2^15 - 1
long8byte(-2)^63 ~ 2^63 - 1
byte1byte-128 ~ 127
float4byte
double8byte
boolean1byte
char2byte

Hotspot实现的JVM开启内存压缩的规则(64位机器):

  • 4G以下,直接砍掉高32位
  • 4G~32G,默认开启内存压缩
  • 32G以上,压缩无效,使用64位

下面我们再来演示一下如果一个对象中带有属性之后的大小。

新建一个类,内部只有一个byte属性:

package com.zwx.jvm;public class MyItem {byte i = 0;
}

然后分别在开启指针压缩和关闭指针压缩的场景下分别输出这个类的大小。

package com.zwx.jvm;import org.openjdk.jol.info.ClassLayout;public class HeapMemory {public static void main(String[] args) {MyItem myItem = new MyItem();System.out.println(ClassLayout.parseInstance(myItem).toPrintable());}
}

开启指针压缩,占用16字节:

关闭指针压缩,占用24字节:

这个时候就能看出来开启了指针压缩的优势了,如果不断创建大量对象,指针压缩对性能还是有一定优化的

相关文章:

new Object()到底占用几个字节

Java内存模型 对象内存中可以分为三块区域&#xff1a;对象头(Header)&#xff0c;实例数据(Instance Data)和对齐填充(Padding)&#xff0c;以64位操作系统为例(未开启指针压缩的情况)Java对象布局 如下图所示&#xff1a; 其中对象头中的Mark Word中的详细信息在文章synchr…...

瞬态抑制二极管TVS的工作原理?|深圳比创达电子EMC(上)

TVS二极管具有响应速度快、漏电流小、钳位电压稳以及无寿命衰减的特性&#xff0c;从小到信号线静电防护&#xff0c;大到电力系统抗雷击浪涌&#xff0c;TVS都发挥着至关重要的作用。本章对瞬态抑制二极管TVS工作机理展开分析&#xff0c;供产品选型参考。接下来就跟着深圳比创…...

Nginx 同一端口 同时支持http与https 协议

文章目录 需求分析 需求 通过 nginx &#xff0c;让同一端口 同时支持http与https 协议 分析 通过使用 Nginx&#xff0c;可以实现同一端口同时支持 HTTP 和 HTTPS 协议。下面是一种可能的配置方式&#xff1a; 配置 HTTP 服务 在 Nginx 配置文件中&#xff0c;添加以下配置…...

【Express】文件上传管理 multer 中间件

Multer是Node.js中用于处理文件上传的中间件。它可以帮助你处理文件上传的相关逻辑&#xff0c;如接收和保存上传的文件、限制文件大小、设置文件类型限制等。只能用于处理 multipart/form-data 类型的表单数据&#xff0c;它主要用于上传文件。 下面是使用Multer中间件的基本…...

性能监控软件是什么?有哪些优势?

在现代科技驱动的世界中&#xff0c;计算机系统的性能对于企业和个人用户都至关重要。性能监控软件是一种不可或缺的工具&#xff0c;可以帮助我们实时跟踪、分析和优化系统的性能。本文将介绍性能监控软件的概念、其重要性以及如何选择和使用这些工具来提高系统效率。 一、性能…...

分布式事务及CAP和BASE顶底

一、分布式事务 单体应用肯定就不存在分布式事务了&#xff0c;只有在分布式微服务系统中&#xff0c;各个服务之间通过RPC调用后&#xff0c;每个微服务有自己和数据库的连接&#xff0c;各个微服务的回滚不影响其他的微服务事务&#xff0c;这几必须使用分布式事务来解决分布…...

Django REST Framework完整教程-认证与权限-JWT的使用

文章目录 1.认证(Authentication)与权限(Permission)1.1.视图添加权限1.2.登录验证1.3.常用DRF自带权限类1.4.自定义权限类1.5.全局权限1.6.函数视图权限 2.认证详解2.1.认证方案2.2.如何使用TokenAuthentication&#xff1f; 3.JSON Web Token(JWT)认证3.1.工作原理3.2.安装3.…...

领域内容第18名

恭喜入榜...

[1024]程序员节 一晃6年过去了

加入开发者大军&#xff0c;一晃已是6年有余&#xff0c;从最初的Andoird开发如火如荼&#xff0c;到现在的秋风萧瑟&#xff0c;宛如被秋风吹得只剩躯干的树木&#xff0c;等待来年的焕发新芽。 我本不是一个科班出身的开发者&#xff0c;但是为了生活&#xff0c;说白了为了钱…...

数据结构 | 构造哈夫曼树

template<class T> void Heap<T>::PercolateUp() //为了向上调整为堆&#xff0c;我们需要比较当前节点和其父节点的值&#xff0c;如果父节点的值比当前节点大&#xff0c;则交换它们的值。 { int p size - 1, c (p - 1) / 2;//c表示当前节点的父节点&#xff0…...

实验室烧杯可以用超声波清洗机吗

实验室烧杯可以用超声波清洗机吗&#xff1f;答案是可以的&#xff01;超声波清洗机不仅可以清洗实验烧杯&#xff0c;还可以用于清洗实验室中的试管、培养皿、移液管、载玻片、容量瓶、锥形瓶等各类实验器皿。在实验中&#xff0c;如果烧杯清洁不到位&#xff0c;会使得实验数…...

Unity之ShaderGraph如何实现UV抖动

前言 今天我们通过噪波图来实现一个UV抖动的效果。 如下图所示&#xff1a; 关键节点 Time&#xff1a;提供对着色器中各种时间参数的访问 UV&#xff1a;提供对网格顶点或片段的UV坐标的访问。可以使用通道下拉参数选择输出值的坐标通道。 SimpleNoise&#xff1a;根据…...

#力扣:771. 宝石与石头@FDDLC

771. 宝石与石头 - 力扣&#xff08;LeetCode&#xff09; 一、Java class Solution {public int numJewelsInStones(String jewels, String stones) {int[] isJewel new int[z 1];for (int i jewels.length() - 1; i > 0; i--) isJewel[jewels.charAt(i)] 1;int cnt …...

【网络协议】聊聊拓扑网络结构与原理

拓扑结构 上一篇我们简单讲述了一种交换机的情况&#xff0c;但是实际的场景是比较复杂的&#xff0c;在一个楼层可能有几十或者上百个接口&#xff0c;那么当知道对方的IP地址&#xff0c;求对方的MAC地址&#xff0c;其实是通过ARP协议进行处理的。 上图是一个两个交换机的…...

uview表单 hooks

在UViewUI库中&#xff0c;使用hooks封装表单二次可以让我们以更灵活的方式使用表单组件。下面是一个示例&#xff0c;展示如何将表单封装成hooks&#xff0c;并以JSON形式传递参数&#xff1a; 首先&#xff0c;我们可以创建一个自定义的Hook来处理表单逻辑。在这个例子中&…...

车载视频如何转换视频格式

当你收集了多种视频想在车内进行播放&#xff0c;它们可能不会自动播放。你有可能会在屏幕上看到一条消息&#xff0c;显示“文件格式不受支持”&#xff0c;这是因为这些视频可能采用了你的汽车无法识别的格式。 那我们如何才可以转换为车载播放器上运行的最重要且最广泛使用…...

虚拟音频设备软件 Loopback mac中文版软件介绍

创建虚拟音频设备以从应用程序和音频输入设备获取声音&#xff0c;然后将其发送到音频处理应用程序&#xff0c;它就是—Loopback for Mac&#xff0c;Loopback mac为您提供高端工作室混音板的强大功能&#xff0c;有了它在Mac上传递音频会变得很容易。 Loopback for mac中文版…...

Android SurfaceControlViewHost介绍及使用

概要介绍 SurfaceControlViewHost是一个工具类&#xff0c; 用于帮助在其他进程中显示本进程的view。 SurfaceControlViewHost 为绘制进程持有&#xff0c;其中的SurfacePackage 交给另外的显示进程&#xff0c;在显示进程中的SurfaceView中通过SurfaceView.setChildSurface…...

微信小程序开发(一)

目录 开发者界面 app.json配置(举例) 组件 样式 像素 flex布局 微信小程序是一种基于微信平台的应用程序开发模式&#xff0c;它可以让开发者使用前端开发技术&#xff08;如HTML、CSS和JavaScript&#xff09;开发应用程序&#xff0c;并在微信客户端中运行。以下是微信…...

MySQL数据库操作(创建、修改、删除、查询)

MySQL查看或显示数据库&#xff08;SHOW DATABASES语句&#xff09; 在 MySQL 中&#xff0c;可使用 SHOW DATABASES 语句来查看或显示当前用户权限范围以内的数据库。查看数据库的语法格式为&#xff1a; SHOW DATABASES [LIKE ‘数据库名’]; 语法说明如下&#xff1a; 语法…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...