46

JVM常见的几个面试题

 5 years ago
source link: http://www.jianshu.com/p/573b5c6b8e89?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

这块内容并非每个面试官都会问,但是如果是应聘高P的话,这一环节是不可缺少的,面试的难易程度也不一样,有些面试官或许让你讲讲虚拟机的内存实现即可,有些也会让你解释垃圾回收的实现,当然也会有虚拟机调优的实战经验,线上问题排查等等。

当然了,每次看到简历上如果有提到JVM,不管是了解还是精通,我都会尝试问几个问题,从最简单的开始。

问题1

JVM的内存相关,如何实现?

Java堆,Java栈,程序计数器,方法区,1.7的永久代,1.8的metaspace....尽可能多说,顺带简短描述下每个内存区的用途,能想到的都讲出来。

问题2

那么Java的堆内存,如何细分?

很多同学回答这个问题的时候,上来就是啪啦啪啦说一通,当我问他你说的是哪种回收算法时,他愣住了,以为所有算法的内存实现都一样。

比如CMS、G1、ZGC的堆内存实现都不太一样,但是可以说出CMS算法的堆内存实现,已经可以过关了,但是如果能够继续说明下G1和ZGC的实现,那当然是加分项。

问题3

在cms算法中,young gc的实现过程?

先找出根对象,如Java栈中引用的对象、静态变量引用的对象和系统词典中引用的对象等待,把这些对象标记成活跃对象,并复制到to区,接着遍历这些活跃对象中引用的对象并标记,找出老年代对象在eden区有引用关系的对象并标记,最后把这些标记的对象复制到to,在复制过程还要判断活跃对象的gc年龄是否已经达到阈值,如果已经达到阈值,就直接晋升到老年代,YGC结束之后把from和to的引用互换。

其实这里又会遇到几个概念,最好的情况是,面试者可以自己说出来,比如:

  • promotion failed
  • concurrent mode failed

并说明什么情况下会发生,可以如何避免?

问题4

cms算法的几个过程中,哪几个是需要stw的?

这几个过程,为什么需要stw?

问题5

JVM GC问题排查以及性能调优经验


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK