3.3常用类(java学习笔记)Runtime与Process
2018-08-26 17:17:59来源:博客园 阅读 ()
一、Runtime
我们来看下文档中对Runtime的说明:
每一个java程序都有一个属于Runtime类的实例,它允许程序连接到程序运行环境。
当前runtime可以用getRuntime()方法获得。
程序无法创建自己的此类实例。
public class Test { public static void main(String[] args) { Runtime run1 = Runtime.getRuntime();//获取当前程序的runtime Runtime run2 = Runtime.getRuntime(); System.out.println(run1.freeMemory());//打印出java虚拟机中的空闲内存 System.out.println(run2.freeMemory()); } }
运行结果:
63144792
63144792
每个java程序有一个属于Runtime的实例,所以run1和run2是一样的,它们都是与本程序运行环境相连接。
下面介绍下几个方法:
maxMenmory(),获得jvm最大内存值,返回一个long型值。
freeMenmory(),获得空闲内存值,返回一个long型值。
gc(),运行垃圾回收器,释放内存。
1 import java.io.IOException; 2 import java.lang.StringBuffer; 3 4 public class Test { 5 public static void main(String[] args) { 6 String str = ""; 7 StringBuffer sb = new StringBuffer(""); 8 Runtime run = Runtime.getRuntime(); 9 System.out.println("jvm中最大内存\t\t" + run.maxMemory()); 10 long start = run.freeMemory(); 11 for(int i = 0; i < 1000; i++){ 12 str += i; 13 } 14 long end = run.freeMemory(); 15 System.out.println("执行String消耗的内存\t" + (start - end)); 16 start = run.freeMemory(); 17 for(int i = 0; i < 1000; i++){ 18 sb.append(i); 19 } 20 end = run.freeMemory(); 21 System.out.println("执行strBuf消耗的内存\t" + (start - end)); 22 System.out.println("执行gc前空闲内存\t\t" + run.freeMemory()); 23 run.gc(); 24 System.out.println("执行完gc空闲内存\t\t" + run.freeMemory()); 25 } 26 }
运行结果:
jvm中最大内存 928514048 执行String消耗的内存 5704248 执行strBuf消耗的内存 0 执行gc前空闲内存 57440544 执行完gc空闲内存 63592208
可以看出String不可变会不停创建新的连接,所以比较占内存。
StringBuffer明显占内存少,频繁对字符串进行操作做好用StringBuffer。
exec(String command)执行指定字符串命令
1 import java.io.IOException; 2 3 public class Test { 4 public static void main(String[] args) { 5 Runtime run = Runtime.getRuntime(); 6 try { 7 run.exec("notepad.exe");//打开记事本。 8 } catch (IOException e) { 9 // TODO Auto-generated catch block 10 e.printStackTrace(); 11 } 12 } 13 }
由于斜杠\是转义字符所以打\\才能代表路径中的\。
上面执行的是打开记事本的命令。
我们还可以将执行一些命令:
例如:Runtime.getRuntime().exec("cmd /k copy c:\\b\\b.txt c:\\a\\a.txt "); (将c:\b\b.txt的内容复制到c:\a\a.txt)
将exec()中字符串复制到下列窗口中执行和调用exec()执行效果是一样的。
windows + R弹出此窗口:
cmd /k 加上k代表运行完命令后窗口不关闭,这个在运行窗口会有明显效果,在java中调用exec()运行不会弹出命令窗口。
cmd /c 加上c代表运行后窗口会关闭。
具体命令有兴趣可以查阅相关资料书籍。
二.Process
我们来看文档中对Process的描述:
ProcessBuilder.start()和Runtime.exec()方法创建本地进程并且返回Process子类实例,
可以使用它来控制并获得进程信息。
首先我们之前用到了exec方法,这个方法会返回一个Process类型的实例。
我们可以通过这个实例来对进程进行操作。
例如之前使用了exec()打开记事本,那么就会返回一个Process实例,用于操作进程。
1 import java.io.IOException; 2 3 public class Test { 4 public static void main(String[] args) { 5 6 Process notepad = null; //创建一个Process的实例,用于接受exec()返回的进程。 7 try { 8 notepad = Runtime.getRuntime().exec("notepad.exe"); //接受返回的进程 9 Thread.sleep(5000); //休眠5s 10 } catch (IOException e) { 11 // TODO Auto-generated catch block 12 e.printStackTrace(); 13 } catch (InterruptedException e) { 14 // TODO Auto-generated catch block 15 e.printStackTrace(); 16 } 17 notepad.destroy(); //结束notepad进程。 18 } 19 }
运行上面代码会先打开记事本,然后过5s会关闭记事本。
记事本打开时,任务管理器中也会有记事本的进程,关闭后记事本进程也结束。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:什么样的简历不会被丢进回收站
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash