分享幾個JVM的容易忽視的問題,但願對你們有所幫助緩存
-Xms
表示JVM
啓動時分配的內存、-Xmx
表示JVM
運行過程當中最大可用內存。-Xss
決定,而棧內存取決於棧幀數量,即棧深度,以及每一個棧幀的大小。2
種異常分爲OOM
以及StackOverflowError
,那麼,取決於什麼狀況,會拋相應的異常呢?取決於棧內存是否支持擴展,HotSpot虛擬機不支持擴展jvm
HotSpot
虛擬機不支持擴展,所以OOM
的發生狀況:建立線程時就由於沒法得到足夠內存而出現OOM
,建立線程時內存不足,偏偏緣由多是每一個線程的棧分配內存設置過大,在操做系統內存使用狀態的影響下發生。-Xss
所決定的棧內存容量,就會拋出StackOverflowError
。String::intern()
)String::intern()
、靜態變量等移出到堆內存;JDK8徹底放棄永久代,改用本地內存的元空間(類型信息也移到了元空間)。String::intern()
來製造方法區和常量池的OOM
一、JDK6或更早:字符串常量池大小增加,致使永久代的內存大小超過
-XX:MaxPermSize
規定的大小,致使出現PermGen space
出現OOM
。 二、JDK7開始,字符串常量池移入Java堆中,使用String::intern()
報出OOM
也是Java heap space
xss
OOM
PermGen space
出現OOM
Java heap space