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

我用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 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的信息。这是有用的。