JVM

觉知此事要躬行...

Posted by Lydia on July 26, 2020

总结

  • 运行时内存区域特别是堆的内存分配到垃圾回收过程
  • Java中的四种引用类型
  • 类加载机制-双亲委派模型
  • 性能调优实战经历【从CPU、内存、磁盘、网络说开去
  • JVM命令及参数调优

参考

史上最全阿里 Java 面试题总结

Java虚拟机(JVM)面试题(2020最新版)

Java中的四种引用类型


  1. 什么情况下会发生栈内存溢出。

栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部变量表,操作数栈,动态链接,方法出口灯信息。局部变量表又包含基本数据类型,对象引用类型(局部变量表编译器完成,运行期间不会变化)

所以我们可以理解为栈溢出就是方法执行是创建的栈帧超过了栈的深度。那么最有可能的就是方法递归调用产生这种结果。

我们需要使用参数 -Xss 去调整JVM栈的大小

什么情况下会发生堆内存溢出,栈内存溢出,结合实例说明

  1. JVM的内存结构,Eden和Survivor比例。

Java内存模型

image

image

  1. JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor。

  2. JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的JVM参数。

  3. 你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点。

  4. 垃圾回收算法的实现原理。

  5. 当出现了内存溢出,你怎么排错。

  6. JVM内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,工作内存等。

  7. 简单说说你了解的类加载器,可以打破双亲委派么,怎么打破。

  8. 讲讲JAVA的反射机制。

  9. 你们线上应用的JVM参数有哪些。

  10. g1和cms区别,吞吐量优先和响应优先的垃圾收集器选择。

  11. 怎么打出线程栈信息。

  12. 请解释如下jvm参数的含义: -server -Xms512m -Xmx512m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m - XX:MaxTenuringThreshold=20XX:CMSInitiatingOccupancyFraction=80 - XX:+UseCMSInitiatingOccupancyOnly。

JVM常见面试题解析