答案 0 :(得分:4)
创建的Java对象一旦完成就不一定要清理。相反,称为“垃圾收集器”的东西会在后台定期运行,寻找孤立的对象并删除它们,从而释放内存。
您的应用程序可能会在调整窗口大小时创建大量临时对象。虽然不再被任何东西(即孤儿)引用,但这些对象一直闲着,直到垃圾收集器运行。
您可能会发现最大内存为256M(默认值) - 当您接近最大内存时,垃圾收集器可能会被更频繁地调用,而新对象的创建需要立即释放内存 - 因此由于需求平衡了创建/删除率,因此内存徘徊在256M以下。
这是完全正常的行为。
答案 1 :(得分:2)
不,这种行为完全正常。 Java内存管理基于自动垃圾收集,这意味着未使用的内存在被垃圾收集之前会累积一段时间(因为这是一项大量工作,您希望尽可能少地完成。
因此,JVM将倾向于使用允许使用的大部分内存(最大堆大小) - 并且在具有多GB可用内存的现代PC上,默认的最大堆大小将非常大。但是,如果您知道一个小应用程序不需要太多内存,则可以通过命令行选项-Xmx调整最大堆大小,例如
java -Xmx64M main.class.name
将堆限制为64MB