Java 系统相关 —— System类和RunTime类
Posted woshi123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 系统相关 —— System类和RunTime类相关的知识,希望对你有一定的参考价值。
Java 系统相关
Java程序在不同操作系统上运行时,可能需要取得平台相关的属性,或者调用平台命令来完成特定功能。
Java提供了System类和Runtime类来与程序的运行平台进行交互
System类
System类代表当前Java程序的运行平台,程序不能创建System类的对象,只能通过调用System类的类变量和类方法来获取信息和执行功能;
System类提供了代表标准输入、标准输出和错误输出的类变量,并提供了一些静态方法用于访问环境变量、系统属性的方法,还有加载文件和动态链接库的方法。
加载文件和动态链接库只对native方法有用,对于一些特殊的功能(如访问操作系统或底层硬件设备等)Java程序无法实现,必须借助C语言来完成,此时需要使用C语言来提供实现,步骤如下:
- Java程序中声明native修饰的方法,类似于abstract方法,只有方法签名,没有实现。编译该Java程序,生成一个.class文件
- 用 javah 编译第1步生成的.class文件,生成一个.h文件
- 写一个.cpp文件实现native方法,这一步需要包含第2步产生的.h文件(这个.h文件中又包含了JDK带的 jni.h 文件)
- 将第3步的.cpp文件编译成动态链接库文件
- 在Java中用System类的 loadLibrary..() 方法或Runtime类的 loadLibrary() 方法加载第4步产生的动态链接库文件,Java程序中就可以调用这个native方法了
获取系统所有的环境变量:
Map<String,String> env = System.getenv();
for (String name:env.keySet()){
System.out.println(name+"------------->"+env.get(name));
}
//获取指定环境变量的值
System.out.println(System.getenv("JAVA_HOME"));
获取所有的系统属性:
Properties props = System.getProperties();
//将所有的系统属性保存到props.text文件中,并生成到当前路径下
props.store(new FileOutputStream("props.text"),"System Properties");
//输出特定的系统属性
System.out.println(System.getProperty("os.name"));
System类提供了通知系统进行垃圾回收的gc()方法,以及通知系统进行资源清理的runFinalization方法:
System.gc();
System.runFinalization();
System类还提供了通知系统进行垃圾回收的方法:currentTimeMillis()和nanoTime()
它们都返回当前时间与 UTC 1970-1-1 00:00:00 的时间差,前者以毫秒为单位,后者以纳秒为单位
这两个方法返回的时间粒度取决于底层操作系统,
许多操作系统以十几毫秒为单位测量时间,currentTimeMillis()方法不可能返回精确的毫秒数
nanoTime()方法就更少用了,因为大部分操作系统都不支持使用纳秒作为计时单位
System.out.println(System.currentTimeMillis());
System.out.println(System.nanoTime());
除此之外,System类的in , out 和 err 分别代表系统的标准输入(通常是键盘),标准输出(通常是显示器)和错误输入流,并提供了setIn(),setOut()和setErr()方法来改变系统的标准输入、标准输出和标准错误输出流。
System类还提供了一个identityHashCode(Object x)方法,该方法返回指定对象精确的hashCode值,也就是根据对象地址计算得到的hashCode值。
当某个类的hashCode()方法被重写后,该类实例的hashCode()方法就不能唯一地标识该类的对象;
但System类的identityHashCode(Object x)方法,依然是根据该类的地址计算得到的hashCode值。所以,如果两个对象的identityHashCode值相同,两个对象绝对是同一个对象
Runtime类
Rumtime类代表Java程序的运行时环境,每个Java程序都有一个与之相应的RunTime实例,应用程序通过该对象与运行时环境相连。
应用程序不能创建自己的RunTime实例,但可以通过getRunTime()方法获取与之关联的RunTime对象。
与 System 相似的是,RunTime 类也提供了 gc() 方法与 runFinalization() 方法来通知系统进行垃圾回收、清理系统资源,并提供了 load(String filename) 和 loadLibrary(String libname)方法来加载文件和动态链接库
RunTime类代表Java程序的运行时环境,可以访问JVM的相关信息,如处理器数量、内存信息等:
public class RunTimeTest {
public static void main(String[] args) {
//获取Java程序关联的运行时对象
Runtime runtime = Runtime.getRuntime();
System.out.println("处理器数量:"+runtime.availableProcessors());
System.out.println("空闲内存数:"+runtime.freeMemory());
System.out.println("总内存数:"+runtime.totalMemory());
System.out.println("可用最大内存数:"+runtime.maxMemory());
}
}
除此之外,Runtime还有一个功能——可以直接单独启动一个进程来运行操作系统的命令:
public class RunTimeTest {
public static void main(String[] args) throws IOException {
Runtime runtime = Runtime.getRuntime();
//打开记事本
runtime.exec("notepad.exe");
}
}
以上是关于Java 系统相关 —— System类和RunTime类的主要内容,如果未能解决你的问题,请参考以下文章
未能从程序集“mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“System.Runt