国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

喪心病狂,竟有Thread.sleep(0)這種神仙寫法?

開發 前端
Thread.sleep(0)?不是什么無用的代碼。sleep 方法可用于在 java 代碼中放置一個安全點??梢蕴崆霸陂L循環中觸發GC,避免GC線程長時間等待,從而避免達到拉長GC時間的目的。

?前言

最近在網上看到了一段代碼,讓我感到很迷茫。他在代碼中使用了Thread.sleep(0),讓線程休眠時間為0秒,具體代碼如下。

int i = 0;
while (i<10000000) {
// business logic

//prevent long time gc
if (i % 3000 == 0) {
try {
Thread.sleep(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

sleep了0秒,不就是不睡覺嗎?我的第一反應是這段代碼沒什么用,但是看到他的注釋又引起了我的興趣。經過一番研究,看似無用的一段代碼,其實大有文章。

探索分析

為了找到原因,首先去看下sleep?方法的javadoc,如下:

Causes the currently executing thread to sleep (temporarily ceaseexecution) for the specified number of milliseconds, subject tothe precision and accuracy of system timers and schedulers. The thread does not lose ownership of any monitors.

顯然沒有得到正確的答案,最后在詢問作者說是使用Thread.sleep(0)可以暫時釋放CPU時間線。

時間片循環調度算法

在操作系統中,CPU有很多競爭策略。Unix系統采用時間片循環調度算法。在該算法中,所有進程都被分組到一個隊列中。操作系統按順序為每個進程分配一定的時間,即允許進程運行的時間。如果在時間片結束時進程仍在運行,則CPU將被剝奪并分配給另一個進程,如果進程在時間片內阻塞或結束,則CPU立即切換。調度程序所要做的就是維護一個就緒進程表。當進程用完時間片時,它將被移到隊列的末尾。

上面的代碼中存在死循環。作者希望一直用一個線程來處理業務邏輯。如果Thread.sleep(0)?不使用主動放棄CPU時間片,線程資源會一直被占用。眾所周知,GC 線程具有低優先級,因此Thread.sleep(0)?用于幫助 GC 線程嘗試競爭 CPU 時間片。但是為什么作者說可以防止long time GC呢?這就講到JVM的垃圾回收原理了。

GC的安全點

以HotSpot?虛擬機為例,JVM并不會在代碼指令流的任何位置暫停以啟動垃圾回收,而是強制執行必須到達安全點才暫停。換句話說,在到達安全點之前,JVM 不會為 GC STOP THE WORLD。

JVM 會在一些循環跳轉和方法調用上設置安全點。不過,為了避免安全點過多帶來的沉重負擔,HotSpot虛擬機還有一個針對循環的優化措施。如果循環次數少,執行時間不宜過長。因此,默認情況下不會將使用 int 或更小數據類型作為索引值的循環放置在安全點中。這種循環稱為可數循環。相應地,使用long或更大范圍的數據類型作為索引值的循環稱為未計數循環,將被放置在安全點。

但是,我們這里正好有一個可數循環,所以我們的代碼不會放在安全點。因此,GC線程必須等到線程執行完畢,才能執行到最近的安全點。但如果使用Thread.sleep(0)?,則可以在代碼中放置一個安全點。我們可以看下HotSpot的safepoint.cpp源碼中的注釋,做除了說明。

// Begin the process of bringing the system to a safepoint.
// Java threads can be in several different states and are
// stopped by different mechanisms:
//
// 1. Running interpreted
// The interpeter dispatch table is changed to force it to
// check for a safepoint condition between bytecodes.
// 2. Running in native code
// When returning from the native code, a Java thread must check
// the safepoint _state to see if we must block. If the
// VM thread sees a Java thread in native, it does
// not wait for this thread to block. The order of the memory
// writes and reads of both the safepoint state and the Java
// threads state is critical. In order to guarantee that the
// memory writes are serialized with respect to each other,
// the VM thread issues a memory barrier instruction
// (on MP systems). In order to avoid the overhead of issuing
// a memory barrier for each Java thread making native calls, each Java
// thread performs a write to a single memory page after changing
// the thread state. The VM thread performs a sequence of
// mprotect OS calls which forces all previous writes from all
// Java threads to be serialized. This is done in the
// os::serialize_thread_states() call. This has proven to be
// much more efficient than executing a membar instruction
// on every call to native code.
// 3. Running compiled Code
// Compiled code reads a global (Safepoint Polling) page that
// is set to fault if we are trying to get to a safepoint.
// 4. Blocked
// A thread which is blocked will not be allowed to return from the
// block condition until the safepoint operation is complete.
// 5. In VM or Transitioning between states
// If a Java thread is currently running in the VM or transitioning
// between states, the safepointing code will wait for the thread to
// block itself when it attempts transitions to a new state.

可以看上面的第2點 Running in native code?,而Thread.sleep(long millis)?是一種native方法。

總結

Thread.sleep(0)?不是什么無用的代碼。sleep 方法可用于在 java 代碼中放置一個安全點??梢蕴崆霸陂L循環中觸發GC,避免GC線程長時間等待,從而避免達到拉長GC時間的目的。

責任編輯:武曉燕 來源: JAVA旭陽
相關推薦

2024-11-18 17:06:11

Java線程

2022-08-29 10:52:37

線程函數操作系統

2020-04-26 14:40:19

戴爾

2018-04-10 12:04:25

程序員互聯網網絡

2022-05-24 12:57:49

函數代碼Java

2023-10-19 06:59:12

2023-03-01 16:26:20

馬斯克裁員

2009-06-27 11:34:32

2016-10-11 08:53:38

Chrome瀏覽器Google

2023-05-10 07:42:26

Java多線程編程

2014-02-04 08:18:51

2022-04-18 07:36:37

TimeUnit線程休眠

2017-10-24 13:42:55

流氓App安卓Google

2020-08-20 07:38:51

Java字符串整形

2024-04-12 09:02:15

JavaCPU執行時間線程

2013-06-18 09:12:00

技術開發

2021-03-09 08:03:21

Node.js 線程JavaScript

2009-10-12 13:32:58

VB.NET線程構造器

2013-06-18 09:28:12

程序員技術病

2015-12-08 11:30:01

WiFiWiFi技術過敏
點贊
收藏

51CTO技術棧公眾號

亚洲国产高潮在线观看| 韩国成人在线| 日韩欧美电影在线观看| 国产资源在线视频| 九色一区二区| 狠狠色狠狠色综合人人| 欧美国产日本高清在线 | 精品国产18久久久久久洗澡| 欧美亚洲tv| 成人在线国产| 亚洲老妇激情| 91久久久精品国产| 天天综合久久| 久久久精品五月天| 国产精品18久久久久久久久| 欧美一区亚洲| 国内自拍一区| 久久精品久久精品| 国产呦萝稀缺另类资源| 国产视频一区在线观看| 亚洲成人777| 色诱视频网站一区| 日本韩国一区二区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 精品1区2区3区| 精品久久久久久久久久久久久久久 | 777午夜精品免费视频| 国产精品久久久一区麻豆最新章节| 欧美性色视频在线| 3d成人动漫网站| 久久久免费观看视频| 国产精品国产三级欧美二区 | 777电影在线观看| 亚洲网站免费| 国产日产高清欧美一区二区三区| 国产麻豆成人精品| 国产精品欧美一级免费| 欧美岛国在线观看| 高清视频欧美一级| 91色琪琪电影亚洲精品久久| y4480在线8影院| 在线男人天堂| 国产真实伦在线观看| 久久婷婷国产综合国色天香 | 调教视频vk| 亚洲国产精品视频| 久久草av在线| 在线观看免费亚洲| 国产69精品99久久久久久宅男| 色乱码一区二区三在线看| 影音先锋电影在线观看| 国产精品对白久久久久粗| 97久久超碰国产精品| 成年人三级视频| jlzzjlzz欧美| 日韩午夜电影免费看| 国产成人综合在线观看| 色系网站成人免费| 亚洲最大成人免费视频| 久久.com| 欧美日韩在线二区| 国产一区二区网址| 亚洲国产第一页| 区一区二区三区中文字幕| 日本欧美韩国| 久久视频中文字幕| 精品久久免费看| 欧美123区| 欧美成人69| 黄色精品视频网站| 欧美日韩国产黄| av激情成人网| 日韩激情在线| 国产精品一区在线观看乱码| 中文字幕不卡一区| 热久久99这里有精品| 国产在线91| 国产一区二区三区四区三区四| 激情综合五月天| 亚洲乱码国产乱码精品精98午夜| av一区二区三区| 亚洲成av人片一区二区三区| 一道本无吗dⅴd在线播放一区| 久久久免费电影| 免费av网址在线| 日韩高清一级| 国产午夜精品一区二区三区嫩草| 亚洲二区中文字幕| 亚洲一区二区在线播放| 亚洲一区二区三区四区在线观看| 日韩欧美亚洲成人| av网站免费线看精品| 日韩亚洲欧美视频| 深夜福利久久| 国产精品高清一区二区| 视频国产精品| 欧美国产精品一区二区三区| 国产欧美日韩亚洲精品| 中日韩一区二区三区| 精品午夜久久福利影院| 欧美黑人极品猛少妇色xxxxx| 精品久久久久久久中文字幕| 九九精品视频在线观看| 国产一二三区在线视频| 成人免费视频一区二区| 不卡一区二区三区视频| 国产精品**亚洲精品| 亚洲欧美中日韩| 日韩专区第三页| 希岛爱理一区二区三区| 夜夜嗨av色一区二区不卡| 91在线免费看| 亚洲欧美日韩一区二区三区在线观看 | 91在线精品播放| 免费女人黄页| 91婷婷韩国欧美一区二区| 91在线国产电影| 日本不卡一区二区| 色妞欧美日韩在线| 国产欧美日韩视频在线观看| 精品国产拍在线观看| 国内精品久久久久国产| 黑人精品xxx一区一二区| 色视频在线看| 成人久久综合| 日韩暖暖在线视频| 伊人久久大香线蕉综合四虎小说| 国产精品极品尤物在线观看| 国产呻吟对白刺激无套视频在线| 久久久久久久久久久久电影| 九九精品在线播放| 久久久久毛片| 久久6精品影院| 精品国产一区探花在线观看| 国产成人精品免费视频大全最热| 另类av一区二区| 日本精品久久久久久久久久| 亚洲欧美日韩国产中文在线| 精品无人乱码| 一区二区三区在线观看网站| 青春草在线视频免费观看| 久久人人爽国产| 国产激情片在线观看| 亚洲激情专区| 国外成人在线播放| 手机在线免费av| 亚洲一区二区三区四区在线免费观看| 亚洲高清123| 国产欧美精品| 成人动漫视频在线观看完整版| 午夜精品久久久久久毛片| 日韩黄色网络| 欧美xxxxx牲另类人与| 色网站免费在线观看| 欧美午夜精品伦理| 户外极限露出调教在线视频| 国产精品第一页第二页第三页| 天美星空大象mv在线观看视频| 国产麻豆一精品一av一免费| 国产亚洲精品久久久久久| 最大av网站| 欧美日韩精品系列| 日韩av在线播放不卡| 少妇久久久久| 亚洲最新av在线网站| bdsm在线观看播放视频| 亚洲欧美日韩一区| 国产精品无码av无码| 91久色porny| av之家在线观看| 丁香亚洲综合激情啪啪综合| 欧美三级午夜理伦三级老人| 国产91丝袜在线播放九色| 色播亚洲视频在线观看| 免费看欧美美女黄的网站| 青草全福视在线| 国产日产精品1区| 成人在线免费播放视频| 亚洲免费观看视频| 神马精品久久| 欧美在线免费观看视频| 久久精品蜜桃| 精品日韩欧美一区二区| 一区二区在线视频观看| 国产成人精品电影久久久| 97久久视频| 无码人妻h动漫| 亚洲视频综合在线| 国产对白叫床清晰在线播放| 亚洲国产99精品国自产| 亚洲欧美在线人成swag| 亚洲综合日韩在线| 国产乱码精品一品二品| 免费观看羞羞视频网站| 在线视频一区二区免费| 华人av在线| 日本欧美黄网站| 蜜桃久久精品一区二区| 91av资源网| 欧美日韩精品免费|