文章目录
- 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虚拟机。此方法永远不会正常返回。应谨慎使用此方法。