JVM oop内存模型

news2024/11/18 12:31:21

一、oop模型

1、非数组对象 InstaceOopDesc

2、数组对象  arrayOopDesc

        2.1 基本数据类型数组 typeArrayOopDesc

        2.2 引用类型数组 objArrayOopDesc

 3、MarkOopDesc

        存放锁信息、分代年龄等

二、对象的内存结构

 对象内存结构分成三大部分

对象头 (64位操作系统)

mark world 占8B

kclass pointer类型指针 

        开启指针压缩(默认)4B

        关闭指针压缩 8B

数组长度 4B

        对象不是数组,占0B

        对象是数组,占4B

实例数据 instance Data

4类8种

boolean 1B

char 2B 0-65535

byte  1B  -128~127(-2的7次方到2的7次方-1)

short 2B -32768~32767(-2的15次方到2的15次方-1)

int 4B -2147483648~2147483647(-2的31次方到2的31次方-1)

long 8B -9223372036854774808~9223372036854774807(-2的63次方到2的63次方-1)

float 4B 3.402823e+38~1.401298e-45

double 8B 1.797693e+308~4.9000000e-324
引用类型
        开启指针压缩4B

        关闭指针压缩8B

对齐填充区域

 填充位数保证是8的整数倍

三、如何计算对象大小

public class A {
    // 普通对象
    int a = 1;
    int b = 2;
    public static void main(String[] args) {
        A a = new A();
    }
}

没实例数据的对象

开启指针压缩

16B = 8B + 4B + 0B + 0B + 4B
关闭指针压缩
16B =8B +8B +0+0+0

普通对象 (数组对象,在关闭指针压缩的情况下会出现两端填充)

开启指针压缩

24 =8B + 4B + 0B + 4*2 +4B
关闭指针压缩
24 =8+8+0+4*2+ 0

四、指针压缩的实现原理

为什么要开启指针压缩为

了节省内存
寻址效率就有所提高

指针压缩的实现原理
两句话
两个信息 :
1、java中所有的对象都是8字节对齐的

2、最后三位是0,存储的时候后三位0抹除,使用时,后三位补0

指针压缩C++代码结构

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考02原码反码和补码

