Runtime 类的基本概念
Java 的 Runtime
类位于 java.lang
包中,用于与 Java 运行时环境(JVM)交互。每个 Java 应用程序都有一个 Runtime
实例,可以通过静态方法 Runtime.getRuntime()
获取。Runtime
类提供了与系统资源交互、执行外部命令和关闭 JVM 等功能。
获取 Runtime 实例
通过静态方法 getRuntime()
获取当前 JVM 的 Runtime
实例。
Runtime runtime = Runtime.getRuntime();
执行外部命令
exec()
方法用于执行操作系统的命令,返回一个 Process
对象,可以管理子进程。
Process process = runtime.exec("notepad.exe"); // 打开记事本
获取系统资源信息
Runtime
提供了多个方法获取 JVM 内存和处理器信息。
long totalMemory = runtime.totalMemory(); // 获取 JVM 总内存
long freeMemory = runtime.freeMemory(); // 获取 JVM 空闲内存
long maxMemory = runtime.maxMemory(); // 获取 JVM 最大可用内存
int processors = runtime.availableProcessors(); // 获取 CPU 核心数
垃圾回收
gc()
方法手动触发垃圾回收,释放未使用的内存。
runtime.gc(); // 请求 JVM 执行垃圾回收
关闭 JVM
halt()
和 exit()
方法用于终止 JVM。
runtime.exit(0); // 正常退出 JVM,状态码 0
runtime.halt(1); // 强制终止 JVM,状态码 1
添加关闭钩子
addShutdownHook()
方法注册一个线程,在 JVM 关闭时执行特定任务。
Thread hook = new Thread(() -> System.out.println("JVM 正在关闭"));
runtime.addShutdownHook(hook);
示例代码
以下是一个完整的 Runtime
示例,展示内存信息和执行外部命令。
public class RuntimeExample {
public static void main(String[] args) throws Exception {
Runtime runtime = Runtime.getRuntime();
System.out.println("总内存: " + runtime.totalMemory() / (1024 * 1024) + " MB");
System.out.println("空闲内存: " + runtime.freeMemory() / (1024 * 1024) + " MB");
System.out.println("最大内存: " + runtime.maxMemory() / (1024 * 1024) + " MB");
Process process = runtime.exec("calc.exe"); // 打开计算器
Thread.sleep(3000);
process.destroy(); // 关闭进程
}
}
注意事项
exec()
方法可能抛出IOException
,需处理异常。exit()
和halt()
会终止 JVM,谨慎使用。- 执行外部命令时注意命令的跨平台兼容性。