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

深入了解一波JVM内存模型

深入了解一波JVM内存模型

JDK体系结构与跨平台特性介绍

image-20250924182234479

通过官方的结构图看出,JVM提供底层的平台支持,JRE提供运行环境所必须的类,在这个基础上去跑我们的java程序。JVM为我们屏蔽了操作系统的差异性,使java程序得以跨平台执行。

image-20250924182742292

JVM内存模型深度剖析

image-20250925093257668

梳理一下过程

  1. 类加载子系统将类加进来
  2. 验证字节码是否是否符合规范
  3. 准备阶段:为静态变量赋初值
  4. 解析阶段:符号引用(类名、方法名等)转换为直接引用(内存地址--》静态链接)
  5. 初始化阶段:给静态变量赋予指定的值,执行静态代码块,初始化父类等
  6. 线程调用具体方法

线程调用方法过程

  1. 线程栈是先入后出的(FILO),后调用的方法执行完才会返回执行前面的方法
  2. 线程栈内部:
    1. 局部表量表存入具体的变量(a、b、c等)
    2. 操作数栈执行具体的计算(10+20,非a+b)
    3. 动态链接指向常量池(元空间),符号引用--》内存地址(方法调用)
    4. 由方法出口跳转到后面的方法栈
  3. 程序执行过程中,由程序计数器记录线程执行到哪了
  4. 执行引擎一边执行,一边记录着当前执行的位置

一些空间结构

  1. 线程栈、本地方法栈、程序计数器都是线程独有的,独占的
  2. 堆、元空间,属于大家共有的空间
  3. 堆中包含所有对象,包括class字节码对象
  4. 元空间包含常量池、静态变量、类元信息(类似C语言结构体,并非字符串之类的)
  5. 元空间占用的是直接物理内存,不做限制可能撑爆整个内存空间

元空间核心 JVM 参数

image-20250925104201575

Spring Boot程序的JVM参数设置格式(Tomcat启动直接加在bin目录下catalina.sh文件里):

-XX:MetaspaceSize=256M  # 元空间触发Full GC的初始阈值
-XX:MaxMetaspaceSize=256M  # 元空间的最大容量限制
  1. -XX:MetaspaceSize
    • 作用:设置元空间触发 Full GC 的初始阈值(元空间无固定初始大小)。
    • 默认值:约 21M。当元空间使用量达到此值时,会触发 Full GC 并卸载无用类,同时 JVM 会根据 GC 释放的空间动态调整该阈值(不超过MaxMetaspaceSize)。
  2. -XX:MaxMetaspaceSize
    • 作用:限制元空间的最大容量。
    • 默认值:-1(不限制,仅受本地内存大小约束)。
  3. 最佳实践
    • 建议将两个参数设置为相同值(如 256M),避免 JVM 动态调整元空间大小时频繁触发 Full GC(Full GC 成本高)。
    • 对于 8G 物理内存的机器,256M 是较合理的初始配置,可根据应用实际类加载情况(如大量动态生成类)适当调大。
java -Xms2048M -Xmx2048M -Xmn1024M -Xss512K \-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M \-jar microservice-eureka-server.jar
http://www.zskr.cn/news/11756.html

相关文章:

  • CCPC2024-Zhengzhou G Same Sum(线段树)
  • CDN中使用边缘函数实现自定义编程
  • 敏捷开发的几个阶段
  • 实战:基于 BRPC+Etcd 打造轻量级 RPC 服务 —— 从注册到调用的完整实现 - 教程
  • 【2025最新】ArcGIS 点聚合功能实现全教程(进阶版) - 实践
  • 徐霞客的《青云志》
  • 运营商 API 安全最佳实践、案例与方案推荐(2025)|千万级接口的全链路实战
  • 使用trace进行排查网络瓶颈
  • JavaEE 导读与环境配置 - 实践
  • 实用指南:uniapp x鸿蒙开发之运行到鸿蒙模拟器
  • Redis 监听过期Key - 指南
  • 为什么我选择了 PSM 敏捷认证?
  • 编写msyql8.0.21 数据库批量备份脚本
  • ArcGIS 不重叠且无缝的拓扑检查和修改
  • 2025/9/25
  • 读书笔记:揭开索引的两个常见误区
  • 获取用户ip所在城市
  • 完整教程:JRE、JDK、JVM 及 JIT 之间有什么不同?
  • 微波雷达模块在智能家居中的具体应用案例有哪些?
  • 三分
  • 完整教程:微服务基础2-网关路由
  • nginx ipv6 proxy配置
  • (三)数仓人必看!ODS 到 DWS 各层设计规范全解析,含同步/存储/质量核心要点
  • 【shell】系统资源不足fork: retry: Resource temporarily unavailable
  • 【语文训练】女乃龙?田力乃龙?
  • 抖动分为3个方面
  • 关于ubuntu 用户切换的细节 su - user 和su user
  • 用 SeaTunnel 同步 MySQL 到 Doris:全量增量 + SQL 过滤
  • 在CodeBolcks下wxSmith的C++编程教程——使用自定义绘制和鼠标处理创建项目
  • 10_ select/poll/epoll实现服务端的io多路复用