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