面试官追问的STW,到底什么是STW?有什么影响?

STW,即Stop-The-World的缩写,指的是系统在执行特定操作时需暂停(停止)所有应用程序线程。

这个概念在早起文章中

Java虚拟机之垃圾收集算法

有提到过(如图)。

也有在文章

学习笔记之JVM调优之调优案例让你吊打面试官

提到过(如图):

所以感兴趣的小伙伴可以去看下往期文章。

步入正题

所谓的**STW,**在Java中,当需要执行垃圾回收时,垃圾回收器会停止应用程序的所有线程,以便安全地识别和回收不再使用的对象。这个过程被称为"Stop The World"。

STW事件会暂时中断应用程序的运行。对于需要高响应性或实时性能的应用程序,这可能引发性能问题,因为它会导致响应延迟。

在STW期间,应用程序的响应时间(RT)和吞吐量(QPS)都会受到影响,这可能导致性能表现的不确定性,特别是在负载较高的情况下。

为了减少STW带来的影响,需要对垃圾收集器的配置进行优化,例如选择不同类型的垃圾收集器、调整堆大小或其他垃圾收集器参数。

例如,选择并发回收器作为垃圾回收器,如CMSG1等,因为并发回收器主要关注的是减少STW的时长。它允许垃圾收集线程在应用程序线程运行的同时执行部分垃圾收集工作,从而减少了STW的时间。在并发回收期间,只会在特定的收集阶段发生短暂的STW。

关于Java虚拟机的垃圾收集器可参考文章

带你走近Java虚拟机到底有哪些经典的垃圾收集器

其它STW场景

除了垃圾收集(GC)中的STW事件之外,STW这个术语在其他上下文中也可能被引用。

举例来说:

  1. 操作系统和硬件升级/维护:在执行操作系统升级或硬件维护时,可能需要完全暂停系统功能,以确保安全地进行更新和维护。这种情况下的STW意味着所有在系统上运行的应用和服务都会被临时停止。
  2. 数据库维护:在某些数据库操作中,如重组索引、执行特定类型的备份或升级数据库系统时,可能需要暂时停止数据库服务,这也可以被视为一种STW事件,因为它会中断所有数据库操作。
  3. 消息队列的重新平衡:在分布式消息队列系统(例如Kafka)中,重新平衡是指在消费者群体中添加或删除消费者时重新分配分区的过程。在这个过程中,消息消费可能会暂时停止,直到重新平衡完成,确保所有分区正确地重新分配给新的消费者群体。

如有问题,欢迎加微信交流:w714771310,备注- 技术交流 。或微信搜索【码上遇见你】。

免费的Chat GPT可微信搜索【AI贝塔】进行体验,无限使用。

好了,本章节到此告一段落。希望对你有所帮助,祝学习顺利。

相关推荐
小蒜学长19 小时前
springboot多功能智能手机阅读APP设计与实现(代码+数据库+LW)
java·spring boot·后端·智能手机
追逐时光者20 小时前
精选 4 款开源免费、美观实用的 MAUI UI 组件库,助力轻松构建美观且功能丰富的应用程序!
后端·.net
你的人类朋友20 小时前
【Docker】说说卷挂载与绑定挂载
后端·docker·容器
间彧21 小时前
在高并发场景下,如何平衡QPS和TPS的监控资源消耗?
后端
间彧21 小时前
QPS和TPS的区别,在实际项目中,如何准确测量和监控QPS和TPS?
后端
间彧21 小时前
消息队列(RocketMQ、RabbitMQ、Kafka、ActiveMQ)对比与选型指南
后端·消息队列
brzhang1 天前
AI Agent 干不好活,不是它笨,告诉你一个残忍的现实,是你给他的工具太难用了
前端·后端·架构
brzhang1 天前
一文说明白为什么现在 AI Agent 都把重点放在上下文工程(context engineering)上?
前端·后端·架构
Roye_ack1 天前
【项目实战 Day9】springboot + vue 苍穹外卖系统(用户端订单模块 + 商家端订单管理模块 完结)
java·vue.js·spring boot·后端·mybatis
AAA修煤气灶刘哥1 天前
面试必问的CAS和ConcurrentHashMap,你搞懂了吗?
后端·面试