java中Runtime类总结

一.了解Runtime类

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

直接使用此静态方法可以取得Runtime类的实例
Runtime类的常用方法


二.使用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());
	}
}


验证->频繁改变String类字符串引用造成内存浪费,产生大量垃圾:

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("JVM空闲内存量:"+run.freeMemory());
	}
}

使用StringBuffer类实现同样效果,看一下内存使用情况:

public class RuntimeDemo02{
	public static void main(String[] args){
		Runtime run = Runtime.getRuntime();	//通过Runtime类的静态方法获取Runtime类的实例
		System.out.println("JVM最大内存量:"+run.maxMemory());
		System.out.println("JVM空闲内存量:"+run.freeMemory());
		StringBuffer buf = new StringBuffer();
		buf.append("Hello").append("World");
		System.out.println(buf);
		for(int i=0;i<2000;i++){
			buf.append(i);
		}
		System.out.println("JVM空闲内存量:"+run.freeMemory());
	}
}


可以看到利用StringBuffer实现并未产生垃圾,节省了空间。既然使用String类改变字符串引用产生大量的垃圾,则需要进行垃圾处理,释放空间

2.JVM垃圾回收

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());
	}
}

三.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()方法释放掉垃圾空间,还可以运行本机的程序

 
  
 
  
 
  
 
  
 
  
 
  
 
  
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值