Runtime

这个类用来表示当前虚拟机的运行环境.

程序示例:

public static Runtime getRuntime() : 当前系统的运行环境对象
// 先用上面的方法, 获取到 Runtime 这个类的一个对象, 
// 再用这个对象, 调用下面的这些方法 (因为这些方法都是非静态的, 必须用对象来调用而不是类名)
public void exit(int status) : 停止虚拟机
public int availableProcessors() : 获得 CPU 的线程数
public long maxMemory() : JVM 能从系统中获取总内存大小 (单位 byte)
public long totalMemory() : JVM 已经从系统中获取总内存大小 (单位 byte)
public long freeMemory() : JVM 剩余内存大小 (单位 byte)
public Process exec(string command) : 运行 cmd 命令

这个类里面的方法不是静态的, 所以想要调用 Runtime 这个类里面的方法, 就要先获取到 Runtime 这个类的对象. 但是这个类的对象, 不能由我们自己直接 new 出来, 而是通过 getRuntime() 方法来获取.

public static Runtime getRuntime(){ }  // 当前系统的运行环境对象

System 里面的 exit() 方法在底层实际上就是调用 Runtime 里面的 exit() 方法.


图1

程序示例:

public class Demo1 {
    public static void main(String[] args) {
        // 1. 获取 Runtime 的对象
        // Runtime r1 = new Runtime();  // 'Runtime()' has private access in 'java.lang.Runtime'
        // 正确的方式:
        Runtime r1 = Runtime.getRuntime();
    }
}

进入 Runtime 源码进行查看:


图2

这样设计代码的好处是: 在外界, 不管是在哪个类中调用 getRuntime() 方法, 获取到的都是同一个对象. Java 将 Runtime 设计为只有一个对象的原因是 Runtime 这个类表示的是当前虚拟机运行的环境, 而一台电脑只能有一个运行环境, 所以如果创建多个 Runtime 类的对象, 是没有实际意义的. 所以 Java 就规定了 Runtime 只能有一个对象, 这个对象就表示虚拟机当前的运行环境. 通过这个对象, 就能获取到当前环境的一些信息.

程序示例:

public class Demo2 {
    public static void main(String[] args) {
        Runtime runtime1 = Runtime.getRuntime();
        Runtime runtime2 = Runtime.getRuntime();
        System.out.println(runtime1 == runtime2);  // true, 表示两个 Runtime 对象是同一个对象
    }
}

exit() 方法:

public class Demo3 {
    public static void main(String[] args) {
        Runtime.getRuntime().exit(0);
        System.out.println("看看这一条语句执行了吗?");  // 没有输出
    }
}

availableProcessors() 方法:

public class Demo3 {
    public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().availableProcessors());  // 20
    }
}

maxMemory() 方法:

public class Demo3 {
    public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().maxMemory() / 1024 / 1024);  // 4002, 单位是 M, 也就是 4 G
    }
}

totalMemory() 方法:

public class Demo3 {
    public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().totalMemory() / 1024 / 1024);  // 252
    }
}

freeMemory() 方法:

public class Demo3 {
    public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().freeMemory() / 1024 / 1024);  // 249
    }
}

exec() 方法:

不是所有的 cmd 命令都可以这样子执行. 比如 dir, 因为无法指定路径.

直接用 exec 会报错, 默认用第一个解决方案:


图3
import java.io.IOException;

public class Demo3 {
    public static void main(String[] args) throws IOException {
        Runtime.getRuntime().exec("notepad");  // 打开记事本
    }
}

cmd 里面的关机命令:
shutdown : 关机
加上参数才能执行
s : 默认在1分钟之后关机
s -t 指定时间 : 指定关机时间, 单位是秒
-a : 取消关机操
-r : 关机并重启

posted @ 2024-11-12 22:58  有空  阅读(59)  评论(0)    收藏  举报