大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) Java內(nèi)存溢出的原因

Java內(nèi)存溢出的原因

更新時(shí)間:2022-04-21 10:59:24 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1174次

JVM創(chuàng)建者在設(shè)計(jì)它時(shí)考慮了自動(dòng)內(nèi)存管理,這意味著程序員不需要擔(dān)心內(nèi)存分配和內(nèi)存。未使用的對(duì)象可以以透明的方式自動(dòng)釋放,這非常方便,尤其是當(dāng)您剛接觸JVM時(shí)。但是,即使是一般情況下,要編寫的代碼也比傳統(tǒng)方法少,而且不容易出錯(cuò),因?yàn)閭鹘y(tǒng)方法要求您手動(dòng)執(zhí)行所有操作。

然而,實(shí)際情況并不像聽(tīng)起來(lái)那么理想,尤其是當(dāng)你在開(kāi)發(fā)具有巨大流量的長(zhǎng)壽命應(yīng)用程序時(shí)。雖然在JVM中引起內(nèi)存泄漏比在C中更難,但仍然有可能。選擇GC算法并將其參數(shù)化對(duì)性能也有很大的影響。而且,與任何抽象或自動(dòng)化一樣,如果您希望有意識(shí)地編寫代碼(這是專業(yè)的方法),您需要了解在幕后進(jìn)行了哪些工作,以便能夠預(yù)防或診斷問(wèn)題。讓我們來(lái)看看一些有用的工具和技術(shù),這些工具和技術(shù)將幫助您找到應(yīng)用程序崩潰或減速的原因,而不是快速工作并能夠完成創(chuàng)建它的目的。

OutOfMemoryError

我們需要的第一件事是一段導(dǎo)致OutOfMemoryError的可靠代碼。OutOfMemoryError是JVM引發(fā)的異常,它通知我們內(nèi)存不足。可能有許多可能的原因?qū)е聮伋龃水惓#梢圆榭串惓5脑蛞粤私獍l(fā)生了什么。現(xiàn)在,讓我們編寫一個(gè)應(yīng)用程序,它會(huì)不斷地分配內(nèi)存,直到超過(guò)內(nèi)存限制為止;

// file Application.scala
object Application {
  def main(args: Array[String]): Unit = {
    LazyList.from(0).toList
  }
}

編譯一下:

scalac Application.scala

設(shè)置堆大小:

scala Application -J-Xmx10m -J-Xms10m

Xms和Xmx是JVM標(biāo)志,指定應(yīng)用程序的堆大小(或者簡(jiǎn)單地說(shuō),應(yīng)用程序?qū)碛卸嗌賰?nèi)存),其中Xms代表堆的初始大小,Xmx代表最大大小。

在我們的例子中,10MB是一個(gè)足夠小的值,可以很快體驗(yàn)到內(nèi)存不足。我們可以看到應(yīng)用程序崩潰,錯(cuò)誤如下:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

內(nèi)存泄露的原因

在這種情況下,問(wèn)題很明顯。我們只有一個(gè)Java線程和一行代碼。當(dāng)然,實(shí)際應(yīng)用程序要比這復(fù)雜得多。當(dāng)我們?cè)谏a(chǎn)中看到OutOfMemoryError時(shí),查看堆棧跟蹤對(duì)我們沒(méi)有幫助,因?yàn)閷?dǎo)致問(wèn)題的行是相當(dāng)隨機(jī)的,我們正在尋找一個(gè)分配內(nèi)存且不釋放內(nèi)存的代碼。我們可以在JVM內(nèi)部查找問(wèn)題的根源。

讓我們添加一個(gè)-XX:+HeapDumpOnOutOfMemoryError標(biāo)志,它將導(dǎo)致在OutOfMemoryError時(shí)生成堆轉(zhuǎn)儲(chǔ)。

scala Application -J-Xmx10m -J-Xms10m -J-XX:+HeapDumpOnOutOfMemoryError

我們可以看到,當(dāng)我們的應(yīng)用程序崩潰時(shí),生成了一個(gè)擴(kuò)展名為.hprof和PID的文件。這個(gè)文件是二進(jìn)制的,所以我們需要一些工具來(lái)查看里面的內(nèi)容。有很多工具可以完成這項(xiàng)工作,即使是在線的——比如HeapHero(http://heaphero.io/),如果數(shù)據(jù)不敏感,則可以使用。

導(dǎo)入文件后,您可以檢查的最有用的內(nèi)容是所有已分配對(duì)象的列表及其使用的內(nèi)存百分比。我們可以從scala.collection.immutable不可變以及幾乎構(gòu)成整個(gè)堆的整數(shù)。這與我們?cè)陧?xiàng)目中所做的是一致的。列表和整數(shù)是顯而易見(jiàn)的,因?yàn)槲覀儎?chuàng)建List[int]作為結(jié)果。缺點(diǎn). 這是因?yàn)镾cala的LazyList使用了memorization,所以它保留了對(duì)所有元素的引用。

在磁盤空間明顯受限的環(huán)境中(例如在云中),使用-XX:+HeapDumpOnOutOfMemoryError選項(xiàng)時(shí)要小心。這是一個(gè)完整的堆轉(zhuǎn)儲(chǔ),這意味著在OutOfMemoryError的情況下,它至少與最大堆大小一樣大。對(duì)于大的堆,這可能比分配給映像的磁盤空間大得多(因?yàn)槟赡懿恍枰嗫臻g,因?yàn)樽詈貌灰獜姆?wù)直接寫入磁盤)。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-04-24 搶座中
  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产三级做爰在线播放最爱 | 亚洲一区二区三区日本久久九 | 久久精品青草社区 | 久久久精品免费国产四虎 | 91精品久久久| 免费观看男女羞羞的视频网站 | 九九热视频在线免费观看 | 一区二区三区免费在线观看 | 在线免费观看亚洲视频 | 成人在线视频网 | 橘子视频在线观看 | 天堂日韩 | 曰本一级毛片免费播放 | 国产精品亚洲欧美一级久久精品 | 国产合集福利视频在线视频 | 亚洲欧美日韩专区 | 国产成人禁片免费观看视频 | 俺来也欧美亚洲a∨在线 | 久久国产精彩视频 | 一级毛片区 | 欧美激情免费观看一区 | 亚洲精品麻豆 | 色综合欧美色综合七久久 | 日日夜夜中文字幕 | 亚洲国产精品久久久久久网站 | 国产欧美精品一区二区三区-老狼 | 日韩午夜在线观看 | 中文字幕在线观看亚洲 | sese视频在线 | 狠狠综合久久久久综合小说网 | 99久久免费精品国产免费高清 | 高清国产一区二区三区 | 四虎网站最新网址 | 亚洲精品国产专区一区 | 亚洲国产综合人成综合网站00 | 国产精品久久久久久永久牛牛 | 亚洲精品色一区二区三区 | 9久9久女女热精品视频免费观看 | 超清中文乱码精品字幕在线观看 | 97影院理论片 | 国产在线麻豆一区二区 |