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

相关推荐
打工人你好1 天前
如何设计更安全的 VIP 权限体系
java·jvm·安全
unclecss1 天前
把 Spring Boot 的启动时间从 3 秒打到 30 毫秒,内存砍掉 80%,让 Java 在 Serverless 时代横着走
java·jvm·spring boot·serverless·graalvm
q***2512 天前
java进阶1——JVM
java·开发语言·jvm
zlpzlpzyd2 天前
jvm 偏向锁禁用以及移除
jvm
while(1){yan}2 天前
线程的状态
java·开发语言·jvm
20岁30年经验的码农2 天前
Java JVM 技术详解
java·jvm·压力测试
1***81532 天前
C在游戏中的场景管理
java·jvm·游戏
上78将2 天前
jvm的基本结构
jvm
Tan_Ying_Y2 天前
JVM内存结构———他的底层完整结构
jvm
张人玉2 天前
SQLite语法知识和使用实例
jvm·oracle·sqlite