jvm內(nèi)存溢出分析
概述
jvm中除了程序計數(shù)器,其他的區(qū)域都有可能會發(fā)生內(nèi)存溢出
內(nèi)存溢出是什么?
當程序需要申請內(nèi)存的時候,由于沒有足夠的內(nèi)存,此時就會拋出OutOfMemoryError,這就是內(nèi)存溢出
內(nèi)存溢出和內(nèi)存泄漏有什么區(qū)別?
內(nèi)存泄漏是由于使用不當,把一部分內(nèi)存“丟掉了”,導(dǎo)致這部分內(nèi)存不可用。
當在堆中創(chuàng)建了對象,后來沒有使用這個對象了,又沒有把整個對象的相關(guān)引用設(shè)為null。此時垃圾收集器會認為這個對象是需要的,就不會清理這部分內(nèi)存。這就會導(dǎo)致這部分內(nèi)存不可用。
所以內(nèi)存泄漏會導(dǎo)致可用的內(nèi)存減少,進而會導(dǎo)致內(nèi)存溢出。
用到的jvm參數(shù)
下面為了說明溢出的情景,會執(zhí)行一些實例代碼,同時需要給jvm指定參數(shù)
- -Xms 堆最小容量(heap min size)
- -Xmx 堆最大容量(heap max size)
- -Xss 棧容量(stack size)
- -XX:PermSize=size 永生代最小容量
-
-XX:MaxPermSize=size 永生代最大容量
堆溢出
堆是存放對象的地方,那么只要在堆中瘋狂的創(chuàng)建對象,那么堆就會發(fā)生內(nèi)存溢出。
下面做一個堆溢出的實驗
執(zhí)行這段代碼的時候,要給jvm指定參數(shù)
//jvm參數(shù):-Xms20m -Xmx20m public class
網(wǎng)友評論