基本原理

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的优化方法

去优化

即时编译器有哪些优化

强度削弱

在什么情况下重复读写操作会被优化

读写删除优化