当前位置: 首页 > 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
http://www.xdnf.cn/news/186895.html

相关文章:

  • 全开源、私有化部署!轻量级用户行为分析系统-ClkLog
  • MAC如何安装多版本jdk(以8,11,17为例)
  • 定时器的源码介绍与简单实现——多线程编程简单案例[多线程编程篇(5)]
  • stm32wb55rg (2) 阅读资料手册
  • Leetcode刷题 | Day49_图论01
  • 数字孪生的浪潮:从虚拟镜像到现实世界的 IT 变革
  • 孙宇晨将出席迪拜Token2049 与特朗普次子共话加密未来
  • 【Pandas】pandas DataFrame rmod
  • 基于vue框架的电影推荐系统p0apl(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 60、微服务保姆教程(三)Sentinel---高可用流量管理框架/服务容错组件
  • 微信小程序分页和下拉刷新
  • uniapp 微信小程序遇到的坑
  • 一种改进的YOLOv11网络,用于无人机视角下的小目标检测
  • 深度学习中的正则化简介
  • 如何正确地解读和分析MySQL性能模式和查询分析器提供的性能数据?
  • 【算法应用】基于灰狼算法求解DV-Hop定位问题
  • React Testing Library
  • 2025-4-25 情绪周期视角复盘(mini)
  • 【C语言极简自学笔记】C 语言数组详解:一维数组与二维数组
  • 「OC」源码学习——alloc与init的实现
  • 【博客系统】博客系统第二弹:实现博客列表接口(在 Service 层重新封装 Mapper 层返回结果,避免实体类所有字段都向前端返回)、SimpleDateFormat 类的使用方法
  • 强化学习中关键超参数的详细说明
  • 如何把握邮件发送的黄金时间?
  • TypeScript 入门到进阶全讲解(超全版)
  • DAY8-GDB调试及打桩
  • BOPF Business Object Development
  • AiCube 试用 - ADC 水位监测系统
  • NameSilo转入转出域名
  • 大模型笔记8 文本数据清洗
  • C语言数据结构—数组(cpu内存与指针)