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