走进JVM
概论
java中间件软件公司, 已被Oracle收购
GPL协议
java是静态语言, 但是用hotSpot的话是解释与编译混合执行的模式; python是脚本语言
及时编译器(Just-In-Time)
不是很明白, 为什么使用分层编译之后就削峰了, jit在运行到一定频率执行也是削峰啊
- jvm的技术难点举例
- 多租户JVM
- Wisp协程技术
- 大数据场景的ZenGC
1. 字节码
1.1 字节码指令
栈帧是一个内存区块
- 虚拟机栈-栈帧
1.1 局部变量表
1.2 操作数栈
1.3 动态链接
1.4 方法出口- StackOverFlowError
- OutOfMemoryError
基于栈的设计模式, 用了栈还是得走一遍寄存器啊
1.2 源码转化成字节码过程
这篇文章还是没啥用
1.3 即时编译流程
2. 类加载过程
2.1 类加载过程
类加载是一个将.class字节码文件实例化成Class对象并进行相关初始化的过程
2.2 双亲委派模型
这里只能用什么配什么, 看不到原配置
有用
- -XX:+TraceClassLoading
在启动项目时可以显示类加载顺序, 比较实用
- 需要自定义类加载器的情况
- 隔离加载类
- 修改类的加载方式
- 扩展加载源
- 防止源码泄漏
3 内存布局
3.1 经典的jvm内存布局
3.1.1 堆区
3.1.2 元空间
3.1.3 虚拟机栈
- 栈
先进后出的数据结构
- JVM运行环境
基于栈结构的运行环境
CPU的组成部分
用来暂存指令和数据还有地址
- 虚拟机栈
描述Java方法执行限额内存区域
线程私有
1. 局部变量表
2. 操作栈
- 操作栈
初始状态为空的桶式结构栈
- 桶式结构
后进先出
- 操作栈总结
操作栈在虚拟机栈中, 那就是栈中栈咯