当前位置: 首页 > news >正文

JVM调优,何时调优,怎么调优,面试的时候调优

一般Java面试的时候,面试官都喜欢问一个面试题,就是JVM调优的面试题,相信超过99%的小伙伴都没有过JVM调优的经历。说实话,我以前也没有相关的调优经验,也非常喜欢百度,这个问题到底想问什么,应该怎么回答,结果看到了一个非常有意思的回答。

答案:

1、我一般面试的时候调优(顽皮)

2、我他妈直接ZGC,调个蛇皮

说实话,Java到了需要做jvm调优的时候,那说明这个系统是一个面向高并发系统,并且用户量绝对不在少数,并且会追求一个低延迟的一个场景。例如淘宝、京东、各类秒杀活动,那么这个时候,存在jvm调优的情况(有几个在阿里上班的)。

那么何时调优呢,该怎么调优呢,我认为这个没有一个标准答案,要不然我之前也不会经常百度了。

我们先了解一下JVM,这个玩意基本上是开箱即用,不需要你调优,他也能跑的很好,你确定你比设计这个JVM的人更加专业吗,还调优,调个蛇皮吧,当你需要调优的时候,基本上是你的代码写出问题啦,导致线上频繁ygc,fullgc。这个就没有办法了,ygc跟架构存在一定关系,fullgc就自个区反省吧。

我们在进阶了解一下,怎么调优,能动的几个参数,最小内存和最大内存,这个跟JVM是息息相关的,如果小了,就会导致频繁ygc,并且容易导致对象晋升到老年代,并且触发fullgc,这个fullgc的危害是非常大的,会导致整个业务暂停。那么这个时候,就有同学把这个内存直接调大,恭喜你,踩吭了,大内存确实可以避免频繁ygc,但是当你触发fullgc的时候,哼哼,直接炸裂,业务停顿时间贼长,你们经理估计要宰了你。

除了能动内存之外,我们还有一个选择,那就是垃圾回收器,各版本的JDK使用的垃圾回收器各不一样,使用的默认的垃圾回收器也不一样,然后你们可以了解一下每一种垃圾回收器的特点

Java虚拟机(JVM)提供了多种垃圾回收器(Garbage Collectors),用于自动管理内存,回收不再使用的对象。以下是一些常见的垃圾回收器及其特点:

  1. Serial GC(串行垃圾回收器):

    • 单线程回收器,使用单个线程进行垃圾回收。
    • 适用于单核CPU和小内存应用场景。
    • 在进行垃圾回收时,会暂停应用程序的其他线程,导致应用程序的停顿时间较长。
    • 适用于对延迟要求不高的场景,如桌面应用程序。
  2. Parallel GC(并行垃圾回收器):

    • 多线程回收器,使用多个线程进行垃圾回收。
    • 适用于多核CPU和大内存应用场景。
    • 在进行垃圾回收时,会暂停应用程序的其他线程,但由于使用了多线程,停顿时间相对较短。
    • 适用于对延迟要求不高的场景,如服务器应用程序。
  3. CMS(Concurrent Mark Sweep)垃圾回收器:

    • 并发回收器,尽量减少应用程序的停顿时间。
    • 使用多线程进行垃圾回收,与应用程序线程并发执行。
    • 在进行垃圾回收时,会标记需要回收的对象,然后在适当的时机进行清理。
    • 适用于对延迟要求较高的场景,如低延迟交易系统。
    • 需要注意的是,CMS回收器在清理过程中可能会产生大量碎片,可能导致内存碎片化问题。
  4. G1(Garbage-First)垃圾回收器:

    • 并行回收器,尽量减少应用程序的停顿时间。
    • 将堆内存划分为多个独立的区域(Region),并根据区域的使用情况进行垃圾回收。
    • 在进行垃圾回收时,会优先回收垃圾最多的区域,以减少停顿时间。
    • 适用于大内存、多核CPU的应用场景,如大型数据处理系统。
    • 可以通过调整参数来控制停顿时间和吞吐量。

这下,你们知道该怎么回答这个面试题了吗

http://www.lryc.cn/news/356366.html

相关文章:

  • 朗之万动力学(Langevin dynamics)
  • 双指针技巧,链表
  • 鸿蒙 DevEcoStudio:发布进度条通知
  • web前端之vue动态访问静态资源、静态资源的动态访问、打包、public、import、URL、Vite
  • Raven2掠夺者2渡鸦2角色创建、游戏预下载、账号怎么注册教程
  • Window VScode配置Conda教程(成功版)
  • 探索旅行的优惠之选,千益畅行旅游卡让旅程更省心省力!
  • JVM学习-彻底搞懂Java自增++
  • 【全开源】民宿酒店预订管理系统(ThinkPHP+uniapp+uView)
  • 9.3 Go语言入门(变量声明和函数调用)
  • CVE-2020-7982 OpenWrt 远程命令执行漏洞学习(更新中)
  • 代码随想录——左叶子之和(Leetcode404)
  • 解禁谷歌等浏览器禁止网站使用麦克等媒体设备
  • 如何彻底卸载sql sever2022
  • 「51媒体」如何与媒体建立良好关系?
  • Selenium 库的爬虫实现
  • 【文末附gpt升级方案】数据虚拟化技术的优势
  • C++ 常量和变量
  • 【cocos creator 】生成六边形地图
  • TypeScript类型体操练习
  • leetcode231-Power of Two
  • 贪心算法简单介绍
  • 眼底项目经验
  • 使用arco design实现动态列信息的表格
  • 解决 fatal: Not a git repository (or any of the parent directories): .git 问题
  • Spring 模拟管理Web应用程序
  • 修改了vue3 <script setup>留言板
  • jQuery 常用API
  • 内网安全-隧道搭建穿透上线内网穿透-nps自定义上线内网渗透-Linux上线-cs上线Linux主机
  • 【AHK V2】设计模式之命令模式