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

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)
boolean1
byte1
short1
char2
int4
float4
long8
double8
Boolean4
Byte4
Short4
Character4
Integer4
Float4
Long4
Double4
代码
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对象内存布局详解。 相关文章在此总结如下&#xff1a; 文章地址jvm基本知识地址jvm类加载系统地址双亲委派模型与打破双亲委派地址运行时数据区地址运行时数…...

U-boot(一):Uboot命令和tftp

本文主要基于S5PV210探讨uboot。 uboot 部署&#xff1a;uboot(180~400K的裸机程序)在Flash(可上电读取)、OS在FLash(nand) 启动过程&#xff1a;上电后先执行uboot、uboot初始化DDR和Flash,将OS从Flash中读到DDR中启动OS,uboot结束 特点&#xff1a;…...

代码随想录算法训练营第五十三天丨 动态规划part14

1143.最长公共子序列 思路 本题和动态规划&#xff1a;718. 最长重复子数组 (opens new window)区别在于这里不要求是连续的了&#xff0c;但要有相对顺序&#xff0c;即&#xff1a;"ace" 是 "abcde" 的子序列&#xff0c;但 "aec" 不是 &quo…...

pdf增强插件 Enfocus PitStop Pro 2022 mac中文版功能介绍

Enfocus PitStop Pro mac是一款 Acrobat 插件&#xff0c;主要用于 PDF 预检和编辑。这个软件可以帮助用户检查和修复 PDF 文件中的错误&#xff0c;例如字体问题、颜色设置、图像分辨率等。同时&#xff0c;Enfocus PitStop Pro 还提供了丰富的编辑工具&#xff0c;可以让用户…...

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 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度学习车牌识别系统实现 该项目较…...

即时通讯技术文集(第23期):IM安全相关文章(Part12) [共15篇]

为了更好地分类阅读 52im.net 总计1000多篇精编文章&#xff0c;我将在每周三推送新的一期技术文集&#xff0c;本次是第23 期。 [- 1 -] 理论联系实际&#xff1a;一套典型的IM通信协议设计详解&#xff08;含安全层设计&#xff09; [链接] http://www.52im.net/thread-283-…...

为什么UI自动化难做?—— 关于Selenium UI自动化的思考

在快速迭代的产品、团队中&#xff0c;UI自动化通常是一件看似美好&#xff0c;实际“鸡肋”&#xff08;甚至绝大部分连鸡肋都算不上&#xff09;的工具。原因不外乎以下几点&#xff1a; 1 效果有限 通常只是听说过&#xff0c;就想去搞UI自动化的团队&#xff0c;心里都认…...

Python小白之“没有名称为xlwings‘的模块”

题外话&#xff1a;学习和安装Python的第一个需求就是整理一个Excel&#xff0c;需要读取和写入Excel 背景&#xff1a;取到的模板代码&#xff0c;PyCharm本地运行报错&#xff1a;没有名称为xlwings的模块 解决办法&#xff1a;这类报模板找不到的错&#xff0c;即是模块缺…...

RK3588 学习教程1——获取linux sdk

上手rk3588前&#xff0c;需要先拥有一块开发板&#xff0c;这样可以少走很多弯路。个人推荐买一块itx3588j的板子。挺好用&#xff0c;接口丰富&#xff0c;可玩性高。 sdk可以直接在firefly官网下载&#xff0c;不用管什么版本&#xff0c;下载下来后直接更新即可&#xff0…...

保护您的Google账号安全:检查和加固措施

简介&#xff1a;随着我们在日常生活中越来越依赖于Google账号&#xff0c;我们的个人信息和敏感数据也变得越来越容易受到威胁。为了确保您的Google账号的安全性&#xff0c;本文将介绍一些简单但有效的方法&#xff0c;帮助您检查和加固您的Google账号。 --- 在数字时代&am…...

「Verilog学习笔记」优先编码器Ⅰ

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 分析编码器的功能表&#xff1a; 当使能El1时&#xff0c;编码器工作&#xff1a;而当E10时&#xff0c;禁止编码器工作&#xff0c;此时不论8个输入端为何种状态&…...

java实现TCP通信(socket)服务端-客户端

我在写的时候&#xff0c;我的需求就很简单&#xff0c;写一个服务端&#xff0c;去让别人进行请求&#xff0c;借鉴了很多聊天室什么的&#xff0c;越搞越复杂。 期间也使用到了 BufferedReader中readLine&#xff08;&#xff09;方法&#xff0c;进行获取客户端传来的数据&…...

企业信息模糊搜索API的使用及应用场景

前言 随着企业数据的不断增加&#xff0c;如何高效地搜索和管理这些数据成为了企业管理者关注的重要问题。而企业信息模糊搜索API的出现&#xff0c;为企业提供了一种高效的解决方案。本文将介绍企业信息模糊搜索API的使用及应用场景。 一、什么是企业信息模糊搜索API&#x…...

.net6+aspose.words导出word并转pdf

本文使用net6框架&#xff0c;aspose.word破解激活并兼容net6&#xff0c;导出word模板并兼容识别html并给其设置字体&#xff0c;前端直接浏览器下载&#xff0c;后端保存文件并返回文件流&#xff0c;还有批量导出并压缩zip功能 1、安装Aspose.Words的nuget包选择21.8.0 版本…...

深度学习 植物识别算法系统 计算机竞赛

文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核&#xff0c;池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集…...

《深入浅出进阶篇》洛谷P4147 玉蟾宫——悬线法dp

上链接&#xff1a;P4147 玉蟾宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P4147 上题干&#xff1a; 有一个NxM的矩阵&#xff0c;每个格子里写着R或者F。R代表障碍格子&#xff0c;F代表无障碍格子请找出其中的一个子矩阵&#xff0c…...

社区论坛小程序源码系统,功能齐全,页面简洁,前端+后端+完整部署教程

现如今&#xff0c;社区论坛已经成为人们交流思想&#xff0c;分享经验&#xff0c;获取信息的重要平台。近年来&#xff0c;小程序的出现更是改变了传统的网站建设方式&#xff0c;让用户体验更加便捷&#xff0c;高效。今天源码小编来和大家分享一款社区论坛小程序源码系统&a…...

大数据开发面试(一)

1、Kafka 和 Flume 的应用场景&#xff1f; Kafka 和 Flume 的应用场景如下&#xff1a; Kafka&#xff1a;定位消息队列&#xff0c;适用于多个生产者和消费者共享一个主题队列的场景。适用于需要高吞吐量、可扩展性和容错能力的场景。主要用于大数据处理、实时数据流分析和日…...

softmax的高效CUDA编程和oneflow实现初步解析

本文参考了添加链接描述,其中oneflow实现softmax的CUDA编程源代码参考链接添加链接描述 关于softmax的解读以及CUDA代码实现可以参考本人之前编写的几篇文章添加链接描述,添加链接描述,添加链接描述 下面这个图片是之前本人实现的softmax.cu经过接入python接口,最终和pytor…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...