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

JVM 03

今天是2025/03/24 15:21 day 11

总路线请移步主页Java大纲相关文章

今天进行JVM 5,6 个模块的归纳

首先是JVM的相关内容概括的思维导图

5. 优化技术

JVM通过多种优化技术提升程序执行效率,核心围绕热点代码检测编译优化实现动态性能提升。

热点代码检测

JVM通过统计代码执行频率识别“热点代码”(频繁执行的代码段),触发即时编译(JIT)优化:

  1. 方法调用计数器

    • 统计方法被调用的次数。

    • 默认阈值:客户端模式(C1编译器)1500次,服务端模式(C2编译器)10000次。

    • 超过阈值后,JIT编译器将方法编译为本地机器码,替换解释执行。

  2. 回边计数器

    • 统计循环体(如forwhile)的循环次数(“回边”指跳转到循环起始的指令)。

    • 触发标准:默认阈值与模式相关(例如C1为13995次)。

    • 达到阈值后,JIT会编译整个循环或方法,优化循环性能(如循环展开)。

编译优化

JIT编译器对热点代码进行深度优化,关键技术包括:

  1. 方法内联(Inlining)

    • 将小方法的调用替换为方法体代码,消除方法调用的栈帧开销。

    • 例如:a() { b(); } → 直接展开b()的代码到a()中。

    • -XX:MaxInlineSize参数控制(默认35字节以下方法可内联)。

  2. 逃逸分析(Escape Analysis)

    • 分析对象的作用域是否“逃逸”出方法或线程:

      • 未逃逸:对象仅在方法内使用 → 栈上分配(避免堆内存分配和GC压力)。

      • 线程逃逸:对象被其他线程访问 → 需同步处理。

      • 方法逃逸:对象作为返回值传递给其他方法 → 需堆分配。

    • 若对象未逃逸,JVM可能进一步进行标量替换(将对象拆解为基本类型字段存储)。

  3. 锁消除(Lock Elision)

    • 基于逃逸分析,若对象未逃逸当前线程,移除不必要的同步锁。

    • 例如:synchronized(new Object()) { ... }中的锁无实际竞争,会被直接移除。


6. 其他

JVM参数配置

关键参数直接影响内存布局和GC行为:

  1. 堆内存设置

    • -Xms:堆初始大小(如-Xms512m)。

    • -Xmx:堆最大大小(如-Xmx4g)。

    • 建议两者设为相同值,避免堆动态调整引发的性能波动。

  2. 代比例调整

    • -XX:NewRatio:老年代与年轻代的比例(默认2,即老年代占2/3,年轻代占1/3)。

    • -XX:SurvivorRatio:Eden区与Survivor区的比例(默认8,即Eden:S0:S1=8:1:1)。

  3. 元空间设置(Java 8+)

    • -XX:MetaspaceSize:元空间初始大小(默认约21MB)。

    • -XX:MaxMetaspaceSize:元空间最大大小(默认无限制,但受物理内存限制)。

OOM错误类型
  1. Heap OOM

    • 原因:堆内存不足,无法分配新对象(如大数组、内存泄漏)。

    • 排查:通过Heap Dump分析对象占用(MAT、VisualVM工具)。

  2. StackOverflowError

    • 原因:线程请求的栈深度超过JVM限制(如无限递归)。

    • 相关参数-Xss调整线程栈大小(默认1MB,Linux/x64)。

  3. Metaspace OOM

    • 原因:加载的类元数据超过元空间容量(如动态生成大量类)。

    • 典型场景:反射、CGLIB动态代理、大量JSP编译。


相关文章:

  • 【专业测评】STONE 80A-L 电调:轻量化革命下的工业级动力心脏 ——112g 机身承载 80A 持续输出,重新定义无人机动力系统标杆
  • 秒杀业务优化之从分布式锁到基于消息队列的异步秒杀
  • JavaScript中匿名函数与箭头函数之间的区别与联系
  • Android Compose 框架的状态与 ViewModel 的协同(collectAsState)深入剖析(二十一)
  • 2023年TEVC SCI1区TOP:基于粒子群算法的紧凑神经结构搜索图像分类
  • 《论语别裁》第02章 为政(04) 刘备上了曹操的当
  • AF3 Rigid类make_transform_from_reference方法解读
  • C++题目
  • NO.56|基础算法-模拟|多项式输出|蛇形方阵|字符串的展开|方向向量(C++)
  • 《汽车理论》第一章作业1.3
  • 如何学好linux驱动
  • 【机器学习】什么是线性回归?
  • 3.24-1接口测试理论
  • C++输入输出流第二弹:文件输入输出流and字符串输入输出流
  • Simula语言的正则表达式
  • 提升生产效率的关键: ethercat转TCPIP网关智能通信
  • 详细Linux中级知识(不断完善)
  • FreeSWITCH入门到精通系列(四):FreeSWITCH模块介绍与使用
  • C . Serval and The Formula【Codeforces Round 1011 (Div. 2)】
  • 社群经济4.0时代:开源链动模式与AI技术驱动的电商生态重构
  • 五一“拼假”催热超长假期,热门酒店民宿一房难求
  • 探索演艺产业新路径,2万观众走进音乐科技融创节
  • 发布亮眼一季度报后,东阿阿胶股价跌停:现金流隐忧引发争议
  • 第五届全国医院人文管理路演在昆山举办:患者体验才是温度计
  • 网警侦破特大“刷量引流”网络水军案:涉案金额达2亿余元
  • 最高法专门规范涉企案件审执工作:从源头防止趋利性执法司法