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

JVM对象内存结构

1对象内存结构说明

注意:

如果对象数组对象对象头后面4字节存储数组长度

1.1对象

对象头分为Mark WordClass Pointer两部分

Mark Word对象基础信息

  • 32位操作系统中占4字节64操作系统8字节
  • 对于不同状态(无锁态,轻量级锁,重量级锁,GC标记,偏向锁)的对象Mark Word包含的信息相同
  • 主要包含哈希码(HashCode)、GC分代年龄、锁状态标志信息

Klass Pointer类元数据指针

  • 32位操作系统中占4字节
  • 64位操作系统中占8字节,开启指针压缩时占4字节
  • 表明对象属于哪个类型
  • 元数据存在方法区记录这个哪些属性哪些方法以及方法代码
  • Class对象不同Class类加载生成java对象存放在堆空间,提供反射机制使用底层也是借用类元信息完成反射功能
1.2实例数据

对象属性的值数据

1.3填充字节

默认8字节对齐

保证对象大小8整数

2 通过jol计算对象大小

依赖

<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.10</version></dependency>

分析Object对象大小

  • 代码

public static void main(String[] args) {ClassLayout classLayout = ClassLayout.parseInstance(new Object());System.out.println("对象信息===================");System.out.println(classLayout.toPrintable());System.out.println("类信息===================");classLayout = ClassLayout.parseClass(Object.class);System.out.println(classLayout.toPrintable());
}

  • 输出

分析int[]对象大小

  • 代码

public static void main(String[] args) {ClassLayout classLayout = ClassLayout.parseInstance(new int[]{1,2,3});System.out.println("对象信息===================");System.out.println(classLayout.toPrintable());System.out.println("类信息===================");classLayout = ClassLayout.parseClass(int[].class);System.out.println(classLayout.toPrintable());
}

  • 输出

分析自定义类App对象大小

  • 代码

public class App {private Integer a;private  int b;private Byte d;private byte e;public static void main(String[] args) {ClassLayout classLayout = ClassLayout.parseInstance(new App());System.out.println("对象信息===================");System.out.println(classLayout.toPrintable());System.out.println("类信息===================");classLayout = ClassLayout.parseClass(App.class);System.out.println(classLayout.toPrintable());}
}

  • 输出

结论

  • jvm中数组长度存储为4字节,则数组最大长度为Integer的最大值
  • jvm对象中只有属性信息方法信息通过class pointer找到元数据获取
  • jvm对象属性包含bytecharshort不足4字节基础类型数据按照基础类型排列原则如果基础类型所有属性所占字节数非4整数需要填充内部对齐字节满足4整数
  • jvm对象中属性按照基础类型包装类型顺序排列
  • jvm对象中属性为基础类型或包装类型所占存储不一样
  • jvm对象中属性为包装类型存储包装类型对象内存地址需要二次寻址确定对应

思考:

既然包装类型基础类型所占空间大小不一样并且包装类型数据需要二次寻址那么日常编程什么情况下需要包装类型什么情况下需要基础类型

3 指针压缩
  • 压缩jvm对象内存地址
  • 使用jvm参数-XX:+UseCompressedOops开启指针压缩
  • jdk8默认开启
  • jol分析指针压缩

相关文章:

JVM对象内存结构

1对象内存结构说明 注意&#xff1a; 如果对象为数组对象&#xff0c;在对象头后面有4字节存储数组长度&#xff1b; 1.1对象头 对象头分为Mark Word和Class Pointer两部分&#xff1b; Mark Word&#xff1a;对象基础信息 32位操作系统中占4字节&#xff0c;64位操作系统中占8…...

联邦学习和大模型相结合: 数据隐私,提升训练效率,架构优化

联邦学习和大模型相结合: 数据隐私,提升训练效率,架构优化 数据隐私保护方面 增强隐私保护机制:大模型通常需要大量的数据进行训练,而联邦学习可以在不共享原始数据的情况下进行模型训练。结合两者,可以设计出更强大的隐私保护机制,如利用联邦学习的加密技术和差分隐私…...

命令别名和命令历史

1.1命名别名 别名是命令的快捷方式。对于需要经常执行&#xff0c;并需要很长时间输入的长命令创建快捷方式很有用。 语法&#xff1a; alias 别名 ’ 原命令 [ 选项 ]…… [ 参数 ]……’ 1.2命令历史...

打造三甲医院人工智能矩阵新引擎(二):医学影像大模型篇--“火眼金睛”TransUNet

一、引言 1.1 研究背景与意义 在现代医疗领域,医学影像作为疾病诊断与治疗的关键依据,发挥着不可替代的作用。从传统的X射线、CT(计算机断层扫描)到MRI(磁共振成像)等先进技术,医学影像能够直观呈现人体内部结构,为医生提供丰富的诊断信息,涵盖疾病识别、病灶定位、…...

Scade pragma: separate_io

概述 在 Scade 语言中&#xff0c;支持对用户自定义算子使用 separate_io pragma 进行修饰。其形式如&#xff1a; function #pragma kcg separate_io #end N(x: int8) returns (y,z: int8) let y x;z x; tel在上例中&#xff0c;算子N 就被 pragma #pragma kcg separate_i…...

IWOA-GRU和GRU时间序列预测(改进的鲸鱼算法优化门控循环单元)

时序预测 | MATLAB实现IWOA-GRU和GRU时间序列预测(改进的鲸鱼算法优化门控循环单元) 目录 时序预测 | MATLAB实现IWOA-GRU和GRU时间序列预测(改进的鲸鱼算法优化门控循环单元)预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现IWOA-GRU和GRU时间序列预测…...

