颠覆茅台预约体验:Campus-imaotai全自动预约系统深度解析
2026/6/13 18:38:01
Java的8大基本数据类型在虚拟机中的实现方式与内存占用:
| 数据类型 | 堆内存占用(字节) | 栈中slot数 | 虚拟机内部符号 |
|---|---|---|---|
| byte | 1 | 1 | B |
| short | 2 | 1 | S |
| int | 4 | 1 | I |
| long | 8 | 2 | J |
| float | 4 | 1 | F |
| double | 8 | 2 | D |
| char | 2 | 1 | C |
| boolean | 1 | 1 | Z |
对象在堆中主要包含三部分:
普通对象结构: ┌──────────────┐ │ Mark Word │ 32位4字节, 64位8字节,保存锁、GC等信息 ├──────────────┤ │Klass Pointer │ 指向方法区中InstanceKlass对象的指针 ├──────────────┤ │ 实例数据 │ 字段重排序,保证内存对齐 ├──────────────┤ │ 对齐填充 │ 保证对象大小为8字节的倍数 └──────────────┘ 数组对象额外包含: ┌──────────────┐ │ 数组长度 │ 4字节(int) └──────────────┘Mark Word在不同状态下存储不同内容,64位开启指针压缩布局:
未锁定状态:
偏向锁状态:
轻量级锁:
重量级锁:
GC标记:
-XX:-UseCompressedOops关闭JVM提供5种字节码指令执行方法调用:
invokestatic:调用静态方法
invokespecial:调用私有方法、构造方法,以及super关键字调用父类方法
invokevirtual:调用非私有实例方法
invokeinterface:调用接口方法
invokedynamic:调用动态方法
静态绑定:
动态绑定:
JDK7后,HotSpot采用分层编译,5个优化级别:
| 等级 | 组件 | 描述 | 保存的信息 |
|---|---|---|---|
| 0 | 解释器 | 解释执行,记录方法/循环次数 | 无 |
| 1 | C1编译器 | 基础优化 | 优化后代码 |
| 2 | C1编译器 | 基础优化+收集信息 | 优化后代码+方法/循环次数 |
| 3 | C1编译器 | C1完整优化+收集所有额外信息 | 类型、分支概率等 |
| 4 | C2编译器 | 深度优化,服务端代码优化 | 优化后代码 |
记忆集优化:
执行流程:
将8字节指针拆分为三部分:
JIT优化:
-XX:MaxInlineSize:控制内联方法大小-XX:FreqInlineSize:控制热点方法内联大小-XX:InlineSmallCode:控制机器码内联大小G1回收器:
-XX:MaxGCPauseMillis:期望最大停顿时间-XX:InitiatingHeapOccupancyPercent:触发混合GC的堆占用率ZGC:
-XX:+UseZGC:启用ZGC-XX:ZAllocationSpikeTolerance:分配峰值容忍度JVM是Java语言的核心运行环境,理解其内部原理对性能优化和问题排查至关重要。关键要点包括:
内存管理:
执行优化:
垃圾回收演进:
持续发展: