java源码解读@IT·互联网程序员

java基础:java.lang.Runtime

2017-05-27  本文已影响119人  wuxiaowei

Runtime简介

当程序运行时,每个java应用程序都能得到一个运行时的实例,应用程序不能创建这个实例,只能从getRuntime()方法获得RunTime实例。

1. RunTime是单例模式,不能实例化

private static Runtime currentRuntime = new Runtime();
public static Runtime getRuntime() { 
    return currentRuntime;
}
private Runtime() {}

我们看到源码是单例模式实例(饿汉式,线程安全 但效率比较低 ),设计成单例主要是从节约系统资源来考虑。

2. Runtime几个核心方法

Paste_Image.png
当前内存: 15722728
执行完GC后内存:16027912
15722728
16252928
已使用:530200

3. RunTime应用

我们可以结合RunTime方法几个特点,做个实时内存监控,如我监控某个方法执行消耗了多少内存
public static void main(String[] args) {
Long freeMemery1,freeMemery2;
try {
Runtime r = Runtime.getRuntime();
freeMemery1 = r.freeMemory();
aa();
freeMemery2 = r.freeMemory();
System.out.println("调用方法aa()使用了" + (freeMemery1 - freeMemery2));
} catch (Exception e) {
e.printStackTrace();
}
}

    public static void aa(){
        byte aa [] = new byte[1024 * 1024];
    }

输出结果:
调用方法aa()使用了1048592

读者可根据上面的方法自行实现,实现依据是RunTime是单例的,在单机JVM上拿总内存减去空闲内存即可

可以windows平台上直接调用,如查看java -version
public static void main(String[] args) {
try {
Runtime r = Runtime.getRuntime();
Process process = r.exec("java");
InputStream in = process.getInputStream();
Scanner scanner;
scanner = new Scanner(in);
while (scanner.hasNext()) {
System.out.println(scanner.nextLine());
}
} catch (Exception e) {
e.printStackTrace();
}
}

Paste_Image.png

总结

本文是举例说明了我们常见的几个方法,其中内存监控和exec最为常见。上面示例都实现并测试通过,如有不正确,请批评指正,谢谢。

上一篇 下一篇

猜你喜欢

热点阅读