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

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

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

有提到过(如图)。

图片图片

提到过(如图):

图片图片

步入正题

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

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

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

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

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

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

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

其它STW场景

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

举例来说:

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

2021-09-07 10:44:33

Java 注解开发

2021-02-19 10:02:57

HTTPSJava安全

2023-12-06 09:10:28

JWT微服务

2022-09-29 07:30:57

数据库索引字段

2021-12-08 06:53:29

面试动态代理

2024-02-22 15:36:23

Java内存模型线程

2021-07-06 07:27:45

React元素属性

2023-12-20 14:35:37

Java虚拟线程

2021-05-12 08:20:53

开发

2021-12-10 12:01:37

finalfinallyfinalize

2021-11-30 07:44:50

FinalFinallyFinalize

2024-04-03 15:33:04

JWTSession传输信息

2023-02-17 08:10:24

2021-12-20 10:30:33

forforEach前端

2021-04-19 18:56:58

大数字符串运算

2022-06-08 13:54:23

指令重排Java

2020-04-23 14:09:13

URI挖坑前端

2021-08-24 08:05:41

泛型类型擦除Class

2023-07-11 08:40:02

IO模型后台

2020-03-07 09:47:48

AVL树算法场景
点赞
收藏

51CTO技术栈公众号