亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中的?stop?the?world是什么呢

 更新時間:2023年05月17日 16:00:11   作者:lovoo  
這篇文章主要介紹了Java中的stop?the?world是什么呢,從字面上講,就是停止這個世界,看到這個字眼,就覺得這是可怕的事情,那到底什么是stop-the-world,本文給大家詳細講解,感興趣的朋友跟隨小編一起看看吧

一、概述;

從字面上講,就是停止這個世界,看到這個字眼,就覺得這是可怕的事情,那到底什么是stop-the-world?

stop-the-world,簡稱 STW,指的是 GC 事件發(fā)生過程中,會產(chǎn)生應(yīng)用程序的停頓。停頓產(chǎn)生時整個應(yīng)用程序線程都會被暫停,沒有任何響應(yīng),有點像卡死的感覺,這個停頓稱為 STW。

舉例:

可達性分析算法中枚舉根節(jié)點(GC Roots)會導(dǎo)致所有Java執(zhí)行線程停頓。

停頓的原因:

  • 分析工作必須在一個能確保一致性的快照中進行
  • 一致性指整個分析期間整個執(zhí)行系統(tǒng)看起來像被凍結(jié)在某個時間點上
  • 如果出現(xiàn)分析過程中對象引用關(guān)系還在不斷變化,則分析結(jié)果的準確性無法保證

二、為什么需要STW(stop the world)

垃圾回收是根據(jù)可達性分析算法,搜索GC Root根的引用鏈,將不在引用鏈上的對象當(dāng)做垃圾回收,設(shè)想我們執(zhí)行某個方法的時候,此時產(chǎn)生了很多局部變量,剛好老年代滿了需要進行Full gc,如果不停止線程,垃圾回收正在根據(jù)這些局部變量也就是GC Root根搜索引用鏈,此時這個方法結(jié)束了,那么這些局部變量就都會被銷毀,這些引用鏈的GC Root根都銷毀了,這些引用當(dāng)然也成了垃圾對象,這樣就會導(dǎo)致在垃圾回收的過程中還會不斷的產(chǎn)生新的垃圾。

但是Stop-The-World的結(jié)果是比較嚴重的,如果用戶正在瀏覽你的網(wǎng)站,應(yīng)用程序突然Stop-The-World,所有線程被掛起,那么用戶就會感覺你的網(wǎng)站卡住了,盡管gc時間是比較快的,但是如果并發(fā)量比較大,用戶感知是比較明顯的,會影響用戶體驗。

簡明地說:

java進行垃圾回收時使用可達性分析,從GC Root向下判斷對象是否有引用,如果不把所有線程進入safe points并阻塞起來就會出現(xiàn)對象上一秒沒有引用被刪除,后一秒又出現(xiàn)引用,導(dǎo)致錯誤的產(chǎn)生

三、stop-the-world示例:

被 STW 中斷的應(yīng)用程序線程會在完成 GC 之后恢復(fù),頻繁中斷會讓用戶感覺像是網(wǎng)速不快造成電影卡頓一樣,所以我們需要減少 STW 的發(fā)生。

STW 事件和采用哪款 GC 無關(guān),所有的 GC 都有這個事件。

哪怕是G1也不能完全避免Stop一the一world情況發(fā)生,只能說垃圾回收器越來越優(yōu)秀,回收效率越來越高,盡可能地縮短了暫停時間。

STW是JVM在后臺自動發(fā)起和自動完成的。在用戶不可見的情況下,把用戶正常的工作線程全部停掉。
開發(fā)中采用System.gc();會導(dǎo)致Stop一the一world的發(fā)生。

源碼:

import java.util.ArrayList;
import java.util.List;
public class StopTheWorldDemo {
    public static void main(String[] args) {
        WorkThread w = new WorkThread();
        PrintThread p = new PrintThread();
        w.start();
        p.start();
    }
    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();//會觸發(fā)full gc,進而會出現(xiàn)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();
            }
        }
    }
}

運行結(jié)果:

從結(jié)果可以看出:
W線程當(dāng)中的GC觸發(fā)了STW,進而干擾了P線程有規(guī)律性打印。打印變得雜亂無章

源碼下載:
gitee.com/charlinchenlin/koo-erp

到此這篇關(guān)于Java中的 stop the world是什么呢的文章就介紹到這了,更多相關(guān)java stop the world內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決idea不支持SpringBoot yml文件的圖文教程

    解決idea不支持SpringBoot yml文件的圖文教程

    這篇文章主要介紹了解決idea不支持SpringBoot yml文件,需要的朋友可以參考下
    2018-06-06
  • java常見的字符串拼接方式總結(jié)

    java常見的字符串拼接方式總結(jié)

    這篇文章主要為大家詳細介紹了java中常見的字符串拼接方式,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09
  • SpringMVC數(shù)據(jù)響應(yīng)詳細介紹

    SpringMVC數(shù)據(jù)響應(yīng)詳細介紹

    Spring MVC 是 Spring 提供的一個基于 MVC 設(shè)計模式的輕量級 Web 開發(fā)框架,本質(zhì)上相當(dāng)于 Servlet,Spring MVC 角色劃分清晰,分工明細,本章來講解SpringMVC數(shù)據(jù)響應(yīng)
    2023-02-02
  • Java中八種基本數(shù)據(jù)類型的默認值

    Java中八種基本數(shù)據(jù)類型的默認值

    這篇文章主要介紹了Java中八種基本數(shù)據(jù)類型的默認值 的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • logback的UNDEFINED_PROPERTY屬性源碼執(zhí)行流程解讀

    logback的UNDEFINED_PROPERTY屬性源碼執(zhí)行流程解讀

    這篇文章主要為大家介紹了logback的UNDEFINED_PROPERTY屬性源碼執(zhí)行流程解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Spring cloud oauth2如何搭建認證資源中心

    Spring cloud oauth2如何搭建認證資源中心

    這篇文章主要介紹了Spring cloud oauth2如何搭建認證資源中心,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 從Android源碼剖析Intent查詢匹配的實現(xiàn)

    從Android源碼剖析Intent查詢匹配的實現(xiàn)

    這篇文章主要介紹了從Android源碼剖析Intent查詢匹配的實現(xiàn),Intent部分的源碼為Java代碼,需要的朋友可以參考下
    2015-07-07
  • JavaWeb實現(xiàn)郵件發(fā)送功能

    JavaWeb實現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細介紹了JavaWeb實現(xiàn)郵件發(fā)送功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Spring Cloud Nacos 和 Eureka區(qū)別解析

    Spring Cloud Nacos 和 Eureka區(qū)別解析

    Spring Cloud Nacos 和 Spring Cloud Eureka 都是 Spring Cloud 微服務(wù)框架中的服務(wù)注冊和發(fā)現(xiàn)組件,用于幫助開發(fā)者輕松地構(gòu)建和管理微服務(wù)應(yīng)用,這篇文章主要介紹了Spring Cloud Nacos 和 Eureka區(qū)別,需要的朋友可以參考下
    2023-08-08
  • JPA框架實現(xiàn)分頁查詢和條件查詢功能詳解

    JPA框架實現(xiàn)分頁查詢和條件查詢功能詳解

    這篇文章主要介紹了JPA框架實現(xiàn)分頁查詢和條件查詢功能,JPA是Java Persistence API的簡稱,在過去很多數(shù)據(jù)庫的增刪查改操作都是用這個框架操作的,感興趣想要詳細了解可以參考下文
    2023-05-05

最新評論