Runtime 与操作系统交互

java.lang.Runtime
每一个java程序都有一个Runtime类的单一实例,可以通过getRuntime静态方法获得。程序通过它与程序的运行环境(也就是操作系统)相交互。

1.内存查看

int java.lang.Runtime. availableProcessors()
jvm的可用处理器数量。

long java.lang.Runtime. totalMemory()
初始的总内存,单位为byte。
long java.lang.Runtime. maxMemory()

最大可用内存。

long java.lang.Runtime.freeMemory()

当前可用内存。

	public static void main(String[] args) {
		Runtime rt = Runtime.getRuntime();
		long totalMemorySize = rt.totalMemory()/1024/1024; //初始的总内存
		long maxMemorySiz = rt.maxMemory()/1024/1024; //最大可用内存
		long freeMemorySize = rt.freeMemory()/1024/1024; //当前可用内存
		String str=String.format("%d %d %d", totalMemorySize,maxMemorySiz,freeMemorySize);
		System.out.println(str);
		
		double[] arr=new double[165456789];
		
		 totalMemorySize = rt.totalMemory()/1024/1024; //初始的总内存
		 maxMemorySiz = rt.maxMemory()/1024/1024; //最大可用内存
		 freeMemorySize = rt.freeMemory()/1024/1024; //当前可用内存
		 str=String.format("%d %d %d", totalMemorySize,maxMemorySiz,freeMemorySize);
		System.out.println(str);
		
		}
	/*121 1776 118
1369 1776 103
*/

2.运行其他程序

Process java.lang.Runtime.exec(String command) throws IOException
在一个隔离的进程中执行command命令。


java.lang.Process
可通过ProcessBuilder.start()与Runtime.exec()方法得到Process实例。此类提供了很多方法,可从process中得到输入,也可以向process中输出;还可以等待进程结束并检查退出码;可以摧毁process。

InputStream java.lang.Process.getInputStream()
从Process的标准输出得到InputStream。函数内部通过管道实现。

int java.lang.Process.waitFor() throws InterruptedException
等待Process执行完毕,达到同步的效果。返回值为process的返回值。默认地,0表示正常退出。

public class SudoJava {
	public static void main(String[] args) throws IOException, InterruptedException {
		StringBuilder sb = new StringBuilder("sudo ");
		for (String str : args) 
			sb.append(str).append(" ");
		//待执行的命令在子进程中执行。若没有执行完毕父进程结束,则子进程也要被销毁。
		//若想保证进程执行完全,需要process.waitFor();
		Process process=Runtime.getRuntime().exec(sb.toString());
		process.waitFor();
	}
}

3.定时任务例子

package com.yichudu;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class RunScriptTimer {
	static long periodBySecond=1;
	//注意  x.sh 需要已经有可执行权限
	public static void main(String[] args) throws ParseException {
		if(args==null ||args.length<1){
			System.err.println("need to input arguement!");
			return;
		}
		final String fileName=args[0];
		String dateStr="2015-01-01 12:00:00";  
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
		Date date=sdf.parse(dateStr);  
		new Timer().schedule(new TimerTask() {
			@Override
			public void run() {
				 //待执行的命令在子进程中执行。若没有执行完毕父进程结束,则子进程也要被销毁。  
		        //若想保证进程执行完全,需要process.waitFor();
				try {
					Process process=Runtime.getRuntime().exec(fileName);  
					process.waitFor();
				} catch (InterruptedException | IOException e) {
					e.printStackTrace();
				} 
			}
		}, new Date(),periodBySecond*1000);
	}
}

4. 添加退出钩子

void java.lang.Runtime.addShutdownHook(Thread hook)

程序在退出时(正常退出、System.exit()、与 被操作系统强行终止等),hookThread得到触发。可以添加多个hookThread。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值