讲师中心 微信公众号
AI工具推荐 视频效率加速

JVM 内存模型和物理内存之间怎么映射

风芳同学_7163

风芳同学_7163

发布时间:2026-09-15 12:50:35

|

316人浏览过

|

来源于php中文网

原创

JVM内存模型是逻辑分区与物理分配分离的调度策略:堆区虚拟连续、物理页按需分配;元空间用本地内存,由NMT跟踪已提交物理页;线程栈和程序计数器私有,物理页写时分配;对象布局对齐缓存行以提升硬件效率。

jvm 内存模型和物理内存之间怎么映射

JVM内存模型不是物理内存的直接镜像,而是运行时对物理资源的逻辑组织与调度策略。它通过操作系统内核、CPU分页机制和JVM自身参数协同完成映射,关键在于“逻辑分区”与“物理分配”分离。

堆区:虚拟地址连续,物理页按需落地

堆是JVM最大内存区域,由-Xms/-Xmx指定大小,但初始只申请虚拟地址空间(如mmap匿名映射),不立即占用真实物理内存。真正分配物理页发生在对象首次写入时(缺页中断触发)。可用pmap -x <pid>查看进程虚拟内存布局,其中[ anon ]段即为堆映射;RSS列才反映实际占用的物理内存页数。

  • 小对象分配走TLAB(线程本地分配缓冲),减少锁竞争,也影响物理页访问局部性
  • 大对象(>-XX:PretenureSizeThreshold)直接进入老年代,可能跨多个物理页,增加TLB压力
  • 启用-XX:+UseTransparentHugePages后,内核会尽量用2MB大页承载堆内存,降低页表查询开销

元空间:直接使用本地内存,绕过JVM堆管理

Java 8+废弃永久代,改用元空间存放类元数据(Klass、常量池、方法字节码等),其内存来自本地堆(malloc/new),不受-Xmx限制,但受系统虚拟内存总量制约。元空间物理内存不经过JVM GC管理,而是由NativeMemoryTracking(NMT)跟踪:

  • 启动时加-XX:NativeMemoryTracking=detail
  • 运行中执行jcmd <pid> VM.native_memory summary scale=MB,观察metaspace行的committed值——这才是已落地的物理内存
  • 元空间增长会触发类卸载,但卸载失败(如ClassLoader被引用)会导致物理内存持续累积

栈与程序计数器:线程私有,物理页写时分配

每个Java线程对应一个OS线程,其栈由操作系统在创建线程时分配,默认-Xss1M(64位Linux下)。注意:这个1MB只是虚拟地址预留,实际物理内存仅在栈帧压入并写入数据时才分配页。程序计数器更轻量,通常位于线程控制块(TCB)中,几乎不占额外物理内存。

  • 高并发场景若线程数达数千,即使未压满栈,虚拟地址空间也可能耗尽(尤其32位环境)
  • 栈溢出(StackOverflowError)是虚拟地址越界,而线程创建失败(OutOfMemoryError: unable to create new native thread)多因物理内存或ulimit限制
  • CPU缓存友好性:栈天然具备空间局部性,连续访问利于L1/L2缓存命中

对象布局与硬件对齐:从字节到缓存行的真实映射

一个普通对象(如new Object())在物理内存中并非紧凑排列。启用压缩指针(-XX:+UseCompressedOops,默认开启≤32GB堆)时,对象头含8B Mark Word + 4B Klass Pointer,再加填充字节(padding)确保整体大小为8B整数倍——这是为了对齐CPU缓存行(通常64B),避免伪共享(false sharing)。

  • 字段重排序:JVM可能调整实例字段顺序,把long/double放前面,提升内存填充效率
  • 数组对象额外含4B length字段,且元素从8B偏移开始(对象头之后),影响批量读取的缓存预取效果
  • 用jol-cli工具可精确输出对象在内存中的起始偏移、各字段位置及总大小,验证是否跨缓存行

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

80

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

40

2026.09.23

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

20

2026.09.23

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

20

2026.09.22

Conan二进制包配置指南
Conan二进制包配置指南

本专题介绍Conan根据操作系统、编译器、架构和构建类型生成二进制包的方法,讲解Profile、Settings、Options及Package ID的作用,帮助管理不同平台和编译环境下的包版本。

40

2026.09.22

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

40

2026.09.22

loomy官网入口地址合集
loomy官网入口地址合集

本专题汇总了 Loomy 桌面 AI 助理的官方入口地址合集及使用指南。提供 macOS 与 Windows 客户端下载 。Loomy 是讯飞推出的桌面级 AI 工作搭子,支持文件整理、数据分析、网页操作及通过飞书/钉钉远程操控电脑,助你高效完成本地办公任务 。

40

2026.09.22

NumPy常见函数使用方法
NumPy常见函数使用方法

本专题整理 NumPy 常见函数使用方法相关教程,覆盖函数大全、参数用法、数组运算、统计聚合、排序处理、where 条件筛选、linspace 创建数列等常用场景,帮助读者快速掌握 NumPy 函数调用思路和实际数据处理技巧。

60

2026.09.22

NumPy性能优化版本更新与常见报错排查
NumPy性能优化版本更新与常见报错排查

本专题整理 NumPy 性能优化、版本更新与常见报错排查相关教程,覆盖向量化计算、广播性能、内存布局、NumPy 2.0 升级、版本兼容冲突、安装导入报错、dtype 溢出、矩阵运算异常和 broadcasting 报错修复,帮助读者系统掌握 NumPy 性能调优与问题定位方法。

80

2026.09.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn