知识点:
1.Runtime类的主要作用。
2.Runtime类的主要定义形式。
具体内容:
在每一个JVM进程里面都会有一个Runtime类对象,这个类的主要功能是取得一些与运行时有关的环境数据或则创建新的进程等操作。
在Runtime类定义的时候它的构造方法已经被私有化了,这就属于单例设计模式的应用。因为要保证在整个进程里面只有唯一的一个的Runtime类对象。所以在Runtime类里面提供有一个s··tatic型的方法,这个方法可以取得Runtime类实例化对象:public static Runtime getRuntime()
Runtime类是直接与本地运行有关的所有相关属性的集合,所以在Runtime类里面定义有如下的方法:
1.返回所有可用内存空间:public long totalMemory();
2.返回最大可用内存空间:public long maxMemory();
3.返回空余内存空间:public long freeMemory
注:long一般都用来描述内存文件大小,或则日期时间
范例:观察内存大小(随着JDK的发展可以处理的内存空间越来越大)
package 算法;
public class TestDemo {
public static void main(String args[]){
Runtime run = Runtime.getRuntime(); //取得Runtime类的实例化对象
System.out.println("1、MAX= "+run.maxMemory());
System.out.println("1、TOTAL= "+run.totalMemory());
System.out.println("1、FREE= "+run.freeMemory());
String str = "";
for(int x=0;x<1000;x++){
str += x; //
}
System.out.println("2、MAX= "+run.maxMemory());
System.out.println("2、TOTAL= "+run.totalMemory());
System.out.println("2、FREE= "+run.freeMemory());
}
}
如果一旦产生了过多的垃圾之后,那么就会改变可以用的内存空间的大小。在上面的代码中如果Ffor()循环太多的化,最后显示的freeMemory()显示的可用内存反倒会变大就是这个原因。
可是在Runtime类里面有一个方法:public void gc(),可以释放掉垃圾。
package 算法;
public class TestDemo {
public static void main(String args[]){
Runtime run = Runtime.getRuntime(); //取得Runtime类的实例化对象
System.out.println("1、MAX= "+run.maxMemory());
System.out.println("1、TOTAL= "+run.totalMemory());
System.out.println("1、FREE= "+run.freeMemory());
String str = "";
for(int x=0;x<1000;x++){
str += x; //产生大量垃圾
}
System.out.println("2、MAX= "+run.maxMemory());
System.out.println("2、TOTAL= "+run.totalMemory());
System.out.println("2、FREE= "+run.freeMemory());
run.gc(); //释放垃圾空间
System.out.println("3、MAX= "+run.maxMemory());
System.out.println("3、TOTAL= "+run.totalMemory());
System.out.println("3、FREE= "+run.freeMemory());
}
}
面试题目:请解释什么叫GC?如何处理?
- GC(Garbage Collector)垃圾收集器,指的是释放无用的内存空间。
- GC会由系统不定期进行自动的回收,或者调用Runtime类中的gc()方法进行手动回收
实际上Runtime类还有一个更加有意思的功能,就是说它可以调用本机的可以执行程序,并且创建进程。
- 执行程序的进程:public Process exec(String command) throws IOException
范例:执行进程
package 算法;
import java.io.IOException;
public class TestDemo {
public static void main(String args[]) throws IOException, InterruptedException{
Runtime run = Runtime.getRuntime(); //取得Runtime类的实例化对象
Process pro = run.exec("mspaint.exe"); //调用本机可执行程序
Thread.sleep(2000);
pro.destroy(); //销毁进程
}
}
总结:
1.Runtime类使用了单列设计模式,必须通过内部的getRuntime()方法才可以去得Runtime类对象。
2.Runtime类提供了gc()方法可以提供手工释放内存。