文章目录 前言一、原码二、反码三、补码总结 前言 机器是通过二进制来存储数据的,最好是在学习了软考01进制转换基础上开始学习原码反码和补码。 一、原码 原码通常以固定位数表示,不足补0,由于需要区分正负数所以,最高位为符号位(0为正&…

Electron中启动node服务

记一次遇到的问题,我们知道Electron 中主进程是在node环境中,所以打算在node环境中再启动一个node服务。但是直接使用exec命令启动就会卡主。对应的代码如下 // 启动Node server const startServer async () > {try {console.log(开始启动node serv…

React | 再战Redux

✨ 个人主页:CoderHing 🖥️ React.js专栏:React.js 再战Redux 🙋‍♂️ 个人简介:一个不甘平庸的平凡人🍬 💫 系列专栏:吊打面试官系列 16天学会Vue 7天学会微信小程序 Node专栏…

chatgpt赋能python:下载Python的方法及使用指南

下载Python的方法及使用指南 Python是一种高级编程语言,被广泛应用于各种领域。如果你是一名程序员或者对编程有兴趣,那么学习Python会是一个不错的选择。本文将介绍Python的下载方法,并提供使用Python的基础指南。 Python的下载方法 Pyth…

Istio与Mcp Server服务器讲解与搭建演示

01Istio与外部注册中心 Istio为何需要对接外部注册中心 Istio 对 Kubernetes 具有较强的依赖性: 1.服务发现就是基于 Kubernetes 实现的,如果要使用 Istio,首先需要迁移到 Kubernetes 上,并使用 Kubernetes 的服务注册发现机制…

【数据挖掘】时间序列教程【二】

2.4 示例:颗粒物浓度 在本章中,我们将使用美国环境保护署的一些空气污染数据作为运行样本。该数据集由 2 年和 5 年空气动力学直径小于或等于 3.2017 \(mu\)g/m\(^2018\) 的颗粒物组成。 我们将特别关注来自…

认识GCC

GNU GNU是Linux系统下的一些工具包,GNU是GNU is Not Unix的缩写,因为当年Unix收费后,理查德马修斯托曼打算做一套GNU操作系统,当时GNU的工具包已经写好,就差内核即可组装成一个完整的操作系统,正好Linux写…

跨链 vs 多链

跨链 dApp 可以在部署在多个不同区块链上的多个不同智能合约上运行,而多链 dApp 则可以在不同网络上以多个单独的版本部署。 由于对区块空间的需求不断增加,Web3 应用层现在存在于数百个不同的区块链、二层网络和应用链上。这种现实催生了两个新术语——…

【教程】解决php微擎中的goto加密解密,一键解密工具

今天,我将向大家揭秘一款神奇的工具——goto解密工具,轻松解密这个看似棘手的问题。 无数开发者都曾因为php中的goto功能而头疼不已。goto解密工具其中之一就是解密goto代码。通过精妙的算法和强大的解析能力,它能够解密被goto加密的代码段&…

Vue项目设置网站小徽标

一、预期效果 自定义Vue项目的网站小徽标,用于显示网站的logo,效果大致如下 二、制作 .ico文件 2.1 打开比特虫官网 比特虫官网:https://www.bitbug.net/ 2.2 操作步骤如图 三、引入Vue项目 3.1 将生成的 .ico文件放入我们的 Vue 项目 3.…

servlet+JSP与SpringBoot+Vue项目交互——servlet请求SpringBoot接口

问题 servletJSP与SpringBootVue项目交互——servlet请求SpringBoot接口 详细问题 笔者前一段时间开发一个项目,使用的技术框架是servletJSP,现阶段开发的项目技术框架为SpringBootVue,笔者现在需要输入servletJSP请求SpringBoot接口&…

C语言编程—递归

递归指的是在函数的定义中使用函数自身的方法。 举个例子:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚&…

2024考研408-计算机组成原理第六章-总线学习笔记

文章目录 前言初识总线一、总线概述1.1、总线的概述1.1.1、认识总线1.1.2、设计总线需要的特性1.1.3、总线的分类①按照数据传输格式分(串行、并行)②按照总线功能连接的总线(片内总线、系统总线、通信总线)③按照时序控制方式&am…

css新特性(五)

css基础(一)css基础(一)_上半场结束,中场已休息,下半场ing的博客-CSDN博客Emmet语法Emmet语法_上半场结束,中场已休息,下半场ing的博客-CSDN博客css基础(二)c…

Retrofit注解

1. 注解类型 Retrofit路径结合的规则 2. 网络请求方法 2.1 Get请求 完整地址:http://mock-api.com/2vKVbXK8.mock/getUserInfo?iduserid 2.1.1 Query 创建Retrofit实例必须传入baseurl(http://mock-api.com/2vKVbXK8.mock/),在GET("getUserIn…

Android跨平台语言分析

跨平台技术发展的三个阶段 第一阶段是混合开发的web容器时代 为了解决原生开发的高成本、低效率,出现了Hybrid混合开发原生中嵌入依托于浏览器的WebViewWeb浏览器中可以实现的需求在WebView中基本都可以实现但是Web最大的问题是,它的性能和体验与原生开发…

Mybatis面试题--MyBatis执行流程

首先我们知道Mybatis是目前最流行的持久层框架,当我们了解了执行流程,可以让我们理解各个组件的关系,以及Sql的执行过程(参数映射、sql解析、执行和结果处理) 1首先我们需要读取框架的核心配置文件 2接下来我们就要去操…

chatgpt赋能python:Python编程的好玩儿之处:介绍几个有趣的Python程序

Python编程的好玩儿之处:介绍几个有趣的Python程序 Python已经成为了一种非常受欢迎的编程语言,除了其在Web开发和数据科学领域的应用,它还能够完成很多好玩儿的事情!接下来,我将介绍几个有趣的Python程序&#xff0c…

【零基础入门学习Python---Python多线程和多进程】

🚀 Python 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

基于SpringBoot+vue前后端分离的相机销售系统

文章目录 项目介绍主要功能截图:首页相机详情个人中心 部分代码展示设计总结项目获取方式 🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你…