Runtime

Posted by 麦子 on Sunday, 2020年03月01日

转载地址:https://blog.csdn.net/tomcmd/article/details/48971051?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

了解Runtime类

Runtime:运行时,是一个封装了JVM的类。每一个JAVA程序实际上都是启动了一个JVM进程,每一个JVM进程都对应一个Runtime实例,此实例是由JVM为其实例化的。所以我们不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为。 查看官方文档可以看到,Runtime类中没有构造方法,本类的构造方法被私有化了, 所以才会有getRuntime方法返回本来的实例化对象,这与单例设计模式不谋而合

public static Runtime getRuntime()

使用Runtime获取JVM的空间信息

1. 得到JVM信息

每一个Runtime对象都是JVM实例化的,所以可以通过Runtime类取得相关信息

public class RuntimeDemo01{
	public static void main(String[] args){
		Runtime run = Runtime.getRuntime();	//通过Runtime类的静态方法获取Runtime类的实例
		System.out.println("JVM最大内存量:"+run.maxMemory());
		System.out.println("JVM空闲内存量:"+run.freeMemory());
	}
}

2. public void gc()

public class RuntimeDemo01{
	public static void main(String[] args){
		Runtime run = Runtime.getRuntime();	//通过Runtime类的静态方法获取Runtime类的实例
		System.out.println("JVM最大内存量:"+run.maxMemory());
		System.out.println("JVM空闲内存量:"+run.freeMemory());
		String str = "Hello"+"World";
		System.out.println(str);
		for(int i=0;i<2000;i++){
			str = str + i;
		}
		System.out.println("操作String之后的JVM空闲内存量:"+run.freeMemory());
		run.gc();
		System.out.println("垃圾回收之后的JVM空闲内存量:"+run.freeMemory());
	}
}

3. Runtime类与Process类

除了观察内存使用量之外,还可以直接使用Runtime类运行本机的可执行程序

public Process exec(String command)throwsIOException

例如:调用记事本:

public class RuntimeDemo03{
	public static void main(String[] args){
		Runtime run = Runtime.getRuntime();	//通过Runtime类的静态方法获取Runtime类的实例
		try{
			run.exec("notepad.exe");	//调用本机程序,此方法需要进行异常处理
		}catch(Exception e){
			e.printStackTrace();
		}		
	}
}

exec()方法的返回值是Process类,Process类也有一些方法可以使用,比如结束一个进程,通过destroy()结束

注意

Runtime类本身就是单例设计模式的一种应用,因为整个JVM中只存在一个Runtime类的对象,可以使用Runtime类取得JVM的系统信息,或者使用gc()方法释放掉垃圾空间,还可以运行本机的程序。

「真诚赞赏,手留余香」

真诚赞赏,手留余香

使用微信扫描二维码完成支付