java的runtime类是一个封装了JVM进程的类,每一个java程序实际上都是启动了一个JVM进程.每一个程序都对应一个Runtime实例,实例是由JVM初始化的,我们可以利用java的Runtime类获取进程的相关信息,启动其它进程,关闭当前进程等操作
实例化runtime类
Runtime类在整个jvm中只存在一个Runtime对象,通过Runtime类的静态方法进行实例化操作而不是通过new
Runtime run = Runtime.getRuntime();
获取运行环境
Runtime runtime = Runtime.getRuntime();
System.out.println("可用的处理器 ->" + runtime.availableProcessors());
System.out.println("最大内存量 ->" + runtime.totalMemory());
System.out.println("JVM最大可用内存 ->" + runtime.maxMemory());
System.out.println("JVM空闲内存 ->" + runtime.freeMemory());
//垃圾回收释放内存
runtime.gc();
运行其它进程
利用exec方法调用本机程序
Runtime run = Runtime.getRuntime();
try {
Process process = run.exec("xxx.exe");
TimeUnit.SECONDS.sleep(5);
process.destroy();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
其中process.destroy();用于销毁该进程
注册钩子
public static void main(String[] args) {
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
Runtime runtime=Runtime.getRuntime();
for (int i = 0; i < 10; i++) {
final int id = i;
runtime.addShutdownHook(new Thread() {
@Override
public void run() {
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程#" + id+"正在执行虚拟机关闭前的清理工作");
}
});
}
}
java虚拟机在下列两种情况下会关闭
1. 虚拟机中只剩下了后台线程
2. 虚拟机被用户关闭比如^C
程序在关闭的时候启动所有的钩子线程,钩子线程执行完毕后程序才被真正的关闭,这通常用于资源清理
关闭当前程序
runtime.halt(1);