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 @   有空  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示