我希望我不會在Java中發現一個錯誤!我正在運行JDK 7u11(主要是因爲這是我的僱主允許的批准JVM),我注意到一個非常奇怪的問題。WriteObject沒有正確寫入Set?
也就是說,我分塊數據爲LinkedHashSet
並將其寫入使用ObjectOutputStream
菊花文件通過GZIpOutputStream
(提到這一點,以防萬一它事項)改變。
現在,當我到達程序的另一端和readObject()
時,我注意到大小始終爲68,這是我的第一個大小。基礎表可以有很多比68多跌少,但.size()
方法總是返回68.更令人不安的是,當我嘗試手動循環底層Set
,它也停在68
while(...) {
oos.writeInt(p_rid);
oos.writeObject(wptSet);
wptSet.clear();
// wptSet = new LinkedHashSet<>(); // **This somehow causes the heapsize to increase dramatically, but it does solve the problem**
}
,在讀取時它
Set<Coordinate> coordinates = (Set<Coordinate>) ois.readObject();
的coordinates.size()
總是返回68.現在,我可以也.writeInt()
大小做一個變通方法,但我只能通過68個成員重複!
注意wptSet = new LinkedHashSet<>()
行實際上解決了這個問題。這個問題的主要問題是,當在JVisualVM中查看程序時,它讓我大吃一驚。
更新: 其實我只是找到了一個可行的解決方法,修復再實例wptSet ... System.gc()
調用每次調用.clear()
後實際保留的內存泄漏掉的內存泄漏。
無論哪種方式,我不應該這樣做,並運出LinkedHashSet
不應該表現出這種行爲。
您的'Coordinate'類是否實現了['Serializable'](http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html)? – Powerlord 2015-04-02 19:57:59
是的,它'類座標實現可序列化{' – 2015-04-02 19:58:23
請顯示[最小完整示例](http://stackoverflow.com/help/mcve)重現。否則,我們基本上是猜測。 – Radiodef 2015-04-02 19:58:33