7.jvm对象内存布局
目录
- 概述
- 对象里的三个区
- 对象头
- 验证
- 代码
- 控制台输出
- 分析
- 验证2
- 代码
- 控制台输出
- 实例数据
- 对其填充
- 访问对象
- 结束
概述
jvm对象内存布局详解。
相关文章在此总结如下:
| 文章 | 地址 |
|---|---|
| jvm基本知识 | 地址 |
| jvm类加载系统 | 地址 |
| 双亲委派模型与打破双亲委派 | 地址 |
| 运行时数据区 | 地址 |
| 运行时数据区-字符串常量池、程序计数器、直接内存 | 地址 |
| jvm中对象创建流程与内存分配 | 地址 |
对象里的三个区
对象里有啥?

对象头
对象头:8字节,如果是数组12字节(记录数组长度,占4字节)
-
标记字段:存储对象
运行时自身数据- 默认:对象Hashcode、GC分代年龄、锁状态
- 存储数据结构并不是固定的
-
类型指针:对象指向类元数据的指针
- 开启指针压缩占4字节、不开启8字节 (jdk1.6之后默认是开启的)
-
数组长度:如果是数组,则记录数组长度,占4个字节
-
对其填充:保证数组(针对的是数组)的大小永远是8字节的整数倍
32位Markword是可变的数据结构,对象头总大小固定8字节

Markword 占4个字节,共32位。
64位Markword是可变的数据结构,对象头总大小固定12字节


验证
打印空对象的内存而已信息
代码
<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.9</version>
</dependency>
执行代码
package com.fun.info;import org.openjdk.jol.info.ClassLayout;public class ObjLock {public static void main(String[] args) {Object o = new Object();System.out.println("new Object:"+ ClassLayout.parseInstance(o).toPrintable());}
}
控制台输出

分析
- 首先对象头是包含
Markword和类型指针这两部分信息 - 开启指针压缩的情况下,存放 Class 指针的空间大小是4字节,Markword是8字节,对象头为12个字节
- 新建 Object 对象,会在内存占用16个字节,其中
Header占12个(Markword 占8个 + ClassPoint 占 4个),没有实例数据,补充对齐 4 个字节
验证2
基本数据类型和包装类的内存占用情况
| 数据类型 | 内存占用 (byte) |
|---|---|
| boolean | 1 |
| byte | 1 |
| short | 1 |
| char | 2 |
| int | 4 |
| float | 4 |
| long | 8 |
| double | 8 |
| Boolean | 4 |
| Byte | 4 |
| Short | 4 |
| Character | 4 |
| Integer | 4 |
| Float | 4 |
| Long | 4 |
| Double | 4 |
代码
package com.fun.info;import org.openjdk.jol.info.ClassLayout;public class ObjLock2 {public static void main(String[] args) {Student o = new Student();System.out.println("new Object:"+ ClassLayout.parseInstance(o).toPrintable());o.setAge(10);o.setFlag(true);o.setName("abc");System.out.println("赋值 new Object:"+ ClassLayout.parseInstance(o).toPrintable());}static class Student{private boolean flag;private int age;private String name;public boolean isFlag() {return flag;}public void setFlag(boolean flag) {this.flag = flag;}public void setAge(int age) {this.age = age;}public void setName(String name) {this.name = name;}}
}
控制台输出


总结: 对象从创建,对象的大小就已确定了。
实例数据
对象内部的成员变量
对其填充
8字节对象,保证对象大小是8字节的整数倍。
访问对象
如何访问对象?


两种方式如上两图:
- 1.句柄
- 2.直接指针
结束
至此,jvm对象内存布局就说得明明白白了,如有疑问,欢迎评论区留言。
相关文章:
7.jvm对象内存布局
目录 概述对象里的三个区对象头验证代码控制台输出分析 验证2代码控制台输出 实例数据对其填充 访问对象结束 概述 jvm对象内存布局详解。 相关文章在此总结如下: 文章地址jvm基本知识地址jvm类加载系统地址双亲委派模型与打破双亲委派地址运行时数据区地址运行时数…...
U-boot(一):Uboot命令和tftp
本文主要基于S5PV210探讨uboot。 uboot 部署:uboot(180~400K的裸机程序)在Flash(可上电读取)、OS在FLash(nand) 启动过程:上电后先执行uboot、uboot初始化DDR和Flash,将OS从Flash中读到DDR中启动OS,uboot结束 特点:…...
代码随想录算法训练营第五十三天丨 动态规划part14
1143.最长公共子序列 思路 本题和动态规划:718. 最长重复子数组 (opens new window)区别在于这里不要求是连续的了,但要有相对顺序,即:"ace" 是 "abcde" 的子序列,但 "aec" 不是 &quo…...
pdf增强插件 Enfocus PitStop Pro 2022 mac中文版功能介绍
Enfocus PitStop Pro mac是一款 Acrobat 插件,主要用于 PDF 预检和编辑。这个软件可以帮助用户检查和修复 PDF 文件中的错误,例如字体问题、颜色设置、图像分辨率等。同时,Enfocus PitStop Pro 还提供了丰富的编辑工具,可以让用户…...
uniapp app tabbar 页面默认隐藏
1.在page.json 中找到tabbar visible 默认为true,设为false则是不显示 uni.setTabBarItem({ index: 1, //列表索引 visible:true //显示或隐藏 })...
深度学习 YOLO 实现车牌识别算法 计算机竞赛
文章目录 0 前言1 课题介绍2 算法简介2.1网络架构 3 数据准备4 模型训练5 实现效果5.1 图片识别效果5.2视频识别效果 6 部分关键代码7 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于yolov5的深度学习车牌识别系统实现 该项目较…...
即时通讯技术文集(第23期):IM安全相关文章(Part12) [共15篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第23 期。 [- 1 -] 理论联系实际:一套典型的IM通信协议设计详解(含安全层设计) [链接] http://www.52im.net/thread-283-…...
为什么UI自动化难做?—— 关于Selenium UI自动化的思考
在快速迭代的产品、团队中,UI自动化通常是一件看似美好,实际“鸡肋”(甚至绝大部分连鸡肋都算不上)的工具。原因不外乎以下几点: 1 效果有限 通常只是听说过,就想去搞UI自动化的团队,心里都认…...
Python小白之“没有名称为xlwings‘的模块”
题外话:学习和安装Python的第一个需求就是整理一个Excel,需要读取和写入Excel 背景:取到的模板代码,PyCharm本地运行报错:没有名称为xlwings的模块 解决办法:这类报模板找不到的错,即是模块缺…...
RK3588 学习教程1——获取linux sdk
上手rk3588前,需要先拥有一块开发板,这样可以少走很多弯路。个人推荐买一块itx3588j的板子。挺好用,接口丰富,可玩性高。 sdk可以直接在firefly官网下载,不用管什么版本,下载下来后直接更新即可࿰…...
保护您的Google账号安全:检查和加固措施
简介:随着我们在日常生活中越来越依赖于Google账号,我们的个人信息和敏感数据也变得越来越容易受到威胁。为了确保您的Google账号的安全性,本文将介绍一些简单但有效的方法,帮助您检查和加固您的Google账号。 --- 在数字时代&am…...
「Verilog学习笔记」优先编码器Ⅰ
专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 分析编码器的功能表: 当使能El1时,编码器工作:而当E10时,禁止编码器工作,此时不论8个输入端为何种状态&…...
java实现TCP通信(socket)服务端-客户端
我在写的时候,我的需求就很简单,写一个服务端,去让别人进行请求,借鉴了很多聊天室什么的,越搞越复杂。 期间也使用到了 BufferedReader中readLine()方法,进行获取客户端传来的数据&…...
企业信息模糊搜索API的使用及应用场景
前言 随着企业数据的不断增加,如何高效地搜索和管理这些数据成为了企业管理者关注的重要问题。而企业信息模糊搜索API的出现,为企业提供了一种高效的解决方案。本文将介绍企业信息模糊搜索API的使用及应用场景。 一、什么是企业信息模糊搜索API&#x…...
.net6+aspose.words导出word并转pdf
本文使用net6框架,aspose.word破解激活并兼容net6,导出word模板并兼容识别html并给其设置字体,前端直接浏览器下载,后端保存文件并返回文件流,还有批量导出并压缩zip功能 1、安装Aspose.Words的nuget包选择21.8.0 版本…...
深度学习 植物识别算法系统 计算机竞赛
文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核,池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集…...
《深入浅出进阶篇》洛谷P4147 玉蟾宫——悬线法dp
上链接:P4147 玉蟾宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P4147 上题干: 有一个NxM的矩阵,每个格子里写着R或者F。R代表障碍格子,F代表无障碍格子请找出其中的一个子矩阵,…...
社区论坛小程序源码系统,功能齐全,页面简洁,前端+后端+完整部署教程
现如今,社区论坛已经成为人们交流思想,分享经验,获取信息的重要平台。近年来,小程序的出现更是改变了传统的网站建设方式,让用户体验更加便捷,高效。今天源码小编来和大家分享一款社区论坛小程序源码系统&a…...
大数据开发面试(一)
1、Kafka 和 Flume 的应用场景? Kafka 和 Flume 的应用场景如下: Kafka:定位消息队列,适用于多个生产者和消费者共享一个主题队列的场景。适用于需要高吞吐量、可扩展性和容错能力的场景。主要用于大数据处理、实时数据流分析和日…...
softmax的高效CUDA编程和oneflow实现初步解析
本文参考了添加链接描述,其中oneflow实现softmax的CUDA编程源代码参考链接添加链接描述 关于softmax的解读以及CUDA代码实现可以参考本人之前编写的几篇文章添加链接描述,添加链接描述,添加链接描述 下面这个图片是之前本人实现的softmax.cu经过接入python接口,最终和pytor…...
别再乱用分支了!Flowable四种网关(排他/并行/包容/事件)实战选型指南
Flowable四大网关实战选型:从混乱到精准的决策艺术当你在设计一个请假审批流程时,是否遇到过这样的困惑:部门经理审批后需要同时通知HR和财务,但某些特殊情况下又需要跳过财务直接归档?这种看似简单的业务需求…...
用Python+OpenCV手把手实现Prewitt边缘检测(附完整代码与效果对比图)
用PythonOpenCV手把手实现Prewitt边缘检测(附完整代码与效果对比图) 边缘检测是计算机视觉中最基础也最关键的预处理步骤之一。想象一下,当你需要让计算机"看清"一张照片中的物体轮廓时,边缘检测算法就是它的"视觉…...
内网环境下Win7系统批量离线补丁部署实战指南
1. 内网Win7补丁部署的挑战与解决方案老旧Win7系统在内网环境中的安全隐患就像漏雨的屋顶,看似不影响日常使用,但随时可能引发严重后果。我经手过几十家单位的系统加固项目,发现这些场景存在三个典型痛点:首先是补丁来源问题&…...
别再用SonarQube凑数了!DeepSeek原生圈复杂度引擎的6大颠覆性能力(含GitHub私有部署密钥)
更多请点击: https://kaifayun.com 第一章:DeepSeek圈复杂度分析的底层原理与范式革命 DeepSeek圈复杂度分析并非传统McCabe度量的简单复刻,而是基于控制流图(CFG)动态重构与语义感知路径裁剪的双重机制构建的新范式。…...
FeHelper前端助手:30+开发工具集,让你的浏览器变身效率神器
FeHelper前端助手:30开发工具集,让你的浏览器变身效率神器 【免费下载链接】FeHelper 😍FeHelper--Web前端助手(Awesome!Chrome & Firefox & MS-Edge Extension, All in one Toolbox!) 项目地址:…...
自制极低频电流探头:负电阻补偿原理与低频方波测量实践
1. 项目概述:为极低频电流测量而生在电子测试领域,电流探头是个再常见不过的工具,无论是排查开关电源的纹波,还是分析电机驱动的波形,都离不开它。但如果你尝试用市面上常见的电流探头去观察一个频率低至几赫兹&#x…...
终极免费音乐解锁工具:5步轻松解密你的加密音乐文件
终极免费音乐解锁工具:5步轻松解密你的加密音乐文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https:/…...
对比按量计费与Token Plan套餐的实际成本差异
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比按量计费与Token Plan套餐的实际成本差异 在构建和运营基于大模型的应用时,成本控制是一个核心的工程考量。Taotok…...
UE5项目打包后RenderTarget导出图片全黑?手把手教你解决伽马校正与资产打包问题
UE5打包后RenderTarget导出图片全黑的终极解决方案当你花了整整三天时间调试RenderTarget导出功能,终于在编辑器里看到完美的截图效果,却在打包成可执行文件后发现所有导出的图片都变成了一片漆黑——这种从云端跌入谷底的感觉,每个UE开发者都…...
3大技术突破:重新定义Switch游戏安装性能极限
3大技术突破:重新定义Switch游戏安装性能极限 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer Awoo Installer是一款专为破解版Nintendo…...
