我有一个应用程序使用大量的内存区分两个潜在巨大(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