java除了堆和元空間佔用內存外,還有哪些區域佔用內存?

java除了堆和元空間佔用內存外,還有哪些區域佔用內存?
1. Direct Memory:能夠經過-XX:MaxDirectMemorySize調整大小,內存不足時拋出OutMemoryError或OutOfMemory:Direct buffer memory
 
 2. 線程堆棧:可經過-Xss調整大小,內存不足時拋出StackOverflowError(縱向沒法分配,即沒法分配新的棧幀)或OutOfMemoryError:uable to create new native thread(橫向沒法分配,即沒法創建新的線程)

 3. Scoket緩存區:每一個Socket鏈接都有Receive和Send兩個緩存區,分別佔大約37KB和25KB的內存,若是鏈接多的話,這塊內存的佔用也比較多,若是沒法分配,則可能會拋出IOException:Too    many open file異常。

 4. JNI代碼:若是代碼中使用JNI調用本地庫,那本地庫使用的內存也不在堆中。

 5. 虛擬機和GC:虛擬機和GC的代碼執行也要消耗必定的內存。
相關文章
相關標籤/搜索