轉自:http://www.java265.com/JavaMianJing/202110/16349105381543.html
java中記憶體洩漏和記憶體溢出指什麼呢? 下文筆者講述java中常見的記憶體洩漏和記憶體溢出的相關簡介說明,如下所示:
記憶體洩漏
記憶體洩漏是指對象執行個體在建立和使用完畢後
仍然被引用,沒能被垃圾回收釋放,一直積累,
直到沒有剩餘記憶體可用
當存在記憶體洩露時,我們需找出洩露的對象是怎麼被GC ROOT引用起來
然後通過引用鍊來具體分析洩露的原因
分析記憶體洩漏的工具有:Jprofiler,visualvm等。
記憶體溢出
記憶體溢出是指當我們建立一個執行個體對象時,
執行個體對象所需占用的記憶體空間大于堆的可用空間。
棧(JVM Stack)存放主要是棧幀( 局部變量表, 操作數棧 , 動态連結 , 方法出口資訊 )的地方。
注意區分棧和棧幀:
棧裡包含棧幀。
與線程棧相關的記憶體異常有兩個:
1.StackOverflowError(方法調用層次太深,記憶體不夠建立棧幀)
2.OutOfMemoryError(線程太多,記憶體不夠建立線程)
當出現了記憶體溢出問題,
這種情況通常是程式運作所需的記憶體大于了我們給jvm虛拟機配置的記憶體
這種情況下,我們可以采用調大-Xmx來解決這種問題
例:
定義幾十個超級大的字元串,此時将會直接導緻記憶體溢出