您的位置:首页 > 编程语言 > Java开发

Java高级技术第三章——Java的Runtime类详解

2018-02-12 10:38 513 查看

前言

前言点击此处查看:

http://blog.csdn.net/wang7807564/article/details/79113195

Runtime类

Java的Runtime类可以用来获取当前Java进程的运行时信息,诸如内存使用情况,加载动态库,获取CPU核心数,以及一些虚拟机相关的功能。

运行shell

利用Runtime类可以实现很多功能,例如执行shell,获取CPU的核心数等.

下面这段代码可以用来获取shell执行结果:

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class RunShell {

public static void main(String[] args){
try {

String shpath="/home/test.sh";

Process ps = Runtime.getRuntime().exec(shpath);

ps.waitFor();

BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));

StringBuffer sb = new StringBuffer();

String line;

while ((line = br.readLine()) != null) {

sb.append(line).append("\n");

}

String result = sb.toString();

System.out.println(result);

}

catch (Exception e) {

e.printStackTrace();

}

}

}


但是有人经过测试,Java在执行多行的shell时候,可能会比较消耗系统资源。

内存相关

Runtime类可以用来查看当前Java进程运行时的进程情况:

public static void main(String[] args) {
Runtime runtime = Runtime.getRuntime();
long free = runtime.freeMemory();
//返回JVM当前可用的内存数
long max = runtime.maxMemory();
//返回JVM尝试使用的最大内存数
long total = runtime.totalMemory();
//返回JVM的内存总数
System.out.println(free);
System.out.println(max);
System.out.println(total);
}


下面的代码展示了内存垃圾回收和获取当前内存数量的方法:

public class Main {

public static void main(String[] args) {
Runtime r = Runtime.getRuntime();
long mem1,mem2;
Integer someints[] = new Integer[1000];
System.out.println("Total memory is :" + r.totalMemory());
mem1 = r.freeMemory();
System.out.println("Initial free is : " + mem1);
r.gc();
mem1 = r.freeMemory();
System.out.println("Free memory after garbage collection : " + mem1);
//allocate integers
for(int i=0; i<1000; i++) someints[i] = new Integer(i);

mem2 = r.freeMemory();
System.out.println("Free memory after allocation : " + mem2);
System.out.println("Memory used by allocation : " +(mem1-mem2));

//discard Intergers
for(int i=0; i<1000; i++) someints[i] = null;
r.gc(); //request garbage collection
mem2 = r.freeMemory();
System.out.println("Free memory after collecting " + "discarded integers : " + mem2);
}
}


程序调试输出的结果是:

Total memory is :122683392

Initial free is : 120762296

Free memory after garbage collection : 122273296

Free memory after allocation : 121633600

Memory used by allocation : 639696

Free memory after collecting discarded integers : 122289672

虚拟机相关

1.addShutdownHook()

当JVM虚拟机关闭的时候,执行相关动作。例如:

public class Main {

public static void main(String[] args) {
System.out.println("I am running");
Runtime r = Runtime.getRuntime();
r.addShutdownHook(new Thread(
()->{
System.out.println("hello world");
}
));
}
}


输出结果:

I am running.

hello world

2.halt()

强制停止虚拟机。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: