JVM指令集


一、JVM指令集详解

1. 栈和局部变量操作

常量压入指令

指令 功能说明
aconst_null 压入null对象引用
iconst_m1 压入int类型常量-1
bipush 压入8位带符号整数
ldc 从常量池加载项到栈

局部变量存取指令

  • 装载指令iload(int)、aload(引用类型)、iaload(从数组加载int)
  • 存储指令istore(存入int)、astore(存入引用)、iastore(存入int数组)

通用栈操作

java 复制代码
dup    // 复制栈顶一个字长内容
pop2   // 弹出栈顶两个字长内容
swap   // 交换栈顶两个字长内容
2. 类型转换与运算

类型转换

java 复制代码
i2l    // int → long
f2d    // float → double
i2b    // int → byte

运算指令

类型 加法 乘法 取余
整数 iadd imul irem
浮点数 fadd fmul frem
长整型 ladd lmul lrem
3. 对象与数组操作
java 复制代码
new           // 创建新对象
checkcast     // 验证对象类型
arraylength   // 获取数组长度
multianewarray // 分配多维数组
4. 控制流与异常

条件跳转

java 复制代码
ifeq     // 等于0时跳转
ifnonnull // 非null时跳转
tableswitch // 索引跳转表

异常处理

java 复制代码
athrow   // 抛出异常
jsr      // 跳转到finally子例程

二、VisualGC插件安装与使用

1. 插件安装流程
  1. 访问新地址:https://visualvm.github.io/index.html
  2. 在JDK的jvisualvm中:
    • Tools → Plugins → Settings
    • 替换URL为对应JDK版本的插件中心地址
  3. 安装VisualGC插件并重启
2. 可视化界面解析

三大部分功能

区域 功能说明
Spaces 内存分布:Perm, Old, Eden, S0, S1
Graphs 详细内存指标监控
Histogram Survivor区年龄分布柱状图

关键参数示例

java 复制代码
-XX:PermSize=128m -XX:MaxPermSize=256m  // Perm区配置
-Xms512m -Xmx512m -Xmn100m              // 堆内存配置
-XX:SurvivorRatio=8                     // Eden与Survivor比例

三、JVM内存模型与调优

1. 内存参数设置

Spring Boot示例

java 复制代码
java -Xms3072M -Xmx3072M -Xmn2048M -Xss1M 
     -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M 
     -jar app.jar

元空间优化建议

MetaspaceSizeMaxMetaspaceSize设为相同值,避免扩容触发Full GC。

2. 调优核心原则
  1. 对象分配策略

    • 优先在新生代(Eden区)分配对象
    • 避免频繁对象晋升到老年代
  2. 线程栈控制

    java 复制代码
    -Xss1M  // 栈大小影响可创建线程数
  3. Full GC规避策略

    • 合理设置新生代/老年代比例(如-Xmn占堆70%)
    • 监控Old Gen内存增长趋势
3. 百万级系统配置参考
java 复制代码
-Xms3072M -Xmx3072M     // 堆固定3GB
-Xmn2048M                // 新生代2GB
-XX:SurvivorRatio=8      // Eden:S0:S1=8:1:1
-XX:MaxMetaspaceSize=512M

阿里调优面试题:通过控制对象生命周期和内存分配策略,可大幅降低Full GC频率。


附录:JVM指令速查表

类别 常用指令示例
逻辑运算 iand, ior, ixor
方法调用 invokevirtual, invokestatic
返回指令 ireturn, dreturn

相关推荐
wuminyu2 天前
深入剖析 Panama Off-heap 的性能损耗与开销
java·linux·c语言·jvm·c++
uoKent2 天前
c++中new和malloc的区别
java·jvm·c++
~木雨2 天前
String 底层原理与常量池全解析:byte []+coder、intern 陷阱、substring 内存泄漏,一篇讲透
java·jvm·内存优化·string·字符串常量池
cfm_29142 天前
ThreadLocal 内存泄漏
java·jvm
liangbo72 天前
JVM规范第 6 章:Java 虚拟机指令集
java·jvm
2501_937860943 天前
Java多线程初阶(下)—— synchronized、volatile、wait/notify与经典并发工具
java·开发语言·jvm
二十雨辰3 天前
[Java]-JVM面试题
java·开发语言·jvm
IT_Octopus3 天前
G1 与 GC 日志入门课程(以本次离线菜单 Full GC 事故为教材)
java·jvm
疯狂打码的少年3 天前
【数据库技术】关系代数连接运算(等值连接/自然连接/外连接)
jvm·数据库·笔记·oracle
ly76894 天前
Java 21 到 Java 26 新特性详解:虚拟线程、模式匹配、结构化并发、HTTP/3 与 AOT
java·jvm