jvm內(nèi)存溢出分析

概述

jvm中除了程序計數(shù)器,其他的區(qū)域都有可能會發(fā)生內(nèi)存溢出

內(nèi)存溢出是什么?

當(dāng)程序需要申請內(nèi)存的時候,由于沒有足夠的內(nèi)存,此時就會拋出OutOfMemoryError,這就是內(nèi)存溢出

內(nèi)存溢出和內(nèi)存泄漏有什么區(qū)別?

內(nèi)存泄漏是由于使用不當(dāng),把一部分內(nèi)存“丟掉了”,導(dǎo)致這部分內(nèi)存不可用。
當(dāng)在堆中創(chuàng)建了對象,后來沒有使用這個對象了,又沒有把整個對象的相關(guān)引用設(shè)為null。此時垃圾收集器會認(rèn)為這個對象是需要的,就不會清理這部分內(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ù)

我想了解如何學(xué)習(xí)

姓名:
手機:
留言: