我是新來的Java,真的需要你的幫助。Java Outofmemory堆空間錯誤:如何從矢量中創建雙端隊列?
我目前正在使用一個隊列,一個接收線程將數據放入這個隊列,解析器讀出這個。 但問題是接收器可能以令人難以置信的峯值速度接收,如例如。 3000 /秒,而解析器僅以100 /秒解析。
EDIT:I have checked, the queue first stays at 100 or so, and after ten seconds it starts to grow at 100 per second, and crashes at 2000 or so. Could it be possible that there is a memory leak?
我的代碼(在一個緊密的循環)是
byte[] data = new byte[1024];
System.arraycopy(udpPacket.getData(), 0, data, 0, 1024);
queue.offer(data);
堆太快填滿,我得到一個內存不足的異常。我想問題是隊列是使用鏈表創建的,所有指針必須保存在堆中。
我知道一個C版本可以做同樣的事情(使用緩衝區),但性能要好得多,但由於部署問題,我們只能使用Java。
既然討論正在進行中,您可以指定接收哪些大寫金額的數據或流TCP或UDP和最新是否傳輸的頻率。這些信息對建議最佳實踐是必要的。 – stacker 2010-02-02 12:35:29
看起來您正在進行大量複製。您可能想要包裝您的數據作爲輸入流並傳遞。 – 2010-02-02 16:45:01
@stacker:我無法控制輸入,我只能控制偵聽器的採樣。 @Nick:是的,我正在做很多複製,而且我不理解將數據封裝爲輸入流。你能解釋一下如何以及爲什麼輸入流更好? – TiansHUo 2010-02-03 02:04:12