【Java基础】Runtime类使用

Runtime类是什么?

  1. 每个java程序在运行时相当于启动了一个JVM进程,每个JVM进程都对应一个RunTime实例

  2. RunTime是JVM负责实例化的,且使用了单例设计模式,必须通过RunTime内部的getRuntime()方法获取实例化对象
    在这里插入图片描述

  3. 通过Runtime对象的方法可以查看Java虚拟机的状态以及控制虚拟机的行为。

  4. System许多函数的使用都是等价于Runtime.getRuntime(),可见System和Runtime之间的联系是多么密切,实际上System是依赖于Runtime类的。

Runtime类能做什么

1.查看系统内存

在这里插入图片描述

上图4个native方法,分别返回JVM内核数、空闲内存、总内存、最大内存

@Test
public void runtimeInfo() {
    
    
    Runtime runtime = Runtime.getRuntime();
    int processors = runtime.availableProcessors();//法返回JVM(Java虚拟机)可用的处理器数。
    long freeMemory = runtime.freeMemory();//返回JVM(Java虚拟机)中的可用内存量
    long maxMemory = runtime.maxMemory();//返回JVM(Java虚拟机)中的总内存量
    long totalMemory = runtime.totalMemory();//返回Java虚拟机将尝试使用的最大内存量。如果没有固有限制,则返回值Long.MAX_VALUE。

    // processors=4, freeMemory=165713400, maxMemory=2837446656, totalMemory=192937984
    logger.debug("processors={}, freeMemory={}, maxMemory={}, totalMemory={}", processors, freeMemory, maxMemory, totalMemory);
}

2.调用系统本地程序

在这里插入图片描述

//通过调用 javac -version 获取JDK版本信息
 @Test
    public void getJavaVersion() {
    
    
        try {
    
    
            Process process = Runtime.getRuntime().exec("java -version");
            BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            String line = null;
            while ((line = br.readLine()) != null) {
    
    
                System.out.println(line); 
            }

            process.waitFor();
            System.out.println("Process exitValue: " + process.exitValue()); //0
        } catch (Throwable t) {
    
    
            t.printStackTrace();
        }
    }

在这里插入图片描述

Process的主要方法

destroy()//杀掉子进程。

exitValue()//返回子进程的出口值。

InputStream getErrorStream()//获得子进程的错误流。

InputStream getInputStream()// 获得子进程的输入流。

OutputStream getOutputStream()//获得子进程的输出流。

waitFor()// 导致当前线程等待,如果必要,一直要等到由该 Process 对象表示的进程已经终止。
/*一般执行linux命令使用比较多的是waitFor(),诸塞等待子进程完成该linux命令。然后再继续线程后续的代码。*/

3.加载动态链接库

load()可以加载动态链接库,如linux下的so文件,win下的dll文件。
在这里插入图片描述


4.终止虚拟机

Runtime.getRuntime().exit(0);//通过启动JVM关闭命令来终止当前运行的Java虚拟机。
Runtime.getRuntime().halt(0);//此方法强制终止当前运行的Java虚拟机。此方法永远不会正常返回。应谨慎使用此方法。

猜你喜欢

转载自blog.csdn.net/qq877728715/article/details/108923776