Java/Eclipse:Java/Eclipse如何保留堆
我试图诊断实时音频程序中的内存泄漏(或者我认为是内存泄漏),这会导致在调用垃圾收集例程时输出偶尔“断断续续” 在我找到漏洞之前,我试图回到基础并不断地进行阐述,我设计了一个我认为可能是最简单且无漏洞的程序:Java/Eclipse:Java/Eclipse如何保留堆,java,eclipse,memory,memory-leaks,Java,Eclipse,Memory,Memory Leaks,我试图诊断实时音频程序中的内存泄漏(或者我认为是内存泄漏),这会导致在调用垃圾收集例程时输出偶尔“断断续续” 在我找到漏洞之前,我试图回到基础并不断地进行阐述,我设计了一个我认为可能是最简单且无漏洞的程序: public class LeakDetect { public static void main(String args[]) { while (true) { System.out.println( Runtime.getRuntime()
public class LeakDetect {
public static void main(String args[]) {
while (true) {
System.out.println( Runtime.getRuntime().freeMemory());
}
}
}
想象一下,我惊讶地发现堆空间随着时间慢慢减少(在几秒钟内很容易看到),然后又重新跳起来,即使这里除了打印可用堆内存之外没有其他操作
我从来没有理由对此感到惊讶;这是怎么回事
Java/Eclipse是否确实强制为堆保留了一块内存,然后在幕后做了一些浪费的事情
或者,正如我所怀疑的,其他程序和操作系统功能(Windows 10)是否正在吞噬潜在的可用堆空间,然后操作系统偶尔会释放内存?如果是这样,有没有办法让Java/Eclipse采取更强硬的态度,不让操作系统和其他软件进入它的空间?在Ubuntu下运行会改变答案吗?Eclipse是一个IDE——它与此无关。即便如此,如果有办法强制执行我所希望的行为,我将通过Eclipse及其JVM配置。抱歉,这不是它的工作方式。JVM在运行时是boss。是的,但我将通过Eclipse设置标志、更改JVM的配置等。类似于在eclipse.ini中设置堆准则。JVM是boss,但由IDE配置,您无法获得它。一旦启动作业,JVM就不知道或不关心这些标志是如何设置的。Eclipse是一个IDE,它与此无关。即使如此,如果有办法强制执行我所希望的行为,我也会检查Eclipse及其JVM配置。抱歉,这不是它的工作方式。JVM在运行时是boss。是的,但我将通过Eclipse设置标志、更改JVM的配置等。类似于在eclipse.ini中设置堆准则。JVM是boss,但由IDE配置,您无法获得它。一旦启动作业,JVM就不知道或不关心这些标志是如何设置的。