前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >面试官:你都知道哪些JVM配置参数?下次别只会回答设置堆空间了,看看大厂是怎么做的。

面试官:你都知道哪些JVM配置参数?下次别只会回答设置堆空间了,看看大厂是怎么做的。

作者头像
程序员牛肉
发布2025-02-18 22:08:50
发布2025-02-18 22:08:50
6300
代码可运行
举报
运行总次数:0
代码可运行

大家好,我是程序员牛肉。

今天在刷牛客的时候看到了一个面试题,题目是关于Java虚拟机(JVM)配置参数的。

这个问题大家能答上来嘛?不会张口就是“设置堆空间大小”吧。

这样回答就太没有意思了,也没办法引起面试官的兴趣。因此我们今天来给大家分享几个大厂常用的JVM配置参数。正所谓我学过就是我干过,看完这篇文章以后大家也就是参加过配置大厂JVM参数配置的人了。

第一个:

代码语言:javascript
代码运行次数:0
复制
-XX:-UseBiasedLocking

该指令的作用是关闭偏向锁,对于不懂的朋友我们先来介绍一下什么是偏向锁:

[偏向锁是一种锁优化机制,其核心思想是锁会偏向于第一个获取它的线程。如果该线程再次进入同步块,锁不会进行竞争,直接获取锁]

这种优化机制听起来不错,但在线上的高并发的系统中,一般都要关闭掉偏向锁,因为线程间存在锁竞争,锁撤销会消耗大量的资源。

偏向锁的撤销需要等待全局安全点(safe point),暂停持有偏向锁的线程,检查持有偏向锁的线程状态。首先遍历当前JVM的所有线程,如果能找到偏向线程,则说明偏向的线程还存活,此时检查线程是否在执行同步代码块中的代码,如果是,则升级为轻量级锁,进行CAS竞争锁。

也就是说:线上高并发环境下,偏向锁的频繁撤销和创建会导致频繁的STW,导致线上服务停顿时间过长。

第二个:

代码语言:javascript
代码运行次数:0
复制
-XX:+HeapDumpOnOutOfMemoryError

该指令的作用是在OOM之前生成堆转储,有助于分析内存问题。先说说什么是堆转储吧:

[堆转储(Heap Dump)是Java虚拟机(JVM)中的一种调试工具,用于捕获应用程序在某一时刻的内存快照。堆转储文件包含了JVM堆内存中所有对象的详细信息,包括对象的类型、大小、字段值以及对象之间的引用关系。]

这个指令会将线上服务发生OOM时的内存快照截取下来,方便我们后续基于这个快照文件来排查代码问题。

其实线上排查OOM就是这个思路:

先配置这个参数将使得OOM的时候会保存对应的内存快照,我们通过跳板机来从线上服务器中拉取对应的堆转储文件,之后在本地使用类似于 Eclipse Memory Analyzer 这种分析工具来对堆内存进行分析即可。

并且我们还需要结合下面这个指令来实现:

代码语言:javascript
代码运行次数:0
复制
-XX:HeapDumpPath=

这个指令的作用是指定堆转储文件的存放地址。方便我们后续基于跳板机进行拉取。

第三个:

代码语言:javascript
代码运行次数:0
复制
-XX:+UseG1GC

这个指令的作用是使用G1垃圾回收器。我们先来介绍一下什么是G1垃圾回收器:

G1 是一种面向服务器端应用的垃圾收集器,专为多核处理器和大内存机器设计。它的主要目标是在满足高吞吐量的同时,尽可能缩短垃圾收集(GC)造成的停顿时间。G1 收集器在 JDK 7中被正式推出,并在 JDK 9 中成为默认的垃圾收集器。

而很多线上服务的JDK版本是1.8,因此需要手动的开启这个指令来使用G1垃圾回收器。

而说到GC垃圾回收,我们在线上还需要配置以下参数:

代码语言:javascript
代码运行次数:0
复制
-XX:NumberOfGCLogFiles=xx

这个指令的作用是在记录GC日志文件的时候,设置最大的GC日志文件个数。

代码语言:javascript
代码运行次数:0
复制
-XX:+UseGCLogFileRotation

这个指令的作用是开启日志轮转功能。

而这两个指令一般结合使用,这样的话GC日志在记录到最大的文件数量上限的时候,就会开始进行覆写操作,覆盖掉之前旧的GC文件。

基于这种方式我们就实现了限制日志文件的大小,防止其无限增长挤压磁盘空间,并且也有利于日志的管理和分析。

但是他也有一定的缺点:在应用重启时新旧日志内容可能会混合,这就需要在重启应用前将旧的GC日志移动到不同的文件夹中。

那今天关于JVM常见的配置参数就介绍到这里了。相信通过我的介绍,你已经大致了解了一些JVM的配置参数。希望我的文章可以帮到你。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员牛肉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档