JVM入门

一、为什么要学JVM?

JVM是Java代码和操作系统之间的"翻译官",学它的核心原因有三个:

  • 面试刚需:JVM是大厂面试高频考点,死记八股文不如理解底层逻辑。
  • 代码质量:知道代码在JVM中怎么执行,才能写出更可靠的系统(比如避免内存泄漏)。
  • 线上调优 :线上服务崩溃、内存溢出时,懂JVM才能快速定位问题(比如分析GC日志、调整内存参数)。
    简单说,学JVM是"一流程序员"和"只会CRUD的二流程序员"的分水岭。

二、JVM核心内容拆解

1. Class文件:JVM的"执行说明书"

Java代码编译后会生成.class文件,这是JVM能看懂的"二进制说明书"。

  • 结构特点 :以十六进制CAFEBABE开头(像Java的"身份证"),包含版本号、常量池(存类名、方法名等)、方法指令等。
  • 字节码指令 :Class文件里的代码是"机器指令",比如bipush 10(把10放入操作数栈)、invokestatic(调用静态方法)。看懂字节码能解释很多"诡异"问题,比如:
    • Integer缓存Integer i1=10; i1==i2true,是因为字节码调用了Integer.valueOf,它会缓存-128~127的数字。
    • try-catch-finally执行:字节码通过"异常表"控制流程,finally无论是否抛异常都会执行。

2. 类加载:把Class文件"搬进"JVM

类加载器负责把Class文件加载到JVM内存,核心机制有:

  • 双亲委派 :加载类时先"问爸爸"(父类加载器),爸爸加载不了才自己加载。好处是防止核心类(如java.lang.String)被篡改。
  • 沙箱保护 :禁止加载以java.开头的类,避免恶意代码冒充JDK核心类。
  • 类和对象的关系:类信息存在"元空间"(像库房,存模板),对象存在"堆"(像客厅,存具体数据),每个对象都有"类指针"指向元空间的类模板。

3. 执行引擎:把字节码变成"机器动作"

JVM通过两种方式执行字节码:

  • 解释执行:逐条翻译字节码为机器指令(像同声传译,慢但启动快)。
  • 编译执行(JIT) :把频繁执行的"热点代码"提前编译成机器码(像提前翻译演讲稿,快但启动慢)。
    HotSpot虚拟机(JDK默认)会混合使用两种方式,还会通过C1/C2编译器优化代码(C1快编译,C2优性能)。

4. GC垃圾回收:JVM的"清洁工"

Java不用手动释放内存,靠GC自动回收"无用对象",核心机制:

  • 分代收集模型 :按对象"寿命"分区域管理:
    • 年轻代(Eden区+2个Survivor区):放"朝生夕死"的对象(80%对象活不过一次GC),频繁回收(YoungGC)。
    • 老年代:放长期存活的对象,回收频率低(OldGC/FullGC)。
  • 垃圾回收器 :JDK8默认用Parallel Scavenge(注重吞吐量),还有G1(JDK9默认,低延迟)、ZGC(最新,超大规模内存)等。

三、JVM调优入门:从日志到分析

线上调优的核心是"看日志、调参数":

  • 定制GC参数 :通过-Xms(初始堆内存)、-Xmx(最大堆内存)等参数控制内存,用-XX:+PrintGCDetails打印GC日志。
  • 分析日志 :用工具(如gceasy.io)分析日志,能发现问题(如FullGC频繁、内存泄漏),再调整参数优化性能。

总结

JVM是Java的"底层引擎",理解它不仅能应对面试,更能让你写出高性能、高可靠的系统。学JVM虽有挑战,但掌握后会让你从"跟着做"变成"主动解决问题"的一流开发者。

相关推荐
伶俜661 天前
鸿蒙原生应用实战(十八)ArkUI 记账本:SQLite 账单 + 图表统计 + 分类管理
jvm·sqlite·harmonyos
IronMurphy1 天前
多线程问!
java·jvm·spring
cfm_29142 天前
JVM GC日志解析
jvm
不良使2 天前
鸿蒙PC迁移:使用Electron`logseq-master-ohos` 鸿蒙适配全记录
jvm·electron·harmonyos
cfm_29142 天前
JVM深度详解:Class常量池、运行时常量池、字符串常量池、包装类对象池
java·jvm
JAVA9652 天前
JAVA面试-JVM篇 02-G1垃圾收集器的工作原理是什么与CMS的区别
java·jvm·面试
Javatutouhouduan2 天前
深入学习JVM底层原理:源码剖析与实例详解!
java·jvm·java面试·后端开发·java程序员·java八股文·java性能优化
宸丶一3 天前
Day 13:持久化记忆 - 让 Agent 拥有长期记忆
jvm·python·ai
cfm_29143 天前
JVM新一代垃圾收集器深度解析:G1与ZGC
java·jvm