如果我故意创建一个应用程序,它在处理数据时会出现内存泄漏,我可以通过以下方式注意到内存使用情况:
Runtime.getRuntime().freeMemory()
开始在1MB到2MB的空闲内存之间震荡。
然后应用程序进入一个循环:GC,处理一些数据,GC等等。但是由于GC发生得如此频繁,应用程序基本上没有做太多其他事情。即使GUI也需要很长时间才能响应(不,我这里没有谈论EDT问题,实际上VM基本上被卡在某种无尽的GC模式中)。
我想知道:是否有一种编程方式来检测JVM没有足够的内存了呢?
请注意,我没有谈论内存不足错误或检测内存泄漏本身。
我所说的是检测一个应用程序运行的内存非常低,以至于它基本上一直在调用GC,几乎没有时间做其他事情(在我的假设例子中:压缩数据)。
例如,重复读取一分钟内可用内存量的方法是否有效,并查看如果数字一直在下面的不同值之间“振荡”,这个数字都在4MB以下,那么就可以得出结论:发生了某些泄漏,应用程序已经无法使用了吗?