减少Java堆大小
作者:互联网
我有一个应用程序使用大量的内存来区分两个潜在的巨大(100k)目录的内容.我觉得这样的操作会占用大量内存,但是一旦我的差异操作完成,堆就会保持相同的大小.
我基本上有代码实例化一个类来存储源和目标上每个文件的文件名,文件大小,路径和修改日期.我保存了其他数组中的添加,删除和更新.然后我清除()我的源和目标数组(现在可能各自为100k),留下相对较小的添加,删除和更新数组.
在我清除()我的目标和源数组之后,内存使用量(通过VirtualVM和Windows任务管理器可见)不会下降.我对VirtualVM(或任何分析器)的经验不足以弄清楚占用所有这些内存的内容. VirtualVM的堆转储列出了保留大小为几兆字节的前几个对象.
有什么可以帮助我指出正确的方向吗?
解决方法:
如果使用的堆在垃圾收集后关闭,那么它可能会按预期工作.当Java需要更多内存时会增加它的堆,但不会释放它 – 它更喜欢保留它以防应用程序再次使用更多内存.有关此主题的信息,请参阅Is there a way to lower Java heap when not in use?,了解在使用的堆量减少后堆未降低的原因.
标签:java,memory,heap-memory,profiling 来源: https://codeday.me/bug/20190830/1767748.html