简介:Runtime表示当前虚拟机的运行环境。
常用方法
1、public static Runtime getRuntime():返回当前系统的运行环境对象
Runtime类的方法没有用static修饰,所以需要获取对象,但是不能用一般JavaBean类创建对象的方式来获得Runtime类的对象,这是因为在Runtime类内部,它的空参构造方法被 private 修饰变成了私有的,外界无法访问。
那么这个方法又是怎么得到Runtime对象的呢?
事实上,Runtime类的第一行代码,就定义了一个Runtime类型的成员变量,名叫currentRuntime。getRuntime方法只不过是返回了这个变量,这样就造成了一个结果,在同一个虚拟机当中,不管你创建了多少个Runtime对象,它们的本质其实是同一个Runtime对象currentRuntime。
private static Runtime currentRuntime = new Runtime();
为什么要这样做?
众所周知,JavaBean类是用来描述事物的类,而一台虚拟机只能有一个运行环境,因此,只能有一个描述该运行环境的对象,多个对象是不合逻辑的。
Runtime
类在 Java 中扮演着非常特殊的角色,它提供了与 Java 运行时环境交互的接口。这个类之所以在获得对象的方式上显得特殊,主要是因为以下几个原因:
-
单例模式:
Runtime
类被设计为单例模式。这意味着在 Java 虚拟机(JVM)中,Runtime
类的实例是唯一的。这个实例在 JVM 启动时自动创建,并且这个实例通过Runtime.getRuntime()
方法被访问。这种设计保证了在整个 JVM 中,对于运行时环境的所有操作都通过这个唯一的实例来进行,从而避免了资源冲突和状态不一致的问题。 -
全局访问:由于
Runtime
类的实例是全局唯一的,并且这个实例在 JVM 启动时就被创建,因此它提供了一种全局访问 JVM 运行时环境的方式。这种全局访问的便利性使得开发者可以很容易地执行如启动进程、退出 JVM、查询系统属性等操作,而不需要自己管理Runtime
类的实例。 -
安全性:如果允许开发者自由创建
Runtime
类的多个实例,可能会导致资源泄露、状态不一致等问题,特别是在多线程环境下。通过单例模式,Runtime
类确保了全局只有一个实例,从而简化了状态管理和资源控制的复杂度,提高了系统的安全性。 -
简化 API 设计:
Runtime
类提供了一组静态方法和实例方法,但大多数与运行时环境交互的操作都是通过实例方法完成的。然而,由于Runtime
类是单例的,并且这个实例通过getRuntime()
方法静态获取,因此实际上调用这些实例方法时感觉像是在调用静态方法一样。这种设计简化了 API 的使用,使得开发者不需要显式地处理Runtime
类的实例。
2、public void exit(int status):关闭当前虚拟机。
这个方法是Systemg工具类中exit方法的底层原理。
3、 public int availableProcessors():获取cpu的线程数
4、public long maxMemory():jvm能从系统中获取的总内存大小 单位byte
5、public long totalMemory():jvm已经从系统中获取的总内存大小 单位byte
5、public long freeMemory():jvm剩余内存大小 单位byte
6、public Process exec(String command):运行cmd命令
注意:1、不是所有cmd命令都能运行 dir命令就运行不了
2、好玩的cmd命令 shutdown 加上参数才能执行
-s:默认1分钟后关机
-s -t:指定时间
-a:取消关机操作
-r:关机并重启