面试总结-JVM篇

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

栈溢出(StackOverflowError)就是方法执行时创建的栈帧超过了栈的深度。那么最有可能的就是方法递归调用产生这种结果(方法a里面继续调a方法)。

我们可以使用参数 -Xss (比如-Xmx2M)去调整JVM栈的大小来扩大栈的深度。

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

堆溢出(OutOfMemoryError:java heap space)就是方法执行时创建的栈帧超过了栈的深度。那么最有可能的就是方法递归调用产生这种结果(方法a里面继续调a方法)。

我们可以使用参数 -Xmx (比如-Xmx4096M)去调整堆的总大小来扩大栈的深度。

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

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

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

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

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

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

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

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

2.01 讲讲JAVA的反射机制。

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

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

2.01 怎么打出线程栈信息。

参考链接

  1. interview_internal_reference