1
、知识点汇总
JVM
是
Java
运行基础
,
面试时一定会遇到
JVM
的有关问题
,
内容相对集中
,
但对只是深度要求较高
.
其中内存模型
,
类加载机制
,GC
是重点方面
.
性能调优部分更偏向应用
,
重点突出实践能力
.
编译器优化
和执行模式部分偏向于理论基础
,
重点掌握知识点
.
需了解
内存模型
各部分作用
,
保存哪些数据
.
类加载
双亲委派加载机制
,
常用加载器分别加载哪种类型的类
.
GC
分代回收的思想和依据以及不同垃圾回收算法的回收思路和适合场景
.
性能调优
常有
JVM
优化参数作用
,
参数调优的依据
,
常用的
JVM
分析工具能分析哪些问题以及使用方法
.
执行模式
解释
/
编译
/
混合模式的优缺点
,Java7
提供的分层编译技术
,JIT
即时编译技术
,OSR
栈上替
换
,C1/C2
编译器针对的场景
,C2
针对的是
server
模式
,
优化更激进
.
新技术方面
Java10
的
graal
编译器
编译器优化
j
avac
的编译过程
,ast
抽象语法树
,
编译器优化和运行器优化
.
2
、知识点详解:
1
、
JVM
内存模型:
线程独占
:
栈
,
本地方法栈
,
程序计数器 线程共享
:
堆
,
方法区
2
、栈:
又称方法栈
,
线程私有的
,
线程执行方法是都会创建一个栈阵
,
用来存储局部变量表
,
操作栈
,
动态链接
,
方
法出口等信息
.
调用方法时执行入栈
,
方法返回式执行出栈
.
3
、本地方法栈
与栈类似
,
也是用来保存执行方法的信息
.
执行
Java
方法是使用栈
,
执行
Native
方法时使用本地方法栈
.
4
、程序计数器
保存着当前线程执行的字节码位置
,
每个线程工作时都有独立的计数器
,
只为执行
Java
方法服务
,
执行
Native
方法时
,
程序计数器为空
.
5
、堆
JVM
内存管理最大的一块
,
对被线程共享
,
目的是存放对象的实例
,
几乎所欲的对象实例都会放在这里
,
当堆没有可用空间时
,
会抛出
OOM
异常
.
根据对象的存活周期不同
,JVM
把对象进行分代管理
,
由垃圾回收器进行垃圾的回收管理
6
、方法区:
又称非堆区
,
用于存储已被虚拟机加载的类信息
,
常量
,
静态变量
,
即时编译器优化后的代码等数据
.1.7
的永久代和
1.8
的元空间都是方法区的一种实现