jvm|「2022最新JVM面试题」10道不得不会的JVM面试题

jvm|「2022最新JVM面试题」10道不得不会的JVM面试题

文章图片

jvm|「2022最新JVM面试题」10道不得不会的JVM面试题

文章图片

jvm|「2022最新JVM面试题」10道不得不会的JVM面试题

文章图片


  • 1. 说一说JVM的主要组成部分
  • 2. 说一下 JVM 的作用?
  • 3. 说一下堆栈的区别?
  • 4. Java内存泄漏
  • 5. JVM 有哪些垃圾回收算法?
  • 6. 说一下 JVM 有哪些垃圾回收器?
  • 7. 说一下类加载的执行过程?
  • 8. 什么是双亲委派模型?为什么要使用双亲委派模型?
  • 9. CMS垃圾清理的过程
  • 10. 常用的 JVM 调优的参数都有哪些?
  • 系列文章
基于JDK8
  • 【jvm|「2022最新JVM面试题」10道不得不会的JVM面试题】私信回复“666”可获取更多JVM资料及面试题 。
1. 说一说JVM的主要组成部分点击放大看 , 一图胜千文

  • 方法区和堆是所有线程共享的内存区域;而虚拟机栈、本地方法栈和程序计数器的运行是线程私有的内存区域 , 运行时数据区域就是我们常说的JVM的内存 。
  • 类加载子系统:根据给定的全限定名类名(如:java.lang.Object)来装载class文件到运行时数据区中的方法区中 。
  • Java堆是Java虚拟机所管理的内存中最大的一块 , 也是垃圾回收的主要区域 。 Java堆是被所有线程共享的一块内存区域 , 在虚拟机启动时创建 。 此内存区域的唯一目的就是存放对象实例 , 几乎所有的对象实例都在这里分配内存 。
  • 方法区与Java堆一样 , 是各个线程共享的内存区域 , 它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据 。
  • 程序计数器是一块较小的内存空间 , 它的作用可以看做是当前线程所执行的字节码的行号指示器 , 用来指示执行引擎下一条执行指令的地址 。
  • Java虚拟机栈也是线程私有的 , 它的生命周期与线程相同 。 虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、返回方法地址等信息 。 每一个方法被调用直至执行完成的过程 , 就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程 。
  • 本地方法栈(Native Method Stacks)本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的 , 其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务 , 而本地方法栈则是为虚拟机使用到的Native方法服务 。
  • 执行引擎:根据程序计数器中存储的指令地址执行classes中的指令 。
  • 本地接口:与本地方法库交互 , 是其它编程语言交互的接口 。
2. 说一下 JVM 的作用?首先通过编译器把 Java 代码转换成字节码 , 类加载器(ClassLoader)再把字节码加载到内存中 , 将其放在运行时数据区(Runtime data area)的方法区内 , 而字节码文件只是 JVM 的一套指令集规范 , 并不能直接交给底层操作系统去执行 , 因此需要特定的命令解析器执行引擎(Execution Engine) , 将字节码翻译成底层系统指令 , 再交由 CPU 去执行 , 而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能 。