jvm內存溢出分析
概述
jvm中除了程序計數(shù)器,其他的區(qū)域都有可能會發(fā)生內存溢出
內存溢出是什么?
當程序需要申請內存的時候,由于沒有足夠的內存,此時就會拋出OutOfMemoryError,這就是內存溢出
內存溢出和內存泄漏有什么區(qū)別?
內存泄漏是由于使用不當,把一部分內存“丟掉了”,導致這部分內存不可用。
當在堆中創(chuàng)建了對象,后來沒有使用這個對象了,又沒有把整個對象的相關引用設為null。此時垃圾收集器會認為這個對象是需要的,就不會清理這部分內存。這就會導致這部分內存不可用。
所以內存泄漏會導致可用的內存減少,進而會導致內存溢出。
用到的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ā)生內存溢出。
下面做一個堆溢出的實驗
執(zhí)行這段代碼的時候,要給jvm指定參數(shù)
//jvm參數(shù):-Xms20m -Xmx20m public class
網友評論