日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java中的內(nèi)存泄漏

瀏覽:21日期:2022-08-20 13:14:40

Java.Lang.OutOfMemoryError: Java Heap Space

Java應(yīng)用程序只允許使用有限的內(nèi)存。此限制在應(yīng)用程序啟動期間指定。為了使事情更復(fù)雜,Java內(nèi)存被分成兩個不同的區(qū)域。這些區(qū)域稱為永久生成區(qū)域(permgene和Permgen):

Java中的內(nèi)存泄漏

這些區(qū)域的大小是在Java虛擬機(JVM)啟動期間設(shè)置的,可以通過指定JVM參數(shù)-Xmx和-XX:MaxPermSize進行定制。如果未顯式設(shè)置大小,則將使用特定于平臺的默認值。

這個java.lang.OutOfMemoryError:當(dāng)應(yīng)用程序嘗試向堆空間區(qū)域添加更多數(shù)據(jù),但空間不足時,將觸發(fā)Java堆空間錯誤。

請注意,可能有大量可用的物理內(nèi)存,但是java.lang.OutOfMemoryError:每當(dāng)JVM達到堆大小限制時,就會拋出Java堆空間錯誤。

是什么引起內(nèi)存泄露的?

最常見的原因是java.lang.OutOfMemoryError:Java heap space error ?您嘗試將XXL應(yīng)用程序放入S大小的Java堆空間中。只是Java應(yīng)用程序需要更多的空間來操作。此OutOfMemoryError消息的其他原因更為復(fù)雜,是由編程錯誤引起的:

使用量/數(shù)據(jù)量激增。該應(yīng)用程序設(shè)計為處理一定數(shù)量的用戶或一定數(shù)量的數(shù)據(jù)。當(dāng)用戶數(shù)量或數(shù)據(jù)量突然達到峰值并超過預(yù)期閾值時,在峰值停止運行并觸發(fā)java.lang.OutOfMemoryError:Java堆空間錯誤。 內(nèi)存泄漏。特定類型的編程錯誤將導(dǎo)致應(yīng)用程序不斷消耗更多內(nèi)存。每次使用應(yīng)用程序的泄漏功能時,它都會將一些對象留在Java堆空間中。隨著時間的推移,泄漏的對象會消耗所有可用的Java堆空間,并觸發(fā)已經(jīng)熟悉的java.lang.OutOfMemoryError:Java堆空間錯誤。

內(nèi)存泄漏代碼示例

第一個例子非常簡單?下面的Java代碼嘗試分配一個2M整數(shù)數(shù)組。當(dāng)您編譯它并使用12MB的Java堆空間(Java-Xmx12m-OOM)啟動時,它將失敗java.lang.OutOfMemoryError:Java堆空間消息。有了13MB的Java堆空間,程序運行得很好。

class OOM { static final int SIZE=2*1024*1024; public static void main(String[] a) { int[] i = new int[SIZE]; }}

第二個也是更現(xiàn)實的例子是內(nèi)存泄漏在Java中,當(dāng)開發(fā)人員創(chuàng)建和使用新的對象(如new Integer(5))時,他們不必自己分配內(nèi)存—這是由Java虛擬機(JVM)負責(zé)的。在應(yīng)用程序的生命周期中,JVM會定期檢查內(nèi)存中哪些對象仍在使用,哪些對象沒有使用。未使用的對象可以丟棄,內(nèi)存可以回收并再次使用。這個過程稱為垃圾回收。JVM中負責(zé)收集的相應(yīng)模塊稱為垃圾收集器(GC)。

Java的自動內(nèi)存管理依賴于GC定期查找未使用的對象并將其刪除。簡單地說,java 內(nèi)存泄露是指應(yīng)用程序不再使用某些對象,但垃圾回收無法識別它的情況。因此,這些未使用的對象將無限期地保留在Java堆空間中。這起連環(huán)碰撞最終會觸發(fā)java.lang.OutOfMemoryError:Java堆空間錯誤。

構(gòu)建一個滿足內(nèi)存泄漏定義的Java程序相當(dāng)容易:

