你好,面试官 | 终于上岸了,你会哪些 JVM 调优参数?呆住了。。。

本期是【你好,面试官】系列文章的第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 相关常考问题,下期再见。订阅+星标持续追更

面试重点

堆、栈、收集器

猜你喜欢

转载自blog.csdn.net/qq_43666365/article/details/127718633