【Java基础】Runtime类使用

    科技2022-07-21  102

    文章目录

    Runtime类是什么?Runtime类能做什么1.查看系统内存2.调用系统本地程序3.加载动态链接库4.终止虚拟机

    Runtime类是什么?

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

    RunTime是JVM负责实例化的,且使用了单例设计模式,必须通过RunTime内部的getRuntime()方法获取实例化对象

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

    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虚拟机。此方法永远不会正常返回。应谨慎使用此方法。
    Processed: 0.009, SQL: 8