class KeylessEntry { static class Key { Integer id; Key(Integer id) { this.id = id; } @Override public int hashCode() { return id.hashCode(); } } public static void main(String[] args) { Map m = new HashMap(); while (true) for (int i = 0; i < 10000; i++) if (!m.containsKey(new Key(i)))m.put(new Key(i), 'Number:' + i); }}

當(dāng)您執(zhí)行上面的代碼時,您可能希望它永遠運行而不會出現(xiàn)任何問題,假設(shè)天真的緩存解決方案只將底層映射擴展到10000個元素,除此之外,所有的鍵都已經(jīng)存在于HashMap中。但是,實際上,由于Key類在hashCode()旁邊沒有適當(dāng)?shù)膃quals()實現(xiàn),所以元素將繼續(xù)被添加。

結(jié)果,隨著時間的推移,隨著泄漏代碼的不斷使用,“緩存”結(jié)果最終會消耗大量Java堆空間。當(dāng)泄漏的內(nèi)存填滿堆區(qū)域中的所有可用內(nèi)存,而垃圾回收無法清理它時java.lang.OutOfMemoryError:引發(fā)Java堆空間。

解決方案很簡單?添加與下面類似的equals()方法的實現(xiàn),您就可以開始了。但在你找到病因之前,你肯定會失去一些珍貴的腦細胞。

@Overridepublic boolean equals(Object o) { boolean response = false; if (o instanceof Key) { response = (((Key)o).id).equals(this.id); } return response;}

內(nèi)存溢出怎么解決?

在某些情況下,分配給JVM的堆的數(shù)量不足以滿足在JVM上運行的應(yīng)用程序的需要。在這種情況下,您應(yīng)該只分配更多的堆—請參閱本章末尾的部分了解如何實現(xiàn)這一點。

然而,在許多情況下,提供更多的Java堆空間并不能解決問題。例如,如果應(yīng)用程序包含內(nèi)存泄漏,則添加更多堆只會推遲java.lang.OutOfMemoryError:Java堆空間錯誤。此外,增加Java堆空間量也會增加GC暫停的長度,從而影響應(yīng)用程序的吞吐量或延遲。

如果您希望解決Java堆空間的底層問題,而不是掩蓋癥狀,那么您需要找出代碼的哪一部分負責(zé)分配最多的內(nèi)存。換句話說,你需要回答以下問題:

哪些對象占據(jù)堆的大部分 在源代碼中分配這些對象

在這一點上,一定要在你的日歷中清除幾天(或者-在項目符號列表下面自動查看)。下面是一個粗略的流程大綱,可以幫助您回答上述問題:

獲得安全許可,以便從JVM執(zhí)行堆轉(zhuǎn)儲。“dump轉(zhuǎn)儲”基本上是堆內(nèi)容的快照,您可以對其進行分析。因此,這些快照可能包含機密信息,如密碼、信用卡號碼等,因此出于安全原因,獲取此類轉(zhuǎn)儲甚至可能不可能。 在適當(dāng)?shù)臅r候把垃圾處理掉。準(zhǔn)備好獲取一些轉(zhuǎn)儲,因為當(dāng)在錯誤的時間執(zhí)行時,堆轉(zhuǎn)儲包含大量的噪聲,實際上可能是無用的。另一方面,每個堆轉(zhuǎn)儲都會完全“freezes凍結(jié)”JVM,所以不要占用太多,否則最終用戶將面臨性能問題。 找一臺能裝垃圾的機器。當(dāng)您的JVM使用例如8GB的堆時,您需要一臺大于8GB的機器來分析堆內(nèi)容。啟動轉(zhuǎn)儲分析軟件(我們推薦Eclipse MAT,但也有同樣好的替代品)。 檢測堆的最大使用者的GC根路徑。我們在這里的另一篇文章中討論了這一活動。這對初學(xué)者來說尤其困難,但實踐將使你了解結(jié)構(gòu)和導(dǎo)航機制。 接下來,您需要弄清楚源代碼中潛在危險的大量對象被分配到哪里。如果您對應(yīng)用程序的源代碼有很好的了解,那么您將能夠在幾次搜索中做到這一點。

