package ioc;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Date;
import java.util.Properties;
/**
* @Author:zhuo
* @Date:2018/4/27 11:47
*/
public class SystemInfoPrint {
public static void main(String[] args) {
/**
* 1.打印配置文件到外部文件及标准输出
* 2.介绍runtime的内存概念
* 3.介绍runtime的其他方法
*/
// 1.打印配置
System.out.println(new Date());
Properties p = System.getProperties(); // 获取系统属性
Writer writer = null;
try {
writer = new PrintWriter("system_info.txt");
p.store(writer,null); //存储配置到外部对象文件中
} catch (IOException e) {
e.printStackTrace();
}
p.list(System.out); //在标准输出流中打印properties的属性清单
// 每个Java应用程序都有一个Runtime类的Runtime ,允许应用程序与运行应用程序的环境进行交互。
// 当前运行时可以从getRuntime获取。应用程序无法创建自己的此类的实例。
Runtime runtime = Runtime.getRuntime(); // 获取运行实例
//2.内存使用相关
System.out.println("下面打印内存使用情况");
// 虚拟机当前可用的最大内存maxMemory,通过向操作系统申请获得。如果没有通过选项配置,是一定的。单位为:MB
System.out.println("最大内存"+runtime.maxMemory()/1024/1024);
// 虚拟机当前运行程序使用的内存,单位为:MB
System.out.println("已用内存"+runtime.totalMemory()/1024/1024);
//3.其他重要的runtime方法介绍
System.out.println(runtime.availableProcessors());//返回可用于java虚拟机的处理器数量
// exec() 一连串方法,用于开启子进程
try {
byte[] buff = runtime.exec("ping " + "www.baidu.com").getInputStream().readAllBytes(); // 测试网络连接
String info = new String(buff);
System.out.println(info); //打印ping的结果, 根据平台编码,可能产生中文乱码
} catch (IOException e) {
e.printStackTrace();
}
//runtime.load(String filename); 加载作为动态库的指定文件名。
//loadLibrary(String libname); 加载具有指定库名的动态库,关于java如何调用动态库下一节将为大家介绍
//halt(int status); 状态码status<0表示非正常终止 ,函数强制终止当前正在运行的Java虚拟机,慎用
//void gc(); 垃圾收集器 ,主动调用无法立即进行垃圾清理,只是提示VM需要清理了,何时清理由VM确定
}
}