學習筆記 --- JVM 堆溢位、棧溢位、永久代溢位、直接記憶體溢位
阿新 • • 發佈:2018-12-19
棧溢位(StackOverflowError)
--- 遞迴引起 棧空間不足
--- 執行緒請求的棧深度大於虛擬機器所允許的最大深度,將丟擲StackOverflowError
堆溢位(OutOfMemoryError:Java heap space)
--- 死迴圈,或者記憶體不夠,建立物件時如果沒有可以分配的堆記憶體
--- 虛擬機器在擴充套件棧深度時無法申請到足夠的記憶體空間,將丟擲OutOfMemberError
永久代溢位(OutOfMemoryError: PermGen space)
--- 常量池溢位
--- 方法區溢位
直接記憶體溢位
--- DirectMemory可以通過-XX:MaxDirectMemorySize指定,如果不指定,預設與Java堆的最大值(-Xmx指定)一樣。
--- NIO會使用到直接記憶體
棧記憶體溢位:程式所要求的棧深度過大。
堆記憶體溢位: 分清記憶體洩露還是 記憶體容量不足。洩露則看物件如何被 GC Root 引用,不足則通過調大-Xms,-Xmx引數。
永久代溢位:Class物件未被釋放,Class物件佔用資訊過多,有過多的Class物件。
直接記憶體溢位:系統哪些地方會使用直接記憶體。
參考:寫程式碼實現堆溢位、棧溢位、永久代溢位、直接記憶體溢位
https://blog.csdn.net/u011983531/article/details/63250882