或者,我們建議使用plumber,這是唯一一個具有自動根本原因檢測功能的Java監(jiān)控解決方案。在其他性能問題中,它包羅萬象java.lang.OutOfMemoryErrors并自動為您提供有關(guān)最需要內(nèi)存的數(shù)據(jù)結(jié)構(gòu)的信息。

Plumber負責(zé)在后臺收集必要的數(shù)據(jù)——這包括關(guān)于堆使用情況的相關(guān)數(shù)據(jù)(只有對象布局圖,沒有實際數(shù)據(jù)),還有一些甚至在堆轉(zhuǎn)儲中都找不到的數(shù)據(jù)。它還為您執(zhí)行必要的數(shù)據(jù)處理—在運行中,只要JVM遇到j(luò)ava.lang.OutOfMemoryError. 這里有一個例子java.lang.OutOfMemoryError管道工事故警報:

Java中的內(nèi)存泄漏

無需任何其他工具或分析,您可以看到:

哪些對象消耗的內(nèi)存最多 在哪里分配這些對象(它們中的大多數(shù)在MetricManagerImpl類中分配,第304行) 當(dāng)前引用這些對象的是什么(到GC根的完整引用鏈)

有了這些信息,您就可以放大潛在的根本原因,并確保將數(shù)據(jù)結(jié)構(gòu)縮減到適合您的內(nèi)存池的級別。

然而,當(dāng)您從內(nèi)存分析或閱讀plumber報告得出的結(jié)論是內(nèi)存使用是合法的,并且源代碼中沒有什么可更改的,那么您需要允許JVM有更多的Java堆空間來正常運行。在這種情況下,更改JVM啟動配置并添加(或增加值,如果存在):

-Xmx1024m

上述配置將為應(yīng)用程序提供1024MB的Java堆空間。可以使用g或g表示GB,m或m表示MB,k或k表示KB。例如,以下所有內(nèi)容都相當(dāng)于最大Java堆空間為1GB:

java -Xmx1073741824 com.mycompany.MyClass java -Xmx1048576k com.mycompany.MyClass java -Xmx1024m com.mycompany.MyClass java -Xmx1g com.mycompany.MyClass

