我试图在实时音频程序中诊断内存泄漏(或者我认为是内存泄漏),这会导致在调用垃圾收集例程时输出偶尔“断断续续”。
为了回到基础并逐步阐述,直到我发现泄漏,我设计了我认为最简单和无泄漏的程序:
arrayWidth
想象一下,我惊讶地发现堆空间随着时间的推移逐渐减少(在几秒钟内很容易看到)然后再次跳回来,即使除了打印可用的堆内存之外没有其它操作。
我从来没有理由对此感到疑惑;这是怎么回事?
Java / Eclipse是否真的强制为堆保留一块内存,然后在幕后做一些浪费的事情?
或者,正如我所怀疑的那样,其他程序和操作系统功能(Windows 10)是否会占用潜在的堆空间,然后操作系统偶尔会释放内存?如果是这样,有没有办法让Java / Eclipse更难以保持操作系统和其他软件的空间?在Ubuntu下运行会改变答案吗?