都知道GC的时候会Stop The World,那么你知道STW是如何实现的吗

World机制简称STW,从字面意思也能很直观的知道STW是什么意思:停止整个世界,STW会把Java程序除了垃圾回收线程以外的所有线程全部挂起,整个程序看上去就好像处于停止状态了。在分析STW的实现原理之前,我们先看看为什么GC的时候需要STW。中采用了两种方式来确定线程有没有到达安全点:上面讲了安全点会根据需要进入线程阻塞代码,接下来我们再看看线程是如何被阻塞的:

以下为知识DOC为大家进行整理的相关内容,希望对大家有所帮助!

Stop The World机制简称STWjvm是什么意思,从字面意思也能很直观的知道STW是什么意思:停止整个世界,STW会把Java程序除了垃圾回收线程以外的所有线程全部挂起,整个程序看上去就好像处于停止状态了。

学习Java的朋友肯定都知道Java在运行时会进行垃圾回收(GC)操作,在进行垃圾回收操作的时候就有可能会进入STW状态,当然还有一些其它情况也会进入STW状态,我们就以最常见的GC来分析一下JVM是如何Stop The World的。

为什么要Stop The World

在分析STW的实现原理之前,我们先看看为什么GC的时候需要STW。

以打扫房间为例:

找出所有的垃圾,然后丢弃。把需要留下的东西整理整齐。

在我们打扫房间的时候如果其他人乱摆弄东西、乱扔垃圾jvm是什么意思,将会导致我们的白白忙活了。所以这个时候要大声告诉大家:不要动(Stop The World)。

Stop The World会导致什么问题

既然已经Stop The World了,那么影响也是显而易见的:STW的时候程序会不干活,导致程序无响应。

既然STW会影响到程序响应,那么显然STW的时间越短越好了,所以会引起STW的Full GC的持续时间是Java服务器性能的一个重要指标。

JVM的

在讲STW的原理之前,我们需要先了解JVM中另外一个概念:-安全点。

可以认为是一段特殊的代码,当Java线程执行进入这段代码就表面虚拟机的状态是安全的,是可以进行GC等要求STW状态的操作。

由于GC是可能在任何时候由任何Java线程引起的(只要堆内存不足时),所以当JVM发起GC的时候并不是立马暂停所有的Java线程的,而是会让Java线程继续执行到最近的一个后再暂停,等所有Java线程都Stop以后再进行GC。

中采用了两种方式来确定线程有没有到达安全点:

的实现代码

下面是安全点检测代码:

jvm是什么意思_a是地球b是云c是天空d是什么意思_出轨是本能忠诚是选择啥意思

上面的代码定义了宏,只需要把这个宏插入到Java代码合理的位子就可以了。

上面的代码可以看出,当线程执行到安全点时会先判断一下当前的状态,如果状态为时就会调用block程序来阻塞当前线程。

Java线程是如何被阻塞的

上面讲了安全点会根据需要进入线程阻塞代码,接下来我们再看看线程是如何被阻塞的:

出轨是本能忠诚是选择啥意思_jvm是什么意思_a是地球b是云c是天空d是什么意思

删除了很多不相干的代码和注释后jvm是什么意思,我们可以发现block函数中会等待锁的释放,只要这个锁一直不释放,线程就一直会处于挂起状态,也就是达到了我们想要的STW效果。

STW是如何发起的

前面一篇文章介绍过的.gc()触发Full GC的时候我们介绍了可以往线程中添加来让虚拟机完成一些操作,其中GC都是这么发起的,其实STW也是在循环线程中开启和结束的。当发现某个需要在中执行时就会开启STW,当执行结束后就会关闭STW。具体代码如下:

jvm是什么意思_a是地球b是云c是天空d是什么意思_出轨是本能忠诚是选择啥意思

然后我们看看begin代码:

jvm是什么意思_a是地球b是云c是天空d是什么意思_出轨是本能忠诚是选择啥意思

在begin函数中不只是会设置锁,还会挂起线程,Java线程不同的状态挂起方式也是不一样的,由于设置过程比较复杂这里就不再贴代码:

jvm是什么意思_出轨是本能忠诚是选择啥意思_a是地球b是云c是天空d是什么意思

线程是如何被唤醒的

通过begin方法可以挂起线程、Stop The World,对应的唤起线程使用的是end方法。唤醒大概过程为:

jvm是什么意思_出轨是本能忠诚是选择啥意思_a是地球b是云c是天空d是什么意思

本文地址: https://www.zhishidoc.com/22897.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 859089669@qq.com 举报,一经查实,本站将立刻删除。

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年10月25日 上午6:55
下一篇 2022年10月25日 上午7:05

相关推荐

  • 朋友亲人去世安慰人的话语

    朋友的亲人去世了,适合对他说的安慰的话语会有哪些呢?下面是学习啦小编为你搜集的朋友亲人去世安慰人的话语,希望你喜欢!朋友亲人去世安慰人的话语精选朋友亲人去世安慰人的话语最新关于朋友亲人去世安慰人的话语朋友亲人去世安慰人的话语相关文章:安慰别人家里人去世的话同学亲人去世安慰的话同事亲人去世了如何说安慰的话安慰别人家人去世的话安慰别人亲人去世的话语亲人去世安慰人的句子

    2022年11月7日
    80100
  • 坐标贾浅浅~张宗昌诗作鉴赏

    还是写写一位民国鬼才诗人吧,根据“民国出大师”定律,我要说的这位大师就是张宗昌。在遣词、句法、情感等艺术层次上,皆为传世佳作,与徐志摩相比毫不逊色,堪称“南徐北张”。再看张大帅《咏雪》与《破冰歌》两首诗,这次诗人尝试了用古体诗创作,以七言绝句抒发情感。贾浅浅的诗,味道如何?

    2022年11月5日
    16400
  • 江苏队“小可爱”:在这里没有女孩子,只有护士和战士

    江苏队小可爱,在疫情期间,这个名字相信有不少人听过。2020年3月15号,江苏援湖北医疗队队员李娟娟和76岁患者刘爷爷的一段高甜对话视频走红网络,视频中患者刘爷爷亲切地称呼李娟娟为江苏队小可爱,这条视频的当日播放量超过1亿,感动了无数网友。在这里没有女孩子

    2022年10月30日
    14000
  • 儿子10岁生日祝福语男孩(25句)

    6、每个生日都有礼物,都有祝福,无论你有多少个愿望,多少个梦想,我的礼物是我的心,陪着你成长!7、祝儿子生日快乐,也希望女儿越来越懂事,较后喜欢全家健康!11、愿快乐幸福永伴你左右,生日快乐啊,孩子,妈妈永远爱你。13、在你生日的这一天,将快乐的音符,作为礼物送给你,祝你有一个美好的日子,衷心祝福你我的宝贝儿子,生日快乐!18、时光匆匆,不知不觉儿子已经长大成人,祝儿子生日快乐!

    投稿 2022年11月2日
    13500
  • 珍惜朋友的句子摘抄

    能够在一起的朋友就是最珍贵的存在了。2:生活中若没有朋友,就像生活中没有阳光一样。来感受下朋友在一起的美好,思考你们之间的友谊。5:在欢乐时,朋友们会认识我们;在患难时,我们会认识朋友。患难时候的朋友才是最真实的朋友,珍惜了就是一辈子。7:交一个朋友,需要千言万语;和朋友绝交,只要三言两语。朋友在一起就如每一句打动人心的句子,让你有一种幸福的感觉。一种友情,一个朋友,一种美妙的感受。

    2022年11月2日
    13600

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注