我在Java 3D中有一個包含大約3500個開關的大型場景圖,每個開關包含一個Shape3D和一個組,後者包含兩個更多的Shape3D。Java 3D內存泄漏
這樣做的原因設置是每3500個交換機必須能夠爲完全隱藏,或者有它的兩個孩子可見。
的問題,當我試圖修改該集團兩個Shape3Ds的幾何形狀在交換機發生。我曾嘗試以下:
更改集團BranchGroup。當幾何體需要更改時,我將分支組分組並創建一個具有更新幾何體的新組體,以替換它。 泄漏大量內存。例如,初始內存使用量將在100 MB左右。稍後幾何尺寸的變化大約爲400 MB。
使幾何形狀可編輯。當幾何需要改變時,我直接編輯它。 泄漏大量內存。與上面類似。
使幾何可編輯,但通過參考。當幾何需要更改時,我用適當的GeometryUpdater調用updateData(...),然後完成它的工作。 泄漏內存。
重新創建整個場景圖。當需要更改幾何圖形時,我將分離整個場景圖形,使用更新的幾何圖形重新創建它,然後附加新的場景圖形。 泄漏內存。
我不禁感到有一些基本的關於Java 3D存儲器管理我失蹤,這是常見的我所有的嘗試。
改變幾何的速度是不是一個問題,因爲它是一種罕見的occurence。但是,記憶問題很嚴重。
要回答你的問題:我正在查看操作系統中java的內存使用情況,使用運行時報告並使用TPTP進行更仔細的檢查;是的,在強制 - 或者說,向VM推薦垃圾收集之後,內存使用保持大致相等;是的,如果對幾何體進行了足夠多的連續更改,則會拋出java.lang.OutOfMemoryError。 – 2010-03-05 09:48:49
你有任何行爲節點嗎?如果你這樣做,這些可以堅持記憶? – richj 2010-03-05 10:30:31
我還在想,如果節點被克隆爲重複或通過引用。 – richj 2010-03-05 10:35:01