我写了这个测试程序。
import java.io.Console;
public class ConsoleTest{
public static void main(String[] args) {
// TODO Auto-generated method stub
Console console = System.console();
System.out.println("ConsoleTest initialising... \n Enter command : ");
String line = "";
if(console!=null){
while ( (line = console.readLine())!= null ){
System.gc();
System.out.println("your input : " + line);
if("exit".equalsIgnoreCase(line)){
System.out.println("Bye ~");
System.exit(0);
}else{
System.out.println("Enter command : ");
}
}
}else{
System.out.println("No console found");
}
}
}
即使在我写这个问题的时候,我也看到堆内存使用率不断上升,对程序没有做任何事情。
此外,每次我单击执行 GC 按钮时,Windows 任务管理器都会显示该程序正在使用更多内存。
代码有问题吗?还是这是正常行为?
编辑
后来我发现内存堆使用图在较长的时间范围内有规律地波动。
我不知道为什么会这样,但我想这是另一回事。
如果我可以再问一件事,我发现 Java Monitor 中的堆使用量与 Windows 任务管理器中显示的内存使用量之间存在巨大差异。
Java Monitor 中的堆使用量显示 Eclipse 进程大约有 300MB。
在 Windows 任务管理器中,900MB - ish。
这种差异是因为堆使用量不包括堆栈内存使用量吗?