Java中,System 类和 Runtime 类提供了一些关键的功能,用于与底层操作系统以及运行时环境进行交互。System类是Java标准库中的一个类,提供了对JVM的一些基本访问和控制方法。Runtime 类实例封装了运行时环境。为Java程序提供了与底层系统交互的强大工具,但也需要谨慎使用以避免潜在的问题。

1、System类常用方法和属性

System 类是一个提供了一系列有用的类字段和方法的最终类(final class),主要用于提供对系统级操作和系统环境的访问。

方法/属性描述
System.err标准错误输出流。
System.in标准输入流。
System.out标准输出流。
System.arraycopy()从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
System.clearProperty()根据key移除系统属性。
System.console()返回与当前 Java 虚拟机关联的唯一 Console 对象,没有返回null。
System.currentTimeMillis()返回以毫秒为单位的当前时间。
System.exit()终止当前正在运行的Java虚拟机。
System.gc()运行垃圾回收器。
System.getenv()返回当前系统环境变量键值映射(Map),并且是不可修改的。
System.getenv(String)获取指定环境变量的值。
System.getProperties()获取当前系统属性。
System.getProperty(String)根据key获取系统属性。
System.getProperty(String, String)key - 系统属性的名称,def - 默认值。
System.getSecurityManager()获取系统安全接口,返回值是SecurityManager对象。
System.identityHashCode()返回给定对象的哈希码。
System.inheritedChannel()返回从创建此Java虚拟机的实体中继承的信道。
System.load()从本地文件系统中以指定的文件名加载代码文件。
System.loadLibrary()加载指定库名称为libname的系统库。
System.mapLibraryName()返回与平台相关的本地库的名字。
System.nanoTime()返回最准确的可用系统计时器的当前值,以毫微秒为单位。
System.runFinalization()运行处于挂起终止状态的所有对象的终止方法。
System.runFinalizersOnExit()已过时。具有固有的不安全性。
System.setErr()重新分配标准错误输出流。
System.setIn()重新分配“标准”输入流。
System.setOut()重新分配“标准”输出流。
System.setProperties()将系统属性设置为 Properties 参数。
System.setProperty()设置指定键指示的系统属性。
System.setSecurityManager()设置系统安全性。

使用示例:

public class Main {
  public static void main(String[] args) {
        // 使用 System.out 打印信息
        System.out.println("Hello, World!");

        // 使用 System.err 打印错误信息
        //System.err.println("Error message!");

        // 获取系统当前时间
        long currentTime = System.currentTimeMillis();
        System.out.println("Current time in milliseconds: " + currentTime);

        // 获取系统环境变量
        String pathVariable = System.getenv("PATH");
        System.out.println("System PATH: " + pathVariable);

        // 获取系统属性
        String javaVersion = System.getProperty("java.version");
        System.out.println("Java Version: " + javaVersion);

        // 设置系统属性
        System.setProperty("myProperty", "myValue");
        String myProperty = System.getProperty("myProperty");
        System.out.println("Custom System Property: " + myProperty);

        // 运行垃圾回收器
        System.gc();
        System.out.println("Garbage collector invoked.");

        // 获取系统安全管理器
        SecurityManager securityManager = System.getSecurityManager();
        if (securityManager == null) {
            System.out.println("No security manager is set.");
        } else {
            System.out.println("Security manager is set.");
        }

        // 获取精确时间(纳秒)
        long nanoTime = System.nanoTime();
        System.out.println("Current time in nanoseconds: " + nanoTime);

        // System.exit() 示例(请注意,这将停止程序运行)
        // System.exit(0);
        System.exit(0); //success
  }
}

2、Runtime类常用方法和属性

Runtime 类代表了 Java 应用程序的运行时环境。每个 Java 应用程序都有一个单一的 Runtime 实例,它允许应用程序与其运行时环境进行交互。Runtime 类提供了几个重要的功能,使得 Java 程序能够执行一些与系统相关的操作。

方法描述
Runtime.getRuntime()获取 Runtime 类实例对象。
exec(String command, String[] envp, File dir)用指定的环境和工作目录在指定的进程中执行指定的字符串命令,
也可以说就是执行一个另外的程序。
freeMemory()返回 Java 虚拟机中的空闲内存量,以字节为单位。
totalMemory()返回 Java 虚拟机中的内存总量。
maxMemory()返回 Java 虚拟机试图使用的最大内存量。
availableProcessors()返回 Java 虚拟机可用的处理器数量。
gc()运行垃圾回收器。建议 Java 虚拟机去回收未使用的对象,
以便快速重用其占用的内存。
addShutdownHook(Thread hook)在 JVM 关闭时执行添加的钩子(hook),
执行完这些钩子后,JVM 才会关闭。可用于关闭时的清理操作。

使用示例:

public class Main {
  public static void main(String[] args) {
        try {
            // 获取 Runtime 类的实例
            Runtime runtime = Runtime.getRuntime();

            // 执行外部程序
            Process process = runtime.exec("cat /etc/passwd");

            // 打印 Java 虚拟机的内存信息
            long freeMemory = runtime.freeMemory();
            long totalMemory = runtime.totalMemory();
            long maxMemory = runtime.maxMemory();
            System.out.println("Free Memory: " + freeMemory + " bytes");
            System.out.println("Total Memory: " + totalMemory + " bytes");
            System.out.println("Max Memory: " + maxMemory + " bytes");

            // 获取可用处理器的数量
            int availableProcessors = runtime.availableProcessors();
            System.out.println("Available Processors: " + availableProcessors);

            // 运行垃圾回收器
            runtime.gc();
            System.out.println("Garbage Collector has been invoked");

            // 添加关闭钩子
            runtime.addShutdownHook(new Thread() {
                public void run() {
                    System.out.println("Shutdown hook is running");
                }
            });

        } catch (Exception e) {
            e.printStackTrace();
        }
  }
}

推荐文档