Version: Next
前言
几道面试题
- 请谈谈你对JVM的理解,JDK8的虚拟机有什么更新?
- 什么是OOM?什么是StackOverFlowError?有哪些方法分析?
- JVM的常用参数调优你知道哪些?
- 内存快照抓取和MAT分析DUMP文件你了解吗?
- 谈谈你对类加载器的理解
- 堆里面的分区:
Eden
、Survival from to
、老年代
,各自有什么特点? - GC的三种收集方式:
标记清除
、标记整理
、复制算法
的原理和特点,分别用在什么地方?
需要了解的概念
- JVM的位置
- JVM的体系结构
- 类加载器
- 双亲委派机制
- 沙箱安全机制
- Native—— JNI(Java Native Interface) & Native Method Stack
- PC寄存器
- 方法去
- 栈
- 三种JVM
- 堆
- 新生区、老年区、永久区
- 堆内存调优
- GC垃圾回收
- JMM
JVM的位置
JVM是运行在操作系统上的,它与硬件没有直接交互
JVM体系结构图
如果不能闭着眼睛画出JVM的体系结构图,说明JVM还没有入门
.java文件通过Javac编译为.class文件
.class文件送入类加载器 .class文件又被JVM中的解释器编译为机器码在不同的操作系统上执行 每种操作系统的解释器是不同的,但是基于不同解释器实现的JVM是相同的,这是Java跨平台的原因
进入Java 运行时数据区 由于运行时在类加载器之后,因此Runtime Exception不可捕获
线程共享区域:
- 方法区 Method Area —— 里面有运行时常量池
- 堆 JVM Heap (产生垃圾的主要区域) 新生代、老年代等
线程私有区域:(一定不会产生垃圾)
- 本地方法栈 Native Method Stack
- 栈 JVM Stack,里面是栈帧Stack Frame
- 程序计数器
执行引擎
- Java-In-Time Complier Java即时编译器,将Java字节码编译为机器码
- GC:垃圾回收器
JNI:Java Native Interface Java本地方法接口调用本地方法库 Native Method Libraries实现与操作系统交互
JVM调优绝大多数集中在JVM Heap堆