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

一、JVM基础概念

一、JVM的设计目标

  • 一次编译,到处运行(跨平台)
    ➔ Java编译成字节码,由JVM在不同平台解释/编译执行,实现跨平台。

  • 内存管理与垃圾回收
    ➔ JVM统一负责内存分配和回收,降低内存泄漏的风险。

  • 性能优化
    ➔ JIT(即时编译器)、逃逸分析、栈上分配、方法内联等,动态提高程序运行速度。

  • 安全性和隔离性
    ➔ 类加载机制、沙箱安全模型,限制程序访问非法资源。

  • 多语言支持(了解)
    ➔ 除了Java,还能运行Kotlin、Scala、Groovy等基于JVM的语言。

二、JVM主要学习哪些东西

1. JVM整体架构

  • 类加载子系统(Class Loader) ☆☆☆☆☆
  • 运行时数据区(堆、栈、方法区、PC寄存器、本地方法栈) ☆☆☆☆☆
  • 执行引擎(解释器 + JIT编译器)
  • 本地接口(JNI)

2. 类加载机制

  • 双亲委派模型 ☆☆☆☆☆
  • 类的生命周期(加载、验证、准备、解析、初始化、使用、卸载) ☆☆☆☆☆

3. 内存模型与GC

  • Java内存模型(JMM) ☆☆☆☆☆
  • 堆、非堆、直接内存
  • 垃圾回收器分类(Serial、Parallel、CMS、G1、ZGC、Shenandoah) ☆☆☆☆☆
  • GC日志分析 ☆☆☆☆☆
  • 新生代、老年代、永久代/元空间(PermGen/MetaSpace)

4. 字节码执行原理 了解

  • JVM指令集
  • 栈帧结构
  • 本地方法接口调用(JNI)

5. 性能优化

  • JIT编译优化(热点探测、方法内联)
  • 逃逸分析、锁消除、锁粗化、偏向锁、轻量级锁 ☆☆☆☆☆
  • 内存调优参数 ☆☆☆☆☆
  • GC调优策略 ☆☆☆☆☆

6. 常见工具

  • jps、jstack、jmap、jhat、jconsole、visualvm、arthas ☆☆☆☆☆

三、JVM调优最佳实践 ☆☆☆☆☆

基本上遵循下面的步骤

1. 确定目标

  • 响应时间优先?吞吐量优先?内存占用优先?
    ➔ 目标不同,调优策略不同。

2. 合理设置堆内存

  • -Xms(初始堆大小) = -Xmx(最大堆大小),避免堆自动扩容
  • 年轻代(新生代)和老年代比例合理配置(-XX:NewRatio)

3. 选择合适的GC算法

  • 小应用、低延迟 ➔ G1 GC、ZGC
  • 批处理、大吞吐量 ➔ Parallel GC
  • 对响应敏感 ➔ CMS GC(慎用,已被G1替代)

4. 监控和分析

  • 监控指标: GC次数、GC时间、FullGC频率、堆使用率、线程数量、响应延迟
  • 工具使用: Arthas、VisualVM、jstat、jstack、jmap
  • GC日志启用:
    -Xlog:gc*:file=gc.log:time,uptime,level,tags

5. 避免常见问题

避免不合理的对象创建,减少短命对象

大对象直接进入老年代,合理设置 PretenureSizeThreshold

及时关闭连接、释放资源,防止内存泄漏

线程池合理使用,避免频繁创建销毁线程

6. 代码层面优化

尽量使用局部变量,减少对象逃逸到堆

初始化集合时设定合理容量,避免频繁扩容

对大对象缓存可使用软引用(SoftReference)、弱引用(WeakReference)

7. 启动参数推荐模板 (下面只是顺便写个例子 后续博客会详细说明)

-server
-Xms4g
-Xmx4g
-Xmn1g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:+UnlockExperimentalVMOptions
-XX:+UseStringDeduplication
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/path/to/dump

相关文章:

  • C++ 之 【list的简介、list 的构造函数、iterator、容量操作、元素访问、增删查改与迭代器失效】
  • C++ 之 【模拟实现 list(节点、迭代器、常见接口)】(将三个模板放在同一个命名空间就实现 list 啦)
  • 受限字符+环境变量RCE
  • 代码随想录打卡|Day29 动态规划Part02(不同路径、不同路径2、整数拆分、不同的二叉树搜索)
  • 免费LUT网站
  • 【Docker】使用 jq 管理镜像源
  • C++核心编程:类与对象全面解析
  • uniapp常用
  • 迭代器与生成器
  • 2025A卷-正整数到Excel编号之间的转换
  • 什么是 Web 标准?为什么它们对 SEO 和开发很重要?
  • GitLab CVE-2024-12444 安全漏洞解决方案
  • Vue+Echarts 3D地图效果
  • Java锁的升级流程详解:无锁、偏向锁、轻量级锁、重量级锁
  • YUM/DNF管理工具
  • 用vite动态导入vue的路由配置
  • 递归、搜索和回溯算法《递归》
  • 飞凌嵌入式T527核心板获得【OpenHarmony生态产品兼容性证书】
  • window 图形显示驱动-在 WDDM 1.2 中提供无缝状态转换(下)
  • 关于健身房管理系统前后端软件开发主要功能需求分析
  • 北美票房|《罪人》遭媒体唱衰,好莱坞业内人士集体反击
  • 中公教育薪酬透视:董监高合计涨薪122万,员工精简近三成
  • 上海超万套保租房供应高校毕业生,各项目免押、打折等优惠频出
  • 商务部:将积极会同相关部门加快推进离境退税政策落实落地
  • 专访|伊朗学者:美伊核谈不只是改革派立场,但伊朗不信任美国
  • 天津外国语大学原校长修刚突发疾病去世,享年68岁