[英]Running while loop infinitely without any code inside in java
假設我寫了一個無限寫循環,但里面沒有語句? 它會產生任何問題,如內存已滿等或 JVM 會在一段時間后停止響應?
你為什么要做這樣的事情?
要回答,它不會消耗無限內存,但 Cpu 使用可能會很痛苦,根本沒有任何指令。
至少,你應該幫助 CPU 搶占,允許線程讓出:
Thread.yield();
您可以在Java Api Javadoc 中閱讀:
向調度程序提示當前線程願意放棄其當前對處理器的使用。 調度程序可以隨意忽略此提示。
Yield 是一種啟發式嘗試,旨在改善線程之間的相對進展,否則會過度使用 CPU。 它的使用應與詳細的分析和基准測試相結合,以確保它確實具有預期的效果。
很少適合使用這種方法。 它對於調試或測試目的可能很有用,它可能有助於重現由於競爭條件引起的錯誤。 在設計並發控制結構(例如 java.util.concurrent.locks 包中的結構)時,它也可能很有用。
無限循環可能並且可能會導致 100% 的 CPU 核心利用率。 根據“寫循環”的含義,類似的技術稱為Busy Waiting 或 Spinning 。
作為一種時間延遲技術的自旋通常會產生不可預測甚至不一致的結果,除非實現代碼以確定處理器可以多快地執行“什么都不做”循環,或者循環代碼顯式檢查實時時鍾
您肯定會保持一個硬件線程忙碌。 它不會創建任何對象,因此內存不是一個直接的問題。
但是,上下文很重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.