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

JVM-指针压缩

1. 关键前提

  • 对象地址对齐:JVM中所有对象地址按8字节对齐(最低3位必为000
  • 32GB堆内存范围0x000000000 ~ 0x7FFFFFFFF(35位地址空间)
  • 压缩目标:将64位指针压缩为32位存储

2. 32GB堆最大地址的二进制分析

(1)最大64位地址(32GB边界)

十六进制:0x7FFFFFFFF   
完整二进制:   
0000 0000 0000 0000 0000 0000 0111 1111 1111 1111 1111 1111 1111 1111 1111 1000   
(实际有效35位:第0-34位)

(2)关键特征

有效地址部分:111 1111 1111 1111 1111 1111 1111 1111 1111 1000(35位)   
对齐特征:_______________________________↑↑↑固定为000(3位)

3. 压缩过程(64位→32位)

(1)右移3位(丢弃对齐位)

原始地址:111 1111 1111 1111 1111 1111 1111 1111 1111 1000   
右移3位:  000 1111 1111 1111 1111 1111 1111 1111 1111 1111   

(2)截取低32位

截取结果:1111 1111 1111 1111 1111 1111 1111 1111(0xFFFFFFFF)
存储内容:32位压缩指针 = 0xFFFFFFFF

4. 解压过程(32位→64位)

(1)左移3位(恢复对齐位)

压缩指针:1111 1111 1111 1111 1111 1111 1111 1111   
左移3位:1111 1111 1111 1111 1111 1111 1111 1111 1000   

(2)补零扩展至64位

最终地址:0000 0000 0000 0000 0000 0000 0111 1111 1111 1111 1111 1111 1111 1111 1111 1000= 0x000000007FFFFFFFF(原始地址)

5. 关键点总结

  1. 为什么是3位?

    • 8字节对齐 ⇒ 地址是8的倍数 ⇒ 二进制末尾3位=​000​ ⇒ 这3位无需存储。
  2. 32位如何覆盖35位空间?

    • 压缩后32位的每个单位实际代表8字节(因为左移3位相当于 ​×8​),因此总地址空间为:

  1. 2^32×8=2^35=32GB

32位能表示的地址个数为:2^32=4G

每个地址8字节对齐:4G*8 =32G

问题:不右移已经能表示32G内存了,为什么还要右移?

操作目的数学本质硬件支持优势
右移3位将字节地址转换为块索引物理地址 ÷ 8取代低速除法指令
左移3位将块索引还原为物理地址块索引 × 8匹配CPU缓存行

http://www.xdnf.cn/news/19418.html

相关文章:

  • Day 01(02): 精读HDFS概念
  • PortSwigger靶场之DOM XSS in document.write sink using source location.search通关秘籍
  • 多线程使用场景一(es数据批量导入)
  • 使用node-red+opencv+mqtt实现相机图像云端查看
  • 【openGauss】Oracle与openGauss/GaussDB数据一致性高效核对方案
  • 解决Docker运行hello-world镜像报错问题
  • 烦人的Nano 编辑器,如何退出呢?
  • 【Java后端】SpringBoot配置多个环境(开发、测试、生产)
  • Python|Pyppeteer解决无法启动Chromium浏览器的问题(35)
  • 云网络(参考自腾讯云计算工程师认证)
  • MySQL服务启动命令手册(Linux+Windows+macOS)(下)
  • CAD2024安装包下载与安装详细教程
  • Marco:阿里国际推出的商用翻译大模型,支持15种语言,效果超越谷歌、GPT-4
  • Overleaf中文显示
  • AI 相关内容:Agent、MCP、Prompt 与 RAG 入门指南
  • tkinter布局
  • 鸿蒙应用开发:开机自启并自检网络状态
  • docker,数据卷
  • Flink部署实战:从入门到优化
  • Linux基本工具(yum、vim、gcc、Makefile、git、gdb)
  • 【模型训练篇】VeRL分布式基础 - 框架Ray
  • 解决 uni-app 中大数据列表的静默UI渲染失败问题
  • Q1 Top IF 18.7 | 基于泛基因组揭示植物NLR进化
  • C语言强化训练(2)
  • 生物学自然主义:心灵哲学中的生物性探索
  • 编程与数学 03-004 数据库系统概论 11_数据库的维护
  • 线阵相机和镜头选型案例介绍
  • 雪花算法是什么,时钟回拨问题怎么解决?
  • 第2章 MySQL的调控按钮-启动选项和系统变量
  • React 状态管理演进之路:从 Dva 到现代架构