我有一個應用程序使用大量的內存區分兩個潛在巨大(100k +)目錄的內容。對我來說這樣的操作會使用大量的內存是有意義的,但是一旦我的差異操作完成,堆仍然保持相同的大小。減少Java堆大小
我基本上擁有實例化類的代碼,用於存儲源和目標上每個文件的文件名,文件大小,路徑和修改日期。我保存其他陣列中的添加,刪除和更新。我然後clear()
我的源和目標數組(現在可能每個100k +),留下相對較小的添加,刪除和更新數組。
之後我clear()
我的目標和源數組雖然,內存使用情況(通過VirtualVM和Windows任務管理器可見)不會下降。我對VirtualVM(或任何關於此事的分析器)沒有足夠的經驗來弄清楚什麼是佔用所有這些內存。 VirtualVM的堆轉儲列出了保留大小爲幾兆字節的前幾個對象。
任何幫助指向正確方向的東西?
你確定垃圾收集器已經運行,當你看內存使用情況?內存使用率只會在GC(可能是主要的)運行後下降。 – cello 2014-10-27 08:03:47
根據virtualvm,堆保持大致相同,而使用的堆將下降(大約我期望它,這是少於總堆的一半)。堆大小與Windows任務管理器告訴我java正在使用的內容大致相符。在分析應用程序時,我會看到通常的GC樓梯集合模式,我只是不知道爲什麼總堆仍然如此之大。 – tau 2014-10-27 08:14:21