工作執行緒記憶體溢位(OOM)不會停止其他執行緒執行

2021-10-05 10:20:43 字數 823 閱讀 7061

在多執行緒環境下,每個執行緒擁有乙個棧和乙個程式計數器。棧和程式計數器用來儲存執行緒的執行歷史和執行緒的執行狀態,是執行緒私有的資源。其他的資源(比如堆、位址空間、全域性變數)是由同乙個程序內的多個執行緒共享。

錯誤思想:

如果堆記憶體是共享的話,那麼單獨的子執行緒記憶體溢位也就是堆占用滿了,所以其他執行緒自然也就不能工作了。

進行試驗:

**:

public static void main(string args)  catch (exception e) 

}});

mthreadtest.start();

new thread(new runnable() catch (interruptedexception e)

system.out.println("test");}}

}).start();

}

結果:

原因:

9:43:00 前後,記憶體到達乙個峰值以後立刻就降下來了。並且列印出outofmemoryerror,列印test的執行緒仍在繼續執行

結論:

當乙個執行緒丟擲oom異常後,它所佔據的記憶體資源會全部被釋放掉,從而不會影響其他執行緒的執行

棧溢位,記憶體溢位

對於一台伺服器而言,每乙個使用者請求,都會產生乙個執行緒來處理這個請求,每乙個執行緒對應著乙個棧,棧會分配記憶體,此時如果請求過多,這時候記憶體不夠了,就會發生棧記憶體溢位。棧溢位是指不斷的呼叫方法,不斷的壓棧,最終超出了棧允許的棧深度,就會發生棧溢位,比如遞迴操作沒有終止,死迴圈。可以把記憶體比作...

linux 記憶體溢位排查 mysql記憶體溢位處理

業務場景 mysql 元件版本 mysql 5.7.25軟體架構 兩主兩從 01問題描述 mysql是乙個關係型資料庫管理系統,屬於oracle旗下產品。mysql是最流行的關係型資料庫管理系統之一,在web應用方面,mysql是最好的rdbms relational database manage...

mysql防止記憶體溢位 mysql記憶體溢位處理

主庫實列發生oom,例項程序由於占用記憶體達到linux系統的最大閾值,導致linux系統kill了mysql例項程序,可以通過如下方式檢視mysql使用了多少記憶體 檢視每個執行緒占用多少記憶體,然後乘以正在執行的執行緒 也就是排查sleep的 select read buffer size re...