Java定时器类不自动刷新运行时函数?
我用java编写了这个计时器函数Java定时器类不自动刷新运行时函数?,java,Java,我用java编写了这个计时器函数 import java.util.Timer; //Libraries used import java.util.TimerTask; public static void main(String[] args) { Timer clock = new Timer(); clock.schedule(new TimerTask() { @Override public void
import java.util.Timer; //Libraries used
import java.util.TimerTask;
public static void main(String[] args) {
Timer clock = new Timer();
clock.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(Runtime.getRuntime().freeMemory());
}
}, 1*1*1000, 1*1*1000);// One second intervals
}
我得到的结果是(以位为单位):
115224312
113179200
113179200
…相同的数字(113179200)…永远
我希望这个函数能够自动刷新和更改号码,但它不能做到这一点。我不知道为什么。我尝试过其他方法(循环、其他计时器等),但这些方法也不起作用。在启动计时器检查后,我使用一些内存更新了代码:
public static void main(String[] args) {
Timer clock = new Timer();
clock.schedule(new TimerTask() {
@Override
public void run() {
System.out.print("Total: " + Runtime.getRuntime().totalMemory());
System.out.println(" Free: " + Runtime.getRuntime().freeMemory());
}
}, 1*1*1000, 1*1*1000);// One second intervals
// now use memory
ArrayList<Object> arrays = new ArrayList<>();
for (int i = 0; i < 1_000_000; ++i) {
ArrayList<String> strings = new ArrayList<>();
for (int j = 0; j < 1_000_000; ++j) {
strings.add("" + j);
}
arrays.add(strings);
}
System.out.println("Loop complete");
}
如您所见,可用内存量(以及总内存)正在发生变化。启动计时器检查后,我使用一些内存使用更新了您的代码:
public static void main(String[] args) {
Timer clock = new Timer();
clock.schedule(new TimerTask() {
@Override
public void run() {
System.out.print("Total: " + Runtime.getRuntime().totalMemory());
System.out.println(" Free: " + Runtime.getRuntime().freeMemory());
}
}, 1*1*1000, 1*1*1000);// One second intervals
// now use memory
ArrayList<Object> arrays = new ArrayList<>();
for (int i = 0; i < 1_000_000; ++i) {
ArrayList<String> strings = new ArrayList<>();
for (int j = 0; j < 1_000_000; ++j) {
strings.add("" + j);
}
arrays.add(strings);
}
System.out.println("Loop complete");
}
正如您所看到的,可用内存量(以及总内存)正在变化。如果可用内存量没有变化,那么数字为什么会变化?你在其他地方使用内存吗?难道内存不应该是恒定的吗?所以即使我不在后台做任何事情,操作系统也会一直在改变内存的使用。这反过来会改变可用内存的数量?如果我错了,请纠正我好吗?返回Java虚拟机中的可用内存量,而不是OS@Atlas有关内存的详细信息,请参阅。freememory方法只是java环境中的内存。如果您在java应用程序中使用(或释放)内存,那么这个数字就会改变。虽然你可以尝试一下,而不是在网上问陌生人。如果可用内存量没有改变,那么为什么数字会改变?你在其他地方使用内存吗?难道内存不应该是恒定的吗?所以即使我不在后台做任何事情,操作系统也会一直在改变内存的使用。这反过来会改变可用内存的数量?如果我错了,请纠正我好吗?返回Java虚拟机中的可用内存量,而不是OS@Atlas有关内存的详细信息,请参阅。freememory方法只是java环境中的内存。如果您在java应用程序中使用(或释放)内存,那么这个数字就会改变。虽然你可以尝试一下,而不是在互联网上询问陌生人。因此,当你在数组中填充元素时,你开始使用内存,这反过来会改变可用内存和总内存的值。Lucas I错误地假设freeMemory()函数返回有关操作系统的信息,而实际上它返回的是有关JVM的信息。这是很有用的。所以当你在数组中填充元素时,你开始使用内存,这反过来会改变空闲内存和总内存的值。Lucas I错误地假设freeMemory()函数返回有关操作系统的信息,而实际上它返回的是有关JVM的信息。这是有用的。