Java 定时任务监控物理内存使用情况
使用 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();
}
}
代码解析:
- 使用 Timer 和 TimerTask 类创建定时器,并设置每分钟执行一次定时任务。
- 通过
ManagementFactory.getOperatingSystemMXBean()获取操作系统管理对象,并使用该对象获取物理内存信息。 - 使用
String.format()方法将内存信息格式化为字符串,并写入memory.txt文件。 - 在
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()方法的参数进行调整。 - 可以根据需要对代码进行修改,例如添加日志记录、异常处理等功能。
本代码示例仅供参考,需要根据实际情况进行调整和优化。
原文地址: https://www.cveoy.top/t/topic/ngEO 著作权归作者所有。请勿转载和采集!