本期是【你好,面试官】系列文章的第19期,持续更新中…。
《你好,面试官》系列目前已经连载19篇了,据说看了这个系列的朋友都拿到了大厂offer~
本期会模拟面试 关于 JVM调优参数
大厂面试部分常考问题
涉及知识点,堆、栈、收集器
等
本期题改编自 ——2023届 腾讯 二面
叮叮叮…
面试官:“你好,我是XX面试官,请问是小龙吗?”
小龙:“您好,面试官,我是小龙”
面试官:“好的,现在有空吗,我们开始面试吧”
小龙:“嗯嗯,准备好啦”
…
other questions
…
面试官:“我看你简历有写悉 JVM 原理对吧?”
小龙:“嗯嗯,有过学习了解”
面试官:“好的,给我讲讲 你了解哪些 JVM参数吧,或者说你平时经常用到哪些调优参数呢?”
独白:”上来就玩变态的吗?“
小龙:“JVM各个模块 比如:堆、元空间、栈、各个收集器、或者GC策略等都可以通过对应的命令来进行配置。”
面试官:“对于堆你平时主要用的有哪些呢?”
小龙:“如果说用的比较多的,可能就是 -Xms
用来设置堆初始大小,-Xmx
设置最大堆大小。”
面试官:“用这两个参数时有什么讲究吗?”
小龙:“嗯?设置的值大小可能要看具体项目吧,不过通常服务器项目在运行过程中,堆空间会随着项目的运行不断地收缩与扩张,这也无疑会造成不必要的系统压力。因此,在生产环境 这两个参数尽量保持一致,避免 GC 调整堆大小带来其他开销。”
面试官:“好的,不错。你继续”
小龙:“还有其他什么 -Xmn
设置新生代的大小 ,-XX:NewRatio
设置年轻代和年老代的比值等。不过,能常用且有用的还是这几个。”
小龙:“平时在查看项目 GC 情况,或者排查问题时,我们可以 -XX:+PrintGCDetails
查看详细的GC处理日志。”
小龙:"并且堆内存是非常重要的,而且堆内存也容易发生一些内存异常比如:OOM,因此这个命令几乎是项目必备啦,可以用 -XX:+HeapDumpOnOutOfMemoryError
在出现异常时输出堆内信息,要配合 -XX:+HeapDumpPath
使用,指定输出路径 "
小龙:" 这几个命令 一般需要合起来使用: -Xms5M -Xmx5M -Xmn1M -XX:SurvivorRatio=8 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/softs/web/logs/gc.hprof
" (如果实习过应该基本都知道)
面试官:“好的,不错,还知道哪些其他命令呢?”
小龙:“嗯,还有其他经常用的 利用-Xss
设置栈大小,如果不设置此参数,默认值是1M
。”
小龙:“如果是高手,还可以利用 收集器 或者 GC 相关的命令进行调优,不过这些我也只是了解,并没亲自尝试过。可以讲讲。”
独白:“细节拉满,这种高级 涉及到了调优 收集器之类的,还是不要装逼啦。。。我没用过,但是我可以都略懂。”
独白:“其他相关知识点在【面试笔记
】中都有详细总结,清晰易懂全面。”
小龙:“对于 CMS垃圾收集器 可以用 -XX:+UseConcMarkSweepGC
开启,因为CMS会有浮动垃圾,所以一般都较早启动GC,因此我们可以用-XX:CMSInitiatingOccupancyFraction=n
设定CMS在对内存占用率达到n%(自己指定)的时候提前开始GC。”
小龙:“如果 对于 G1垃圾收集器,可以用 -XX:+UseG1GC
开启,因为G1
将堆空间划分为若干个区域(Region
),各个region
可以是Eden
区,Survivor
区以及Old
区等,我们可以 用 -XX:G1HeapRegionSize
设置每个region
的大小。”
小龙:“并且 G1 GC 不仅是区域化的,也是并行-并发,因此,可以利用-XX:ParallelGCThread
设置STW
的时候并行的垃圾线程数量,-XX:ParallelGCThread
设置STW
的时候并行的垃圾线程数量。”
面试官:“这些都需要我们自己去设置吗?”
小龙:“通常使用G1
收集器,不需要那么多的参数配置,G1设计原则本就是简化 JVM性能调优。我们一般 1、开启 G1 收集器,2、设置堆最大内存,3、再设置它的最大停顿时间 即可,其他的参数,G1
会自动调节或使用默认的参数。”
面试官:“enen,那,这个停顿时间是怎么回事呢?如何设置呢?”
独白:“NB,脑壳已经转不动了。。”
小龙:" G1 收集器,我们可以通过 -XX:MaxGCPauseMillis
设置一个时间(JVM会尽力实现,但不保证)期望可以达到的最大GC停顿时间,默认是200ms。"
小龙: 这个参数如果设置的过小,会导致一次回收的region个数减少,回收的垃圾对象减少(因为设置的垃圾线程工作的时间减少了),如果产生垃圾的速度很快,可能会导致Full GC,因此这个参数很关键。
面试官:“好的,基础还行。时间差不多啦,今天暂时聊那么多,下期再谈谈。”
本期我们通过面试模拟 列出了大厂面试我遇到过的 JVM 相关常考问题
,下期再见。订阅+星标持续追更
面试重点
堆、栈、收集器
等