“知识图谱AI教学辅助系统:点亮智慧学习的新灯塔

嘿&#xff0c;各位教育界的小伙伴们&#xff01;今天咱们来聊聊一个超级有料的话题——知识图谱AI教学辅助系统。想象一下&#xff0c;如果有一个智能导师能根据你的需求定制专属的学习路径&#xff0c;还能像百科全书一样随时解答疑问&#xff0c;是不是感觉学习变得更高效、…...

产品 防尘防水IP等级 划分与实验方法

概述&#xff1a; 我们经常听到或看到有关IP防护等级的说法。比如&#xff1a;xx产品的防护级别为IP54&#xff1b;xx产品的防护级别为IP65等等。IP54、IP65是外壳防护等级代码。 一款产品&#xff0c;在实验室内按照GB/T 2421规范对其外壳的防护能力进行实验&#xff0c;并将…...

【微服务】1、引入;注册中心;OpenFeign

微服务技术学习引入 - 微服务自2016年起搜索指数持续增长&#xff0c;已成为企业开发大型项目的必备技术&#xff0c;中高级java工程师招聘多要求熟悉微服务相关技术。微服务架构介绍 概念&#xff1a;微服务是一种软件架构风格&#xff0c;以专注于单一职责的多个响应项目为基…...

01、Docker学习,第一天:简单入门与安装

Docker学习&#xff0c;第一天&#xff1a;简单入门与安装 一、Docker简介 环境配置如此之麻烦&#xff0c;换台机器&#xff0c;重来一次&#xff0c;费事费力。安装的时候&#xff0c;把原始环境一模一样的复制过来。开发人员利用Docker可以消除写作编码时&#xff0c;”在…...

C++STL中iomanip的使用与细节

C标准模板库&#xff08;STL&#xff09;中的<iomanip>头文件提供了一组用于格式化输入输出流的函数和操纵符。这些函数和操纵符可以用来控制输出的布局、精度、宽度等。以下是一些常用的<iomanip>函数及其使用方式&#xff1a; setprecision(n)&#xff1a;设置浮…...

3.C语言变量的基础概念与使用

目录 1.变量名2.变量声明3.变量赋值4.变量作用域 1.变量名 本篇原文为&#xff1a;C语言变量的基础概念与使用 更多C进阶、rust、python、逆向等等教程&#xff0c;可点击此链接查看&#xff1a;酷程网 变量&#xff08;variable&#xff09;可以理解成一块内存区域的名字。…...

Go语言中的逃逸分析:深入浅出

Go语言中的逃逸分析&#xff1a;深入浅出 在Go语言中&#xff0c;逃逸分析&#xff08;Escape Analysis&#xff09;是一个非常重要且强大的编译器优化技术。它帮助编译器决定一个变量是在栈上分配还是在堆上分配&#xff0c;从而影响程序的性能和内存管理。本文将深入探讨Go语…...

【FlutterDart】 拖动改变 widget 的窗口尺寸大小GestureDetector~简单实现(10 /100)

上效果 预期的是通过拖动一条边界线改变窗口大小&#xff0c;类似vscode里拖动效果。这个是简单的拖动实现 上代码&#xff1a; import package:flutter/material.dart;class MyDraggableViewDemo extends StatelessWidget {const MyDraggableViewDemo({super.key});override…...

【论文笔记】LongLoRA: Efficient Fine-tuning of Long-Context Large Language Models

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: LongLoRA: Efficient Fine…...

数据挖掘——朴素贝叶斯分类

数据挖掘——朴素贝叶斯分类 朴素贝叶斯分类极大后验假设独立性假设贝叶斯分类器总结 朴素贝叶斯分类 什么是分类&#xff1f; 找出描述和区分数据类或概念的模型&#xff0c;以便能够使用模型预测未知的对象的类标号 概念区分 分类与回归 分类是预测分类&#xff08;离散、…...

unity中的UI系统---GUI

一、工作原理和主要作用 1.GUI是什么&#xff1f; 即即时模式游戏用户交互界面&#xff08;IMGUI&#xff09;&#xff0c;在unity中一般简称为GUI&#xff0c;它是一个代码驱动的UI系统。 2.GUI的主要作用 2.1作为程序员的调试工具&#xff0c;创建游戏内调测试工具 2.2为…...

鸿蒙Flutter实战:15-Flutter引擎Impeller鸿蒙化、性能优化与未来

Flutter 技术原理 Flutter 是一个主流的跨平台应用开发框架&#xff0c;基于 Dart 语言开发 UI 界面&#xff0c;它将描述界面的 Dart 代码直接编译成机器码&#xff0c;并使用渲染引擎调用 GPU/CPU 渲染。 渲染引擎的优势 使用自己的渲染引擎&#xff0c;这也是 Flutter 与其…...

C语言冒泡排序教程简介

冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;因其工作原理像气泡一样逐渐上浮而得名。其基本思想是通过一轮一轮地比较相邻的元素&#xff0c;将较大的元素逐步“冒泡”到数组的尾部。 在本篇博客中&#xff0c;我们将详细讲解冒泡排序的基本…...

Fabric链码部署测试

参考链接&#xff1a;运行 Fabric 应用程序 — Hyperledger Fabric Docs 主文档 (hyperledger-fabric.readthedocs.io) &#xff08;2&#xff09;fabric2.4.3部署运行自己的链码 - 知乎 (zhihu.com) Fabric2.0测试网络部署链码 - 辉哥哥~ - 博客园 (cnblogs.com) 1.启动测试…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...