Runtime

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值