一、Runtime

我们来看下文档中对Runtime的说明:

每一个java程序都有一个属于Runtime类的实例,它允许程序连接到程序运行环境。

当前runtime可以用getRuntime()方法获得。

程序无法创建自己的此类实例。

  1. public class Test {
  2. public static void main(String[] args) {
  3. Runtime run1 = Runtime.getRuntime();//获取当前程序的runtime
  4. Runtime run2 = Runtime.getRuntime();
  5.  
  6. System.out.println(run1.freeMemory());//打印出java虚拟机中的空闲内存
  7. System.out.println(run2.freeMemory());
  8. }
  9. }
  1. 运行结果:
  2. 63144792
  3. 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. }
  1. 运行结果:
    jvm中最大内存 928514048
  2. 执行String消耗的内存 5704248
  3. 执行strBuf消耗的内存 0
  4. 执行gc前空闲内存 57440544
  5. 执行完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会关闭记事本。

记事本打开时,任务管理器中也会有记事本的进程,关闭后记事本进程也结束。

3.3常用类(java学习笔记)Runtime与Process的更多相关文章

  1. 3.4常用类(java学习笔记)Math和Random

    一.Math 这个类包含执行指数.对数.平方根法.三角函数等基本的数字运算. Math中还包含一些静态常量供我们调用. 如PI圆周率,E. 1.abs(),返回该数的绝对值. public class ...

  2. java学习笔记7--抽象类与抽象方法

    接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...

  3. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

  4. java学习笔记14--多线程编程基础1

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...

  5. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  6. java学习笔记11--集合总结

    java学习笔记系列: java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Ob ...

  7. java学习笔记9--内部类总结

    java学习笔记系列: java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对 ...

  8. java学习笔记15--多线程编程基础2

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...

  9. java学习笔记12--异常处理

    java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...

  10. java学习笔记10--泛型总结

    java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5-- ...

随机推荐

  1. springboot与dubbo结合

    转:http://www.cnblogs.com/Alandre/p/6490142.html  写的很好! 本文提纲 一.为啥整合 Dubbo 实现 SOA 二.运行 springboot-dubb ...

  2. bzoj 1517 [POI2006]Met 贪心

    [POI2006]Met Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 203  Solved: 108[Submit][Status][Discus ...

  3. JavaBean定义、JSP中使用以及内省操作

        Apache commons 一系列的开源工具室非常值得学习的实现. 一 JavaBean定义     JavaBean是一种可重复使用.且跨平台的软件组件.JavaBean可分为两种:一种是 ...

  4. MyEclipse快捷键大全(转)1

    Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+ ...

  5. jsp小知识点(2)

    一:自定义的函数库:在wh.tld中 <description>JSTL 1.1 functions library</description> <display-nam ...

  6. [bzoj2152]聪聪可可——点分治

    Brief Descirption 给定一棵带权树,您需要统计路径长度为3的倍数的路径长度 Algorithm Analyse 点分治. 考察经过重心的路径.统计出所有deep,统计即可. Code ...

  7. Oracle 脚本记录

    给表创建序列或触发器 create or replace procedure p_createseq(tablename in varchar2,key in varchar2) Authid Cur ...

  8. JavaScript DOM编程艺术 读书笔记

    2. JavaScript语法 2.1 注释      HTML允许使用"<!--"注释跨越多个行,但JavaScript要求这种注释的每行都必须在开头加上"< ...

  9. 如何加快Eclipse的启动速度?

    http://it.taocms.org/12/6457.htm 浅析配置更快的Eclipse方法 What is the Metadata GC Threshold and how do I tun ...

  10. Linux虚拟地址空间布局以及进程栈和线程栈总结【转】

    转自:http://www.cnblogs.com/xzzzh/p/6596982.html 原文链接:http://blog.csdn.net/freeelinux/article/details/ ...