使用 Timer 和 TimerTask 类来创建定时器,可以通过 Timer 的 schedule 方法来指定定时任务的执行时间和频率。具体实现如下:

import java.io.FileWriter;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import java.lang.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;

public class MemoryMonitor {
    private Timer timer;
    private FileWriter writer;

    public MemoryMonitor() throws IOException {
        timer = new Timer();
        writer = new FileWriter('memory.txt', true); // 追加写入文件
    }

    public void start() {
        timer.schedule(new MemoryTask(), 0, 60 * 1000); // 每分钟执行一次
    }

    public void stop() throws IOException {
        timer.cancel();
        writer.close();
    }

    private class MemoryTask extends TimerTask {
        private OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();

        public void run() {
            long totalMemorySize = osmxb.getTotalPhysicalMemorySize();
            long freeMemorySize = osmxb.getFreePhysicalMemorySize();
            long usedMemorySize = totalMemorySize - freeMemorySize;

            String data = String.format('总的物理内存:%d;剩余物理内存:%d;已使用物理内存:%d;
', 
                    totalMemorySize, freeMemorySize, usedMemorySize);

            try {
                writer.write(data);
                writer.flush(); // 立即写入文件
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        MemoryMonitor monitor = new MemoryMonitor();
        monitor.start();

        // 运行5分钟后停止
        try {
            Thread.sleep(5 * 60 * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        monitor.stop();
    }
}

代码解析:

  1. 使用 Timer 和 TimerTask 类创建定时器,并设置每分钟执行一次定时任务。
  2. 通过 ManagementFactory.getOperatingSystemMXBean() 获取操作系统管理对象,并使用该对象获取物理内存信息。
  3. 使用 String.format() 方法将内存信息格式化为字符串,并写入 memory.txt 文件。
  4. main 方法中启动定时任务,并在 5 分钟后停止。

代码说明:

  • 使用 FileWriter('memory.txt', true) 以追加的方式打开文件,确保每次运行时数据都添加到文件的末尾。
  • 使用 writer.flush() 立即写入文件,避免数据丢失。
  • 可以在 main 方法中设置运行时间,或根据需要添加其他逻辑。

运行结果:

memory.txt 文件中,将会记录每分钟的物理内存使用情况,例如:

总的物理内存:17038327808;剩余物理内存:6949703680;已使用物理内存:10088624128;
总的物理内存:17038327808;剩余物理内存:6949703680;已使用物理内存:10088624128;
总的物理内存:17038327808;剩余物理内存:6949703680;已使用物理内存:10088624128;
...

注意:

  • 代码需要使用 com.sun.management.OperatingSystemMXBean 类,该类属于 Sun 的私有 API,可能会在未来版本的 Java 中被移除。如果需要更稳定可靠的方案,可以使用其他方法获取物理内存信息。
  • 定时任务的执行时间和频率可以通过 timer.schedule() 方法的参数进行调整。
  • 可以根据需要对代码进行修改,例如添加日志记录、异常处理等功能。

本代码示例仅供参考,需要根据实际情况进行调整和优化。

Java 定时任务监控物理内存使用情况

原文地址: https://www.cveoy.top/t/topic/ngEO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录