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
        		

網友評論