JVM 指针压缩

运用java内存对齐填充,对java内存进行8字节划分,java对象指针映射到每个划分区域上,使得4个字节(32位)表示2^32个地址,从而使4个字节指针映射32G内存空间。

1.为什么进行指针压缩:

  • jvm从32位变为64位,内存带宽也增加了一倍,原来32位存储一个变量,现在可以使用64位存储,无形中浪费了大量空间。占用较大带宽,同时GC也会承受较大压力。
  • .为了减少64位平台下内存的消耗,启用指针压缩功能
  • 在jvm中,32位地址最大支持4G内存(2的32次方),可以通过对对象指针的压缩编码、解码方式进行优化,使得jvm 只用32位地址就可以支持更大的内存配置(小于等于32G)
  • 堆内存小于4G时,不需要启用指针压缩,jvm会直接去除高32位地址,即使用低虚拟地址空间
  • 堆内存大于32G时,压缩指针会失效,会强制使用64位(即8字节)来对java对象寻址,这就会出现1的问题,所以堆内 存不要大于32G为好

2.开启关闭对象指针压缩

jdk1.6 update14开始,在64bit操作系统中,JVM支持指针压缩。

  • 启用指针压缩:-XX:+UseCompressedOops(默认开启)
  • 禁止指针压缩:-XX:-UseCompressedOops

对象大小可以用jol-core包查看,引入依赖

implementation group: 'org.openjdk.jol', name: 'jol-core', version: '0.9'

package com;import org.openjdk.jol.info.ClassLayout;public class JOLSample {public static  void  main(String[] args){ClassLayout layout = ClassLayout.parseInstance(new Object());System.out.println(layout.toPrintable());System.out.println();ClassLayout layout1 = ClassLayout.parseInstance(new int[]{});System.out.println(layout1.toPrintable());System.out.println();ClassLayout layout2 = ClassLayout.parseInstance(new A());System.out.println(layout2.toPrintable());}public static class A {int id;String name;byte b;Object o;}
}

配置关闭指针压缩,打印:

