Java 堆大小减少

Java Heap Size Reduction

背景

我最近写了一个 java 应用程序,它消耗指定数量的 MB。我这样做是为了查看另一个 Java 应用程序如何对特定的 RAM 负载做出反应(我确信有用于此目的的工具,但这是最快的)。内存消费者应用程序非常简单。我输入我想要消耗的 MB 数并创建一个包含那么多字节的向量。我还有一个重置按钮,可以删除向量的元素并提示输入新的字节数。

问题

我注意到一旦向量被清除,java 进程的堆大小就不会减少。我尝试了 clear(),但堆的大小保持不变。看起来堆随着元素的增长而增长,但即使删除了元素,大小仍然存在。 java 代码中有减少堆大小的方法吗?是否有关于我缺少的 java 堆的详细信息?我觉得这是一个重要的问题,因为如果我想在任何 java 应用程序中保持低内存占用,我将需要一种方法来防止堆大小增长或至少在很长一段时间内不会变大。

通过调用 System.gc()

尝试垃圾回收

这可能对您有所帮助 - When does System.gc() do anything

不建议广泛调用 GC。

您应该使用 -Xmx 选项提供最大堆大小,并观察应用程序的内存分配。对生命周期较短的对象也使用弱引用,GC 会自动删除它们。