-
[原创] JVM内存模型学习笔记
- java内存模型 用于屏蔽各平台的硬件和内存的访问差异,实现各个平台效果一致。
- 主内存和工作内存 变量都存储在主内存 工作内存操作变量
工作内存与主内存的数据交互
-
[原创] JVM编译学习笔记
- 虚拟机执行字节码 解释执行 编译执行(及时编译器) 虚拟机将热点代码编译为与本地机器相关机器码,并进行各层次的优化 热点代码:运行频繁的代码块(循环体)或者方法 1) 基于采样热点探测:周期性检查各个线程的栈顶 2) 基于计数器 回边计数器(循环) 方法调用计数器:给方法设置一个计数器,每次调用则计数值+1,规定时间没有到达阈值,计数减半,成为半衰期 三个层次优化 1) 第一层:解释器关闭性能检测,发出c1层编译 2) 第二层:编译为本地代码,并进行可靠优化,必要会开启性能检测逻辑 3) 第三层:编译为本地代码,进一步优化,根据性能监控可能发生不可靠的激进优化 及时编译器优化技术 1) 公共子表达式:表达式已经计算,并且这次的计算值为改变,直接使用之前的计算结果 2) 数组边界消除:确定不会越界的情况下,去除数组边界检查 3) 方法内联:检查调用方法,如果不是一个虚方法,则直接内联,虚方法会检查是否有多个版本可选,如果只有一个,会内联,但是会有一个逃生门,成为守护内联(属于激进优化) 虚方法:可以被重写的方法 4) 逃逸分析 方法逃逸:对象在方法内部被定义后,被外部方法引用 线程逃逸:被外部线程访问 非逃逸优化 a) 对象放置在栈中 b) 同步消除 c) 标量替换:不创建对象,配置被使用成员变量 解释器与编译的交互
-
[原创] 类加载器学习笔记
类加载器
-
[原创] JVM学习笔记
- 运行时的数据区域 程序计数器 线程私有,记录线程的执行虚拟机字节码指令的地址 Java虚拟机栈 线程私有,方法的调用对应一个栈帧的出入。 栈帧 1) 操作数栈 2) 局部变量表 3) 动态链接 4) 方法返回地址 本地方法栈
-
[原创] Struct项目搭建笔记
开发工具:intelliJ IDEA