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

概述

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

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

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

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

內(nèi)存泄漏是由于使用不當(dāng),把一部分內(nèi)存“丟掉了”,導(dǎo)致這部分內(nèi)存不可用。
當(dāng)在堆中創(chuàng)建了對(duì)象,后來沒有使用這個(gè)對(duì)象了,又沒有把整個(gè)對(duì)象的相關(guān)引用設(shè)為null。此時(shí)垃圾收集器會(huì)認(rèn)為這個(gè)對(duì)象是需要的,就不會(huì)清理這部分內(nèi)存。這就會(huì)導(dǎo)致這部分內(nèi)存不可用。
所以內(nèi)存泄漏會(huì)導(dǎo)致可用的內(nèi)存減少,進(jìn)而會(huì)導(dǎo)致內(nèi)存溢出。

用到的jvm參數(shù)

下面為了說明溢出的情景,會(huì)執(zhí)行一些實(shí)例代碼,同時(shí)需要給jvm指定參數(shù)

  • -Xms 堆最小容量(heap min size)
  • -Xmx 堆最大容量(heap max size)
  • -Xss 棧容量(stack size)
  • -XX:PermSize=size 永生代最小容量
  • -XX:MaxPermSize=size 永生代最大容量

    堆溢出

    堆是存放對(duì)象的地方,那么只要在堆中瘋狂的創(chuàng)建對(duì)象,那么堆就會(huì)發(fā)生內(nèi)存溢出。


下面做一個(gè)堆溢出的實(shí)驗(yàn)
執(zhí)行這段代碼的時(shí)候,要給jvm指定參數(shù)

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

姓名:
手機(jī):
留言: