1. 程式人生 > >學習筆記 --- JVM 堆溢位、棧溢位、永久代溢位、直接記憶體溢位

學習筆記 --- JVM 堆溢位、棧溢位、永久代溢位、直接記憶體溢位

棧溢位(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