Runtime类

2019-01-26  本文已影响0人  秋笙fine

1.Runtime类的主要作用

在每一个JVM进程里面都会存在有一个Runtime类的对象,这个类的主要功能是取得一些与运行时有关的环境属性,或者创建新的进程。
在Runtime类定义的时候,它的构造方法已经被私有化了(单例设计模式的应用),以此保证,在整个运行过程中,只有唯一一个Runtime类的对象。所以在Runtime类里面提供有一个static方法,取得Runtime类实例对象

public static Runtime getRuntime();

2.Runtime类的定义形式

Runtime类中有以下方法:
public long totalMemory();//返回所有可用内存空间
public long maxMemory();//返回最大可用内存空间
public long freeMemory();//返回空余内存空间

范例:观察内存大小:

public class TestDemo{
    
    public static void main(String[] args){
        Runtime runtime=Runtime.getRuntime();
        System.out.println("MAX="+runtime.maxMemory());
        System.out.println("Total="+runtime.totalMemory());
        System.out.println("FREE="+runtime.freeMemory());
    }   
}
image.png

如果一旦产生了过多垃圾,那么就会改变可用的内存空间大小,为此Runtime类里面提供了:public void gc();手动实现JVM的gc机制。

package TestDemo;


public class TestDemo{
    
    public static void main(String[] args){
        Runtime runtime=Runtime.getRuntime();
        System.out.println("MAX="+runtime.maxMemory());
        System.out.println("Total="+runtime.totalMemory());
        System.out.println("FREE="+runtime.freeMemory());
        String str="";
        for (int i = 0; i < 9000; i++) {
            str+=i;
        }
        System.out.println("MAX="+runtime.maxMemory());
        System.out.println("Total="+runtime.totalMemory());
        System.out.println("FREE="+runtime.freeMemory());
        runtime.gc();
        System.out.println("MAX="+runtime.maxMemory());
        System.out.println("Total="+runtime.totalMemory());
        System.out.println("FREE="+runtime.freeMemory());
    }   
}


image.png

面试题:请解释什么叫GC?如何处理?
GC(Garbage Collection) 垃圾收集器,指的是释放无用的内存空间,GC会由JVM不定期自动回收,(FGC,YGC,GC算法)或者调用Runtime的gc()方法。

Runtime类有一个更有意思的方法, 调用本机的可执行程序并且创建进程

public Process exec(String command)throws IOException

package TestDemo;


public class TestDemo{
    
    public static void main(String[] args)throws Exception{
        Runtime runtime=Runtime.getRuntime();
        Process pro=runtime.exec("mspaint.exe");//调用本机可执行程序
        Thread.sleep(5000);
        pro.destroy();//销毁进程
    }   
}


的确启动了本机的画图程序,5秒后关闭了

总结

1.Runtime类使用了单例设计模式,必须通过内部的getRuntime()方法获取实例化对象
2.Runtime类提供了gc()用于手动GC

上一篇下一篇

猜你喜欢

热点阅读