以上就是Java中的內(nèi)存泄漏的詳細內(nèi)容,更多關(guān)于Java 內(nèi)存泄漏的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区二区三区不卡视频网站 | 蜜桃91丨九色丨蝌蚪91桃色| 亚洲一级高清| 欧美女激情福利| 亚洲综合福利| 亚洲我射av| 欧美一级久久| 国产一区二区三区久久 | 精品久久精品| 1024精品一区二区三区| 免费日韩av片| 欧美精品导航| 99久久精品费精品国产| 国产午夜久久| 国产精品久久久免费| 成人亚洲欧美| 日韩中文字幕91| 欧美黑人巨大videos精品| 午夜av成人| 伊人久久亚洲| 国产精品99久久精品| 国产在线日韩| 日韩av中文字幕一区| 捆绑调教日本一区二区三区| 国产视频一区欧美| 国产精品久久久久久久久免费高清| 成午夜精品一区二区三区软件| 欧美成人午夜| 欧美日韩亚洲一区| 亚洲精品.com| 国产午夜一区| 欧洲激情综合| 国产精品一页| 91成人网在线观看| 欧美三区不卡| 伊人精品一区| 欧美aaaaaa午夜精品| 日韩视频在线一区二区三区 | 亚洲免费播放| 九九99久久精品在免费线bt| 好吊一区二区三区| 欧美国产日本| 日韩专区在线视频| 毛片在线网站| 91嫩草精品| 国产手机视频一区二区| 国产一区二区三区四区二区| 久久亚洲精品伦理| 日韩欧美二区| 欧美激情福利| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 国产精品欧美一区二区三区不卡| 色综合www| 国产精品久久久久久久久久妞妞| 免费观看不卡av| 91欧美日韩| 国产欧美高清视频在线| 国产精品女主播一区二区三区| 捆绑调教日本一区二区三区| 国产亚洲久久| 美国欧美日韩国产在线播放| 日韩久久电影| 精品视频高潮| 国产欧美日韩免费观看| 日韩在线一区二区| 欧洲激情综合| 久久九九精品| 欧美xxxx中国| 精品99久久| 久久免费福利| 国产精成人品2018| 日韩不卡在线观看日韩不卡视频| 国产精品日本欧美一区二区三区| 久久久精品五月天| 9999国产精品| 国产不卡一区| 久久成人福利| 国产九九精品| 国产伦精品一区二区三区在线播放| 亚洲视频国产| 亚洲天堂日韩在线| 石原莉奈在线亚洲二区| 中文在线不卡| 老鸭窝亚洲一区二区三区| 婷婷亚洲五月| 欧美日韩四区| 尤物网精品视频| 国产亚洲在线观看| 噜噜噜躁狠狠躁狠狠精品视频| 午夜久久一区| 另类av一区二区| 国产亚洲永久域名| 男女精品网站| 亚洲日本三级| 欧美天堂在线| 久久99蜜桃| 水蜜桃久久夜色精品一区| 视频在线不卡免费观看| 成人av三级| 91精品国产乱码久久久久久久| 亚洲四虎影院| 亚洲免费成人| 亚洲精品看片| 国产精品调教视频| 狂野欧美性猛交xxxx| 欧美国产美女| 日韩精品一卡| 日韩精品一级二级| 日韩av午夜在线观看| 国产亚洲久久| 丁香婷婷久久| 欧美日韩国产一区二区三区不卡| 在线视频亚洲| 奇米777国产一区国产二区| 久久av网址| 人人精品亚洲| 一区二区高清| 久久精品毛片| 久久国产中文字幕| 免费看日韩精品| 国产精一区二区| 水蜜桃精品av一区二区| 欧美中文一区二区| 亚洲18在线| 91麻豆国产自产在线观看亚洲| 亚洲五月婷婷| 日本成人在线网站| 伊伊综合在线| 免费观看久久久4p| 国产专区精品| 久久亚洲风情| 成人影视亚洲图片在线| 欧美午夜不卡影院在线观看完整版免费| 色8久久久久| 都市激情国产精品| 丝袜美腿亚洲色图| 国产亚洲第一伦理第一区| 国产精品精品国产一区二区| 在线一区电影| 国产精品美女在线观看直播| 999国产精品999久久久久久| 亚洲欧美日本国产| 黄色在线观看www| 婷婷综合国产| 日本精品影院| 国产精品成人一区二区网站软件| 国产中文一区| 麻豆久久久久久久| 在线精品亚洲| 伊人久久av| 日韩一区二区三区高清在线观看 | 国产精品99久久免费观看| 午夜欧美视频| 精品一区二区三区中文字幕| 午夜在线观看免费一区| 精品国产午夜| 亚洲影院天堂中文av色| 一本大道色婷婷在线| 久久精品99国产精品日本| 国产一区欧美| 国产一区福利| 国产探花一区| 亚洲一区二区免费在线观看| 国产精品毛片久久| 欧美久久香蕉| 夜夜嗨av一区二区三区网站四季av| 精品国产亚洲一区二区三区在线 | 久久精品国产久精国产| 99riav国产精品| 成人片免费看| 国产精品大片| 日本综合视频| 日韩精品一级中文字幕精品视频免费观看 | 亚洲久久一区| 国产尤物精品| 日韩欧美精品综合| 免费在线成人| 国产视频一区二区在线播放| 先锋影音久久久| 免费精品国产的网站免费观看| 国产精品麻豆久久| 久久a爱视频| 五月国产精品| 美女久久网站| 国产视频一区在线观看一区免费| www.com.cn成人| 精品国产一区二| 国产精品1区在线| 国产毛片一区二区三区| 亚洲精品黄色| 日韩专区欧美专区| 亚洲一区二区三区高清| 久久中文字幕二区| av资源中文在线天堂| 久久的色偷偷| 久久爱www.| 久草精品视频| 精品一区91| 精品国产美女a久久9999| 麻豆精品在线播放|