Java代码是怎么运行的
WHY
1)可移植性,一次编写随处运行 2)托管环境替你做事,自动内存管理,垃圾回收等
HOW
解释执行: 逐条翻译并执行, 无需等待编译
即时编译(Just-In-Time,JIT): 先编译再执行, 实际运行速度更快, 针对热点代码以方法为单位
Java虚拟机的运行效率
Java的基本类型
Java虚拟机的boolean类型
Java的基本类型
Java基本类型的大小
JVM是如何加载Java类的
加载
链接
初始化
JVM是如何执行方法调用的
重写与重载
静态绑定,动态绑定
调用指令的符号引用
虚方法引用
方法表
内联缓存方法表
内联缓存
JVM是如何处理异常的
异常的基本概念
JVM的异常捕获机制
Java7的Suppressed异常以及语法糖
JVM是如何处理反射的
反射API简介
反射调用的实现
反射调用的性能开销
Java8的Lambda表达式是怎么运行的
动态语言与Lambda
invokedynamic 指令和 method handle
invokedynamic 指令的运行效率
JVM构造对象的步骤都有哪些
构造对象的步骤
new指令的实现
JVM堆的区域划分
什么是垃圾收集
自动内存管理的意义
垃圾收集算法
如何选择垃圾收集算法
JVM是如何实现同步的
synchronized关键字的实现
JVM的锁算法
concurrent核心库
Java内存模型是什么
多处理器架构下的内存读写
happens-before原则
volatile关键字
对象的安全发布
JVM的安全点是什么
安全点的概念
安全点的位置
JVM何时使用安全点
javac是如何编译Java源代码的
自动装箱,自动拆箱
变长参数
foreach循环
泛型与类型擦除
桥接方法
如何使用注解解释器
注解与元数据
Java核心类库中的标准注解
自定义注解
解释器如何触发即时编译
即时编译简介
触发即时编译的时机
生成代码的性能
即时编译器与常规的静态编译器有何不同
profiling
基于程序profile的优化方法
去优化
即时编译器有哪些优化
强度削弱
在什么情况下重复读写操作会被优化
读写删除优化