3.3常用类(java学习笔记)Runtime与Process
一、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(),运行垃圾回收器,释放内存。
import java.io.IOException;
import java.lang.StringBuffer; public class Test {
public static void main(String[] args) {
String str = "";
StringBuffer sb = new StringBuffer("");
Runtime run = Runtime.getRuntime();
System.out.println("jvm中最大内存\t\t" + run.maxMemory());
long start = run.freeMemory();
for(int i = 0; i < 1000; i++){
str += i;
}
long end = run.freeMemory();
System.out.println("执行String消耗的内存\t" + (start - end));
start = run.freeMemory();
for(int i = 0; i < 1000; i++){
sb.append(i);
}
end = run.freeMemory();
System.out.println("执行strBuf消耗的内存\t" + (start - end));
System.out.println("执行gc前空闲内存\t\t" + run.freeMemory());
run.gc();
System.out.println("执行完gc空闲内存\t\t" + run.freeMemory());
}
}
运行结果:
jvm中最大内存 928514048
执行String消耗的内存 5704248
执行strBuf消耗的内存 0
执行gc前空闲内存 57440544
执行完gc空闲内存 63592208
可以看出String不可变会不停创建新的连接,所以比较占内存。
StringBuffer明显占内存少,频繁对字符串进行操作做好用StringBuffer。
exec(String command)执行指定字符串命令
import java.io.IOException;
public class Test {
public static void main(String[] args) {
Runtime run = Runtime.getRuntime();
try {
run.exec("notepad.exe");//打开记事本。
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
由于斜杠\是转义字符所以打\\才能代表路径中的\。
上面执行的是打开记事本的命令。
我们还可以将执行一些命令:
例如: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实例,用于操作进程。
import java.io.IOException;
public class Test {
public static void main(String[] args) {
Process notepad = null; //创建一个Process的实例,用于接受exec()返回的进程。
try {
notepad = Runtime.getRuntime().exec("notepad.exe"); //接受返回的进程
Thread.sleep(5000); //休眠5s
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
notepad.destroy(); //结束notepad进程。
}
}
运行上面代码会先打开记事本,然后过5s会关闭记事本。
记事本打开时,任务管理器中也会有记事本的进程,关闭后记事本进程也结束。
3.3常用类(java学习笔记)Runtime与Process的更多相关文章
- 3.4常用类(java学习笔记)Math和Random
一.Math 这个类包含执行指数.对数.平方根法.三角函数等基本的数字运算. Math中还包含一些静态常量供我们调用. 如PI圆周率,E. 1.abs(),返回该数的绝对值. public class ...
- java学习笔记7--抽象类与抽象方法
接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...
- java学习笔记16--I/O流和文件
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input Output)流 IO流用来处理 ...
- java学习笔记14--多线程编程基础1
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...
- java学习笔记13--反射机制与动态代理
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...
- java学习笔记11--集合总结
java学习笔记系列: java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Ob ...
- java学习笔记9--内部类总结
java学习笔记系列: java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对 ...
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- java学习笔记12--异常处理
java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...
- java学习笔记10--泛型总结
java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5-- ...
随机推荐
- 利用WebStorm来管理你的Github
什么是Github Github是一个共享虚拟主机服务,用于存放使用Git版本控制的软件代码和内容项目,以最简单的方式来说,其实就是一个代码库,上面有全世界无数优秀的码农上传自己的作品和大家共享(当然 ...
- hbase集群写不进去数据的问题追踪过程
hbase从集群中有8台regionserver服务器,已稳定运行了5个多月,8月15号,发现集群中4个datanode进程死了,经查原因是内存 outofMemory了(因为这几台机器上部署了spa ...
- centos7上安装docker-ce社区版
报错:Error: docker-ce-selinux conflicts with 2:container-selinux-2.12-2.gite7096ce.el7.noarch 转载:http: ...
- php魔术方法的使用
本文测试环境为 php5.5.12 一.__get .__set 将对象的属性进行接管. 一般来说,总是把类的属性定义为private,但是对属性的读取和赋值操作非常频繁,在php5+,预定义__se ...
- Linux echo命令打印带有颜色的字
一.命令格式如下: echo -e "\033[字背景颜色;文字颜色m字符串\033[0m" 例如: echo -e ...
- php连接mysql报错——Fatal error: Call to undefined function mysql_connect() in
练习php连接mysql数据库 代码:mysql_connect("127.0.0.1:3306","root", ..... 浏览器报错:Fatal erro ...
- cve-2012-5613 mysql本地提权
cve-2012-5613 是一个通过FILE权限写Trigger的TRG存储文件(即伪造Trigger),由root触发而导致权限提升的漏洞.不知道为什么这个漏洞一直没修,可能mysql认为这是一 ...
- nginx中fastcgi_params配置参数
Nginx 的 fastcgi 模块提供了 fastcgi_param 指令来主要处理这些映射关系,下面 Ubuntu 下 Nginx 的一个配置文件,其主要完成的工作是将 Nginx 中的变量翻译成 ...
- Linux 下面adb命令的使用
平板或者android手机使用adb是非常方便的.接下来我就介绍下adb使用以及一些常用的命令. 1,连接 用adb连接线,一端接PC的USB中,一端接平板或手机的adb口,当然得确保线没有问题,而且 ...
- Django-内置Admin
Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttyp ...