- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- Java 常見(jiàn)的幾種內存溢出異常的原因及解決
內存溢出的異常有很多,并且每種內存溢出都會(huì )有不同的異常信息和解決方式,下面會(huì )列出常見(jiàn)的幾種內存溢出異常
java.lang.OutOfMemoryError: Java heap space
JAVA_OPTS="-server -Xms1024m -Xmx1024m"
表示將堆內存的初始值和最大值都設置為1024m
-Xms設置堆內存的初始值
-Xmx設置堆內存的最大值
-Xms和-Xmx最好設置相同的內存大小,可以防止因為JVM頻繁進(jìn)行內存的調整影響穩定性和使用
通過(guò)JVM參數:-XX:+HeapDumpOnOutOfMemoryError可以讓虛擬機在出現內存溢出的時(shí)候Dump出當前的堆內存快照,便于保留快照分析
java.lang.outOfMemoryError:StackOverFlow Error
默認的-Xss參數的大小應該是1M
棧內存是線(xiàn)程私有的,如果需要創(chuàng )建更多的線(xiàn)程,那么就需要將每個(gè)線(xiàn)程的棧內存空間減小,通過(guò)-Xss參數設置每個(gè)線(xiàn)程的棧內存空間
配置參數: JAVA_OPTS="-server -Xms1024m -Xmx1024m -Xss128k"
jdk8如果沒(méi)有配置-Xss默認大小為512k
-Xss 設置每個(gè)線(xiàn)程的堆棧大小,一般默認512~1024kb,和jdk版本有關(guān)
java.lang.outOfMemoryError: PermGen space
解決方案:
運行時(shí)常量池是方法區的一部分,所以增加方法區的內存大小,相當于間接的增加了運行時(shí)常量池的內存大小
Direct buffer memory
Java 允許應用程序通過(guò) DirectByteBuffer 直接訪(fǎng)問(wèn)堆外內存,許多高性能程序通過(guò) DirectByteBuffer 結合內存映射文件(Memory Mapped File)實(shí)現高速 IO
DirectByteBuffer 的默認大小為 64 MB,一旦使用超出限制,就會(huì )拋出 Direct buffer memory 錯誤。使用NIO則可能會(huì )出現該異常
DirectMemory的內存大小可以通過(guò)-XX:MaxDirectMemorySize指定,如果沒(méi)有設置,則默認和Java堆最大值(-Xmx)一樣
Metaspace
Jdk8 之后使用元空間(metaspace)代替永久代,元空間和永久代最大的區別是元空間的內存使用的是本地內存,而永久代使用的是JVM的內存
永久代、元空間都是方法區的實(shí)現,方法區是規范
元空間中存儲的是類(lèi)信息、常量池、方法描述等信息,直接使用本地內存,當本地內存不足的時(shí)候,會(huì )拋出OutOfMemoryError:Metaspace異常
雖然元空間的內存不是由JVM控制,不過(guò)可以通過(guò)JVM參數來(lái)設置分配的內存空間的大小-XX:MaxMetaspaceSize配置參數
以上就是Java 常見(jiàn)的幾種內存溢出異常及解決的詳細內容,更多關(guān)于Java 內存溢出的資料請關(guān)注腳本之家其它相關(guān)文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站