STW(stop the )

news/2024/12/29 17:32:44/

1、Stop The World

Stop一the一World,简称STW,指的是Gc事件发生过程中,会产生应用程序的停顿。停顿产生时整个应用程序线程都会被暂停,没有任何响应,有点像卡死的感觉,这个停顿称为STW。
举例:

可达性分析算法中枚举根节点(GC Roots)会导致所有Java执行线程停顿。

停顿的原因
分析工作必须在一个能确保一致性的快照中进行
一致性指整个分析期间整个执行系统看起来像被冻结在某个时间点上
如果出现分析过程中对象引用关系还在不断变化,则分析结果的准确性无法保证
示例代码:
被STW中断的应用程序线程会在完成GC之后恢复,频繁的中断会让用户感觉像是网速不快造成的电影卡顿一样,所以我们要减少STW的发生
STW事件和采用哪款GC无关,所有的GC都有这个事件。
哪怕是G1也不能完全避免Stop一the一world情况发生,只能说垃圾回收器越来越优秀,回收效率越来越高,尽可能地缩短了暂停时间。
STW是JVM在后台自动发起和自动完成的。在用户不可见的情况下,把用户正常的工作线程全部停掉。
开发中采用System.gc();会导致Stop一the一world的发生。

public class StopTheWorldDemo {public static class WorkThread extends Thread {List<byte[]> list = new ArrayList<byte[]>();public void run() {try {while (true) {for(int i = 0;i < 1000;i++){byte[] buffer = new byte[1024];list.add(buffer);}if(list.size() > 10000){list.clear();System.gc();//会触发full gc,进而会出现STW事件}}} catch (Exception ex) {ex.printStackTrace();}}}public static class PrintThread extends Thread {public final long startTime = System.currentTimeMillis();public void run() {try {while (true) {// 每秒打印时间信息long t = System.currentTimeMillis() - startTime;System.out.println(t / 1000 + "." + t % 1000);Thread.sleep(1000);}} catch (Exception ex) {ex.printStackTrace();}}}public static void main(String[] args) {WorkThread w = new WorkThread();PrintThread p = new PrintThread();w.start();p.start();}
}

W线程当中的GC触发了STW,进而干扰了P线程有规律性打印。打印变得杂乱无章

打印输出:
在这里插入图片描述

 


http://www.ppmy.cn/news/650542.html

相关文章

ST 算法

ST算法采用的是倍增的思想&#xff0c;先用O(nlogn)的时间构造一个二维表之后&#xff0c;可以在O(1)的时间查询[l,r]区间的最值 1.ST创建 若F[i,j]表示[i,i2^j-1]区间的最值&#xff0c;区间长度为2^j&#xff0c;则i和j的取值范围是多少呢&#xff1f; 若数组的长度为n&…

STP介绍

以太网交换网络中为了进行链路备份&#xff0c;提高网络可靠性&#xff0c;通常会使用冗余链路&#xff0c;但是这也带来了网络环路的问题。网络环路会引发广播风暴和MAC地址表震荡等问题&#xff0c;导致用户通信质量差&#xff0c;甚至通信中断。 为了解决交换网络中的环路问…

5.STL

​ STL 的基本概念 什么是 STL STL ( standard template libaray - 标准模板库)&#xff1a;是 C 标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 STL 的六大组件 [外链图片转存失败,源站可能有防盗链机…

基于有限状态机的自动售货机控制电路

1、该售货机的功能为每件商品25元&#xff0c;投入总金额大于25元时可找回零钱。&#xff08;如图为状态转移图&#xff09; 2、使用VHDL实现 library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity veding_machine isport(clk,rst: in std_logic;nickel_in,dime_in,quarter_in …

Kubernetes Pod篇

Pod基础概念&#xff1a; Pod是kubernetes中最小的资源管理组件&#xff0c;Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的&#xff0c;例如&#xff0c;用于管理Pod运行的S…

OpenMMLab MMdetection 目标检测模型系例文章(一)

&#xff08;一&#xff09;、MMDetection 学习和进阶路线&#xff08;一&#xff09; 1、不得不知的 MMDetection 学习路线(个人经验版) 2、轻松掌握 MMDetection 整体构建流程(一) 3、轻松掌握 MMDetection 整体构建流程(二) 4、轻松掌握 MMDetection 中 Head 流程 5、M…

计算机窗口保护颜色,如何设置电脑保护色,教你设置电脑保护色

如何设置电脑保护色呢&#xff1f;长期对着电脑屏幕&#xff0c;眼睛就会出现干涩&#xff0c;长时间就会影响视力&#xff0c;那么有没有好的办法缓解电脑屏幕给眼睛带来的伤害呢&#xff1f;其实方法是有的&#xff0c;下面小编带您看下设置电脑保护色来保护眼睛的方法吧。 对…

Redis6之穿透、击穿、雪崩

大量的高并发的请求打在Redis上&#xff0c;但是发现Redis中并没有请求的数据&#xff0c;redis的命令率降低&#xff0c;所以这些请求就只能直接打在DB&#xff08;数据库服务器&#xff09;上&#xff0c;在大量的高并发的请求下就会导致DB直接卡死、宕机。 缓存穿透 当客户端…