簡體   English   中英

關於使用Collection對象時的Java堆空間

[英]About Java heap space while using Collection objects

我正在使用集合對象(主要是Arraylist, hashmap )。 我的程序正在運行24 * 7。 在這之間,有時會拋出內存不足錯誤:Java堆空間。 我已經為JVM提供了1gb的空間。我的問題是我是否需要為每個方法使用Collection的Global對象還是local對象?

(我每天必須連續24 * 7連續處理近1000000個數據)

您還可以將堆空間設置為2GB,然后查看問題是否仍然出現。 那就是窮人的內存泄漏檢測過程。 否則,請使用諸如VisualVM之類的探查器,並檢查內存泄漏。

您可以使用諸如Sonar之類的源代碼質量工具。

您還可以使用Eclipse Memory Analysis工具 它使您能夠分析堆轉儲並找出哪個進程正在使用最大內存。 分析具有數億個對象的生產性堆轉儲,快速計算對象的保留大小,查看誰阻止垃圾收集器收集對象,運行報告以自動提取泄漏的可疑對象。

我總是用它來修復OutOfMemory異常。

所有的答案都非常有用:1.當程序的要求是運行24 * 7時,請在方法中使用局部變量。 2.程序必須是線程安全的(如果使用線程)。 3.使用連接池,因為當您的連接對象在無限循環中使用時,每次創建和銷毀都是一個很大的性能問題,因此請始終在開始和簽出並檢入連接時進行10或15個連接。 4.使用內存分析工具分析堆轉儲並找出哪個進程正在使用最大內存。

您應該使用局部變量,直到並且除非在所有方法中都使用它為止。 並嘗試使Global變量在不再使用它的值時為null。 但是在使對象為null時,您應該更加確定。 這些空對象很容易被垃圾收集,這有助於您避免內存異常。 還要在迭代集合,數組等時查看代碼中的無限循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM