概述
Runtime类封装了运行时的环境。每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。
不能实例化Runtime对象,应用程序也不能创建自己的Runtime类实例,但可以通过getRuntime方法获取当前Runtime运行时对象的引用。
一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为。当Applet和其他不被信任的代码调用任何Runtime方法时,常常会引起SecurityException异常。
Runtime常用的几种方法:runtime.maxMemory(),获取JVM最大内存;runtime.freeMemory(),获取JVM的空闲内存;runtime.gc(),进行垃圾收集,释放空间;runtime.exec(“XXX”),调用本机上的程序;
应用
获得系统内存的一些信息
public void runtime() {
Runtime runtime = Runtime.getRuntime();
int processors = runtime.availableProcessors();
long freeMemory = runtime.freeMemory();
long maxMemory = runtime.maxMemory();
long totalMemory = runtime.totalMemory();
System.out.printf("processors:"+processors+";freeMemory:"+freeMemory+";maxMemory:"+maxMemory+";totalMemory:"+totalMemory);
}
获得java版本(java -version)
public void runtime(){
try {
Process process = Runtime.getRuntime().exec("javac -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());
} catch (Throwable t) {
t.printStackTrace();
}
}
执行外部命令
public void runtime(){
try {
Process process = Runtime.getRuntime().exec("[输入预先准备好的可执行文件]");
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
while ((line = br.readLine()) != null)
System.out.println(line);
process.waitFor();
System.out.println("Process exitValue: " + process.exitValue());
} catch (Throwable t) {
t.printStackTrace();
}
}
Runtime类导出mysql脚本
public void runtime() throws IOException, InterruptedException{
String execCommand = "cmd c/ D:/Java/mysqldump.exe -uhuhx -phuhx boot_learn > D:/bootlearn.sql";
System.out.println("exec command: " + execCommand);
Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec(execCommand);
StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "Error");
StreamGobbler outputGobbler = new StreamGobbler(p.getInputStream(), "Output");
errorGobbler.start();
outputGobbler.start();
p.waitFor();
System.out.println("successful." + p.exitValue());
}
清空缓冲区线程代码
public class StreamGobbler extends Thread {
InputStream is;
String type;
public StreamGobbler(InputStream is, String type) {
this.is = is;
this.type = type;
}
public void run() {
try (InputStreamReader isr = new InputStreamReader(is);) {
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
if (type.equals("Error")) {
System.out.println("Error :" + line);
} else {
System.out.println("Debug:" + line);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Process实例,用于操作进程
public static void main(String[] args) {
Process notepad = null; //创建一个Process的实例,用于接受exec()返回的进程。
try {
notepad = Runtime.getRuntime().exec("notepad.exe");//接受返回的进程
Thread.sleep(5000);//休眠5s
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
notepad.destroy(); //结束notepad进程。
}