使用App时Java内存使用量会增加,但在不使用时不会减少

gre*_*ren 10 java memory memory-management

我有一个java应用程序,使用时会占用大量内存,但是当程序没有被使用时,内存使用量不会下降.

有没有办法强制Java释放这个内存?因为当时不需要这个内存,我可以理解保留少量内存,但Java只保留它曾经使用过的所有内存.它也会在以后重用这个内存,但必须有一种方法可以强制Java在不需要时释放它.

System.gc不起作用.

aio*_*obe 7

正如评论中所指出的那样,当垃圾收集器处理对象时,它并不确定它会给系统提供内存.

也许Tuning Garbage Collection Outline为您的问题提供了解决方案:

默认情况下,JVM会在每个GC上增大或缩小堆,以使每个集合中的可用空间与活动对象的比率保持在指定范围内.

  • -XX:MinHeapFreeRatio - 当一代中的可用空间百分比低于此值时,生成将扩展到满足此百分比.默认值为40
  • -XX:MaxHeapFreeRatio - 当一代中的可用空间百分比超过此值时,生成将缩小以满足此值.默认值为70

否则,如果您怀疑正在泄漏引用,则可以确定泄漏的对象是什么,对象和对象是监视JVisualVM(与标准SDK捆绑在一起的工具)中的堆.您可以通过此程序执行堆转储并获取对象内存消耗的直方图:

在此输入图像描述