Runtime类
该类用于表示虚拟机(JVM)运行时的状态,每次启动JVM都对应一个Runtime实例,且只有一个实例,利用Runtime类可以启动新的进程或进行相关运行时环境的操作。此外,该类采用单例模式设计,对象不可以直接实例化。所以,取得Runtime实例化对象的的方法为:public static Runtime getRuntime()
Runtime类的常用方法
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public static Runtime getRuntime() | 普通 | 取得Runtime类的实例化对象 |
2 | public long maxMemory() | 普通 | 返回最大可用内存大小 |
3 | public long totalMemory() | 普通 | 返回所有可用内存大小 |
4 | public long freelMemory() | 普通 | 返回所有空余内存大小 |
5 | public void gc() | 普通 | 执行垃圾回收操作 |
6 | public Process exec(String command)throw IOException | 普通 | 创建新的进程 |
注意:取得内存信息时,返回的数据为long
例:观察内存大小
package Project.Study.RuntimeClass;
public class Test1 {
public static void main(String[]args){
Runtime run=Runtime.getRuntime(); //取得Runtime类的实例化对象
System.out.println("MAX="+run.maxMemory()); //取得最大可用内存
System.out.println("TOTAL="+run.totalMemory()); //取得全部可用内存
System.out.println("FREE="+run.freeMemory()); //取得空闲内存
}
}
//结果:
//MAX=2111832064
//TOTAL=132120576
//FREE=129517640
本程序动态取得当前系统中的各个内存空间信息,返回的结果单位是字节(Byte)。
值得注意的是,我们可以设置启动时的内存大小
Java中的内存划分:
每一块内存空间都会存在一个内存伸缩区,当内存不足时就会动态开辟。我们可以使用以下参数申请内存空间:
“-Xms”:初始分配内存,默认大小为1/64物理内存大小,但小于1G;
“-Xmx”:最大分配内存,默认大小为1/4物理内存大小,但小于1G;
“-Xmn”:设置年轻代堆内存大小。
一般会将“-Xms”和“-Xmx”两个参数的数值设为相同,以减少申请内存空间的时间。
gc()方法的使用
gc()方法可以实现垃圾内存释放的处理操作
例:观察gc()方法的使用
package Project.Study.RuntimeClass;
public class Test2 {
public static void main(String[]args){
Runtime run=Runtime.getRuntime(); //取得Runtime类的实例化对象
String str="";
for(int x=0;x<2000;x++){ //进行循环操作,产生大量垃圾,占用内存
str+=x;
}
System.out.println("【垃圾处理前的内存量】MAX="+run.maxMemory());
System.out.println("【垃圾处理前的内存量】TOTAL="+run.totalMemory());
System.out.println("【垃圾处理前的内存量】FREE="+run.freeMemory());
run.gc(); //释放垃圾空间
System.out.println("[垃圾处理后的内存量]MAX="+run.maxMemory());
System.out.println("[垃圾处理后的内存量]TOTAL="+run.totalMemory());
System.out.println("[垃圾处理后的内存量]FREE="+run.freeMemory());
}
}
//结果:
//【垃圾处理前的内存量】MAX=2111832064
//【垃圾处理前的内存量】TOTAL=132120576
//【垃圾处理前的内存量】FREE=122711832
//[垃圾处理后的内存量]MAX=2111832064
//[垃圾处理后的内存量]TOTAL=10485760
//[垃圾处理后的内存量]FREE=9292944 (???)
关于垃圾回收处理和对象创建
Runtime类有一个有意思的功能,可以通过它调用本机的可执行程序,并创建进程。
例:创建“mspaint.exe”(Windows的画板)进程
扫描二维码关注公众号,回复:
10995084 查看本文章
package Project.Study.RuntimeClass;
public class Test3 {
public static void main(String[]args) throws Exception {
Runtime run=Runtime.getRuntime(); //取得Runtime实例化对象
Process pro=run.exec("mspaint.exe"); //调用本机可执行程序
Thread.sleep(2000); //运行2s后自动关闭
pro.destroy(); //销毁进程
}
}
效果: