Version: Next

前言

几道面试题

  1. 请谈谈你对JVM的理解,JDK8的虚拟机有什么更新?
  2. 什么是OOM?什么是StackOverFlowError?有哪些方法分析?
  3. JVM的常用参数调优你知道哪些?
  4. 内存快照抓取和MAT分析DUMP文件你了解吗?
  5. 谈谈你对类加载器的理解
  6. 堆里面的分区:EdenSurvival from to老年代,各自有什么特点?
  7. GC的三种收集方式:标记清除标记整理复制算法的原理和特点,分别用在什么地方?

需要了解的概念

  1. JVM的位置
  2. JVM的体系结构
  3. 类加载器
  4. 双亲委派机制
  5. 沙箱安全机制
  6. Native—— JNI(Java Native Interface) & Native Method Stack
  7. PC寄存器
  8. 方法去
  9. 三种JVM
  10. 新生区、老年区、永久区
  11. 堆内存调优
  12. GC垃圾回收
  13. JMM

JVM的位置

JVM是运行在操作系统上的,它与硬件没有直接交互

JVM体系结构图

如果不能闭着眼睛画出JVM的体系结构图,说明JVM还没有入门

  1. .java文件通过Javac编译为.class文件

  2. .class文件送入类加载器 .class文件又被JVM中的解释器编译为机器码在不同的操作系统上执行 每种操作系统的解释器是不同的,但是基于不同解释器实现的JVM是相同的,这是Java跨平台的原因

  3. 进入Java 运行时数据区 由于运行时在类加载器之后,因此Runtime Exception不可捕获

  4. 线程共享区域

    • 方法区 Method Area —— 里面有运行时常量池
    • 堆 JVM Heap (产生垃圾的主要区域) 新生代、老年代等

    线程私有区域:(一定不会产生垃圾)

    • 本地方法栈 Native Method Stack
    • 栈 JVM Stack,里面是栈帧Stack Frame
    • 程序计数器
  5. 执行引擎

    • Java-In-Time Complier Java即时编译器,将Java字节码编译为机器码
    • GC:垃圾回收器
  6. JNI:Java Native Interface Java本地方法接口调用本地方法库 Native Method Libraries实现与操作系统交互

image-20200615220111373

JVM调优绝大多数集中在JVM Heap堆