# WARNING: Unable to get Instrumentation. Dynamic Attach failed. You may add this JAR as -javaagent manually, or supply -Djdk.attach.allowAttachSelf
java.lang.Object object internals:OFFSET  SIZE   TYPE DESCRIPTION                               VALUE0     4        (object header)                           05 00 00 00 (00000101 00000000 00000000 00000000) (5)4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)8     4        (object header)                           50 1f c4 30 (01010000 00011111 11000100 00110000) (818159440)12     4        (object header)                           a0 01 00 00 (10100000 00000001 00000000 00000000) (416)
Instance size: 16 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total[I object internals:OFFSET  SIZE   TYPE DESCRIPTION                               VALUE0     4        (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)8     4        (object header)                           10 0c c4 30 (00010000 00001100 11000100 00110000) (818154512)12     4        (object header)                           a0 01 00 00 (10100000 00000001 00000000 00000000) (416)16     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)20     4        (alignment/padding gap)                  24     0    int [I.<elements>                             N/A
Instance size: 24 bytes
Space losses: 4 bytes internal + 0 bytes external = 4 bytes totalcom.JOLSample$A object internals:OFFSET  SIZE               TYPE DESCRIPTION                               VALUE0     4                    (object header)                           05 00 00 00 (00000101 00000000 00000000 00000000) (5)4     4                    (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)8     4                    (object header)                           08 78 45 32 (00001000 01111000 01000101 00110010) (843413512)12     4                    (object header)                           a0 01 00 00 (10100000 00000001 00000000 00000000) (416)16     4                int A.id                                      020     1               byte A.b                                       021     3                    (alignment/padding gap)                  24     8   java.lang.String A.name                                    null32     8   java.lang.Object A.o                                       null
Instance size: 40 bytes
Space losses: 3 bytes internal + 0 bytes external = 3 bytes total

开启指针压缩

# WARNING: Unable to get Instrumentation. Dynamic Attach failed. You may add this JAR as -javaagent manually, or supply -Djdk.attach.allowAttachSelf
java.lang.Object object internals:OFFSET  SIZE   TYPE DESCRIPTION                               VALUE0     4        (object header)                           05 00 00 00 (00000101 00000000 00000000 00000000) (5)4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)8     4        (object header)                           00 10 00 00 (00000000 00010000 00000000 00000000) (4096)12     4        (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total[I object internals:OFFSET  SIZE   TYPE DESCRIPTION                               VALUE0     4        (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)8     4        (object header)                           10 0c 00 00 (00010000 00001100 00000000 00000000) (3088)12     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)16     0    int [I.<elements>                             N/A
Instance size: 16 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes totalcom.JOLSample$A object internals:OFFSET  SIZE               TYPE DESCRIPTION                               VALUE0     4                    (object header)                           05 00 00 00 (00000101 00000000 00000000 00000000) (5)4     4                    (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)8     4                    (object header)                           a8 e9 0d 00 (10101000 11101001 00001101 00000000) (911784)12     4                int A.id                                      016     1               byte A.b                                       017     3                    (alignment/padding gap)                  20     4   java.lang.String A.name                                    null24     4   java.lang.Object A.o                                       null28     4                    (loss due to the next object alignment)
Instance size: 32 bytes
Space losses: 3 bytes internal + 4 bytes external = 7 bytes total

通过指针压缩,类型指针、对象引用等由8字节转为4个字节。降低对象占用的内存大小,顺便减轻GC压力;当指针移动时,减少带宽损耗。


在这里插入图片描述

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

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

相关文章

【全开源】Java代驾小程序APP代驾跑腿源码微信小程序代驾源码

&#x1f697;代驾小程序&#xff1a;便捷、安全的出行新选择 一、引言&#xff1a;出行新风尚 在如今繁忙的都市生活中&#xff0c;出行问题一直是人们关注的焦点。代驾小程序的出现&#xff0c;为我们提供了一种便捷、安全的出行新选择。无论是酒后不能驾车&#xff0c;还是…

开放式虚拟化格式1.0和2.0有什么区别

开放式虚拟化格式&#xff08;Open Virtualization Format&#xff0c;简称OVF&#xff09;是一种用于描述、打包、和分发虚拟机的标准格式。OVF 1.0和OVF 2.0是这个标准的两个不同版本。以下是它们之间的一些主要区别&#xff1a; 1. **扩展性**&#xff1a; - OVF 1.0主要…

牛客网刷题 | BC116 [NOIP2013]记数问题

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 试计算在区间1 到n…

深度学习之动量momentum介绍

本章节将介绍深度学习中动量的相关概念和应用。 1. 动量的基本原理 动量是一种用于加速梯度下降的技术。 它通过累积过去梯度的指数加权平均来计算当前更新方向。 这样可以增强梯度下降的稳定性,加快收敛速度。 2. 动量的数学公式 动量更新公式为:v γv - η∇L(θ) 其中v是…

LeetCode:环形链表II

文章收录于LeetCode专栏 LeetCode地址 环形链表II 题目 给定一个链表&#xff0c;返回链表开始入环的第一个节点。如果链表无环&#xff0c;则返回null。   为了表示给定链表中的环&#xff0c;我们使用整数pos来表示链表尾连接到链表中的位置&#xff08;索引从0开始&#…

安防监控视频平台LntonCVS视频监控汇聚平台遏制校园暴力保护校园学生安全应用方案

未成年人被誉为祖国的花朵&#xff0c;是我们国家的未来。然而&#xff0c;最近频繁曝出的未成年霸凌事件却引发了社会的广泛关注。这些事件手段残忍&#xff0c;事态恶劣&#xff0c;引发了全社会对如何保护未成年身心健康、规避霸凌事件发生的深刻思考。 为了更好地保障学生的…

使用软件分享--剪映(不需要会员版)剪映 Jianying_pro_3_2_0_8778_beta9_jianyingpro_beta(Windows)

专栏介绍&#xff1a;本专栏主要分享一些实用的软件&#xff08;Po Jie版&#xff09;&#xff1b; 声明1&#xff1a;软件不保证时效性&#xff1b;只能保证在写本文时&#xff0c;该软件是可用的&#xff1b;不保证后续时间该软件能一直正常运行&#xff1b;不保证没有bug&am…

深度学习中多模态的融合策略

在深度学习中&#xff0c;多模态&#xff08;multimodal&#xff09;融合策略用于集成来自不同模态的数据&#xff0c;以提升模型的性能和泛化能力。多模态数据可以包括文本、图像、音频、视频、传感器数据等&#xff0c;通过有效融合这些不同类型的数据&#xff0c;能够从中提…

Java中的大小顶堆的实现方式

在java中没有一个现成的大小顶堆的数据结构&#xff0c;但可以用PriorityQueue类代替。 PriorityQueue默认是升序的&#xff0c;因此可以模拟小顶堆最小值始终在队列的最前面&#xff0c;如果要模拟大顶堆&#xff0c;需要重新定义Comparator方法&#xff1a; PriorityQueue&l…

深度学习-06-手动进行反向传播

深度学习-06-手动进行反向传播 本文是《深度学习入门2-自製框架》 的学习笔记&#xff0c;记录自己学习心得&#xff0c;以及对重点知识的理解。如果内容对你有帮助&#xff0c;请支持正版&#xff0c;去购买正版书籍&#xff0c;支持正版书籍不仅是尊重作者的辛勤劳动&#xf…

CentOS镜像源配置

CentOS镜像源配置 1. 基础镜像源配置 1.1 简介 CentOS&#xff0c;是基于Red Hat Linux提供的可自由使用源代码的企业级Linux发行版本&#xff1b;是一个稳定&#xff0c;可预测&#xff0c;可管理和可复制的免费企业级计算平台。 下载地址: https://mirrors.aliyun.com/ce…

【网关】工业智能网关-02

一 公司简介 保定飞凌嵌入式技术有限公司始于2006年&#xff0c;是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业&#xff0c;是国内最早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累&#xff0c;公司拥有业内一流的软硬件研发团队&#xff0c;在北京…

执行shell脚本时为什么要写成./test.sh,而不是test.sh?

一定要写成 ./test.sh&#xff0c;而不是 test.sh 运行其它二进制的程序也一样&#xff01; 直接写 test.sh&#xff0c;linux 系统会去 PATH &#xff08;系统环境&#xff09;里寻找有没有叫 test.sh 的&#xff01; 而只有 /bin, /sbin, /usr/bin&#xff0c;/usr/sbin 这…

SuperMap GIS基础产品FAQ集锦(20240603)

一、SuperMap iDesktopX 问题1&#xff1a;请教一下&#xff0c;桌面把火星坐标系的数据投影转换为4326坐标系数据如何才能没有偏移呢&#xff1f; 11.1.1 【解决办法】可以使用iDesktopX提供的“电子地图坐标转换”插件实现对火星坐标系数据的纠偏。 问题2&#xff1a;请教…

堆排序pta

UML&#xff08;Unified Modeling Language&#xff09;类图是面向对象设计&#xff08;OOD&#xff09;中常用的一种图表&#xff0c;用于描述系统中的类、接口、以及它们之间的关系。下面是一个简单的步骤&#xff0c;指导你如何绘制UML类图&#xff1a; 确定类和接口&#…

麦肯锡:ChatGPT等生成式AI应用激增,大中华区增长最快

全球顶级咨询公司麦肯锡&#xff08;McKinsey & Company&#xff09;在官网发布了《he state of AI in early 2024:Gen AI adoption spikes and starts to generate value》&#xff0c;一份关于生成式AI应用的调查报告。 麦肯锡对多个国家/地区的1,363位管理者进行了调查…

前端表单校验完成之后,点击确认功能无反应FormInstance, FormRules

**产生原因&#xff1a;可能是在el-form 中添加的ref 前面加了“&#xff1a;”&#xff0c;也可能是ref中的值写错了** FormInstance, FormRules

海外仓平台系统选择指南:中小海外仓如何选到经济实惠的WMS系统

对于中小海外仓来说&#xff0c;选择一套性价比高、功能又比较齐全的系统还是很关键的&#xff0c;这直接关系到海外仓的运转效率和盈利能力。 今天我们就来探讨一下&#xff0c;针对中小海外仓这个群体&#xff0c;要怎么才能选到经济实惠又功能齐全的wms系统。 1、性价比—…

JavaScript错误;调试;“=”,“==”,“===”的区别

try...catch语句 try..catch语句是JavaScript中用来处理异常的一种方式。它允许我们在代码块中尝试执行可能会引发错误的代码&#xff0c;并在发生错误时捕获并处理异常。 下面是try..catch语句的基本语法&#xff1a; try {// 可能会引发错误的代码 } catch (error) {// 处理…

【Microelectronic Systems】

PART1 嵌入式系统概述与玩转mbed 1 嵌入式系统&#xff0c;微控制器&#xff0c;与ARM 1.1什么是嵌入式系统&#xff1f; 微处理器不仅仅存在于通用计算机中&#xff0c;也可以安置在一些不需要计算的设备内部&#xff0c;比如洗衣机&#xff0c;摄像机。微处理器常常可以控制…