java.lang.Runtime 类:每个 java 程序在运行时相当于启动了一个 JVM 进程,每个 JVM 进程对应于一个 Runtime 实例,此实例由 JVM 负责实例化,只能通过 getRuntime() 获取当前运行的 Runtime 对象的引用

  • 获得了当前的 Runtime 的对象的引用,就可以调用 Runtime 对象的方法来查看虚拟机的状态或控制虚拟机的行为
  • 在源码中,使用了饿汉式单例模式通过 getRuntime() 获取的为同一个 Runtime 对象

获取 JVM 状态

Runtime 提供了 4 个 native 方法:

  • public native int availableProcessors():获取 JVM 内核数
  • public native long freeMemory():获取空闲内存
  • public native long totalMemory():获取总内存
  • public native long maxMemory():获取最大内存

    1. public static void main(String[] args) {
    2. Runtime runtime = Runtime.getRuntime();
    3. System.out.println(runtime.availableProcessors());
    4. System.out.println(runtime.freeMemory());
    5. System.out.println(runtime.maxMemory());
    6. System.out.println(runtime.totalMemory());
    7. }

执行本地程序

Runtime 通过如下方法执行本地程序,如在 win 下运行 exe :
image.png

  • Process exec(String command):在单独的进程中执行指定的字符串命令
  • Process exec(String[] cmdArray):在单独的进程中执行指定命令和变量
  • Process exec(Stringcommand, String[] envp):在指定环境的独立进程中执行指定命令和变量
  • Process exec(String[] cmdArray, String[] envp):在指定环境的独立进程中执行指定的命令和变量
  • Process exec(String command,String[] envp,File dir):在有指定环境和工作目录的独立进程中执行指定的字符串命令
  • Process exec(String[] cmdarray,String[] envp,File dir):在指定环境和工作目录的独立进程中执行指定的命令和变量

java.lang.Progress 提供的方法:

  • destroy():杀掉子进程
  • exitValue():返回子进程的出口值,值 0 表示正常终止
  • getErrorStream():获取子进程的错误流
  • getInputStream():获取子进程的输入流
  • getOutputStream():获取子进程的输出流
  • waitFor():导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。如果已终止该子进程,此方法立即返回。如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程,根据惯例,0 表示正常终止

加载动态链接库

Runtime.load() 方法可以加载动态链接库,如linux的so文件,win下的dll文件等
image.png

系统关闭

Runtime.exit(int status):退出 JVM 方法

  • 0:代表正常退出
  • 非0:代表异常退出