Module  java.base
软件包  java.lang

Class Runtime



  • public class Runtime
    extends Object
    每个Java应用程序都有一个Runtime类的Runtime ,允许应用程序与运行应用程序的环境进行接口。 当前运行时可以从getRuntime获取。

    应用程序无法创建自己的此类的实例。

    从以下版本开始:
    1.0
    另请参见:
    getRuntime()
    • Nested Class Summary

      Nested Classes  
      Modifier and Type Class 描述
      static class  Runtime.Version
      用于实现Java SE平台的版本字符串的表示。
    • 方法摘要

      所有方法  静态方法  接口方法  具体的方法  弃用的方法 
      Modifier and Type 方法 描述
      void addShutdownHook​(Thread hook)
      注册一个新的虚拟机关机挂钩。
      int availableProcessors​()
      返回可用于Java虚拟机的处理器数量。
      Process exec​(String command)
      在单独的进程中执行指定的字符串命令。
      Process exec​(String[] cmdarray)
      在单独的进程中执行指定的命令和参数。
      Process exec​(String[] cmdarray, String[] envp)
      在指定环境的单独进程中执行指定的命令和参数。
      Process exec​(String[] cmdarray, String[] envp, File dir)
      在指定的环境和工作目录的单独进程中执行指定的命令和参数。
      Process exec​(String command, String[] envp)
      在具有指定环境的单独进程中执行指定的字符串命令。
      Process exec​(String command, String[] envp, File dir)
      在指定的环境和工作目录的单独进程中执行指定的字符串命令。
      void exit​(int status)
      通过启动其关闭序列来终止当前正在运行的Java虚拟机。
      long freeMemory​()
      返回Java虚拟机中的可用内存量。
      void gc​()
      运行垃圾回收器。
      InputStream getLocalizedInputStream​(InputStream in)
      不推荐用于删除:此API元素将在以后的版本中被删除。
      从JDK 1.1开始,将本地编码中的字节流转换为Unicode中的字符流的首选方法是通过InputStreamReaderBufferedReader类。 此方法在将来的Java SE版本中可能会被删除。
      OutputStream getLocalizedOutputStream​(OutputStream out)
      不推荐用于删除:此API元素将在以后的版本中被删除。
      从JDK 1.1,将Unicode字符流转换为本地编码字节流的首选方法是通过OutputStreamWriterBufferedWriter ,和PrintWriter类。 此方法在将来的Java SE版本中可能会被删除。
      static Runtime getRuntime​()
      返回与当前Java应用程序关联的运行时对象。
      void halt​(int status)
      强制终止当前正在运行的Java虚拟机。
      void load​(String filename)
      加载由filename参数指定的本机库。
      void loadLibrary​(String libname)
      加载由 libname参数指定的本机库。
      long maxMemory​()
      返回Java虚拟机将尝试使用的最大内存量。
      boolean removeShutdownHook​(Thread hook)
      取消注册以前注册的虚拟机关闭挂接。
      void runFinalization​()
      运行任何对象等待定稿的最终化方法。
      static void runFinalizersOnExit​(boolean value)
      不推荐用于删除:此API元素将在以后的版本中被删除。
      这种方法本质上是不安全的。 它可能导致在活动对象上调用finalizer,而其他线程同时操作这些对象,导致不稳定的行为或死锁。 此方法在将来的Java SE版本中可能会被删除。
      long totalMemory​()
      返回Java虚拟机中的内存总量。
      void traceInstructions​(boolean on)
      不推荐用于删除:此API元素将在以后的版本中被删除。
      该方法旨在控制指令跟踪。 它已经被JVM特定的跟踪机制所取代。 此方法在将来的Java SE版本中可能会被删除。
      void traceMethodCalls​(boolean on)
      不推荐用于删除:此API元素将在以后的版本中被删除。
      此方法旨在控制方法调用跟踪。 它已经被JVM特定的跟踪机制所取代。 此方法在将来的Java SE版本中可能会被删除。
      static Runtime.Version version​()
      Runtime.Version返回Java运行时环境的版本
    • 方法详细信息

      • getRuntime

        public static Runtime getRuntime​()
        返回与当前Java应用程序关联的运行时对象。 Runtime类的大多数方法都是实例方法,必须针对当前的运行时对象进行调用。
        结果
        与当前Java应用程序相关联的 Runtime对象。
      • exit

        public void exit​(int status)
        通过启动其关闭序列来终止当前正在运行的Java虚拟机。 此方法从不正常返回。 该参数作为状态代码; 按照惯例,非零状态码表示异常终止。

        虚拟机的关机顺序由两个阶段组成。 在第一阶段,所有注册的shutdown hooks (如果有的话)以某种未指定的顺序启动,并允许同时运行,直到完成。 在第二阶段,如果已启用了finalization-on-exit则所有未归端的终结器都将运行。 一旦完成,虚拟机halts

        如果在虚拟机已经开始关闭序列之后调用此方法,那么如果关闭挂钩正在运行,则此方法将无限期地阻止。 如果关闭挂钩已经运行,并且已启用了退出完成,那么如果状态为非零,则此方法将使用给定状态代码暂停虚拟机; 否则,它将无限期地阻止。

        System.exit方法是调用此方法的常规方便方法。

        参数
        status - 终止状态。 按照惯例,非零状态码表示异常终止。
        异常
        SecurityException - 如果存在安全管理员,并且其 checkExit方法不允许以指定状态退出
        另请参见:
        SecurityExceptionSecurityManager.checkExit(int)addShutdownHook(java.lang.Thread)removeShutdownHook(java.lang.Thread)runFinalizersOnExit(boolean)halt(int)
      • addShutdownHook

        public void addShutdownHook​(Thread hook)
        注册一个新的虚拟机关机挂钩。

        Java虚拟机关闭两种事件:

        • 在程序正常退出 ,当最后一个非守护线程退出时,或者当exit (等同于System.exit )方法被调用,或
        • 响应于用户中断(例如键入^C )或系统范围的事件(例如用户注销或系统关闭) 终止虚拟机。

        一个关机钩子只是一个初始化但未启动的线程。 当虚拟机开始关闭序列时,它将以一些未指定的顺序启动所有注册的关闭挂钩,并让它们同时运行。 当所有的钩子都完成后,如果已经启用了最终确定的退出,它将运行所有未被终止的终结器。 最后,虚拟机将停止。 请注意,守护程序线程将在关闭序列期间继续运行,非守护线程如果通过调用exit方法启动关闭,则该守护程序线程也将继续。

        一旦关闭序列开始,只能通过调用强制终止虚拟机的halt方法来停止它。

        一旦关闭序列已经开始,就不可能注册新的关机挂钩或者取消注册先前注册的钩子。 尝试这些操作之一将导致抛出IllegalStateException

        关机钩子在虚拟机的生命周期中的微妙时间运行,因此应该进行防御性编码。 特别是应该写成线程安全的,并尽可能避免死锁。 他们也不应盲目依赖可能已经注册自己的关闭挂钩的服务,因此本身可能会关闭。 例如,尝试使用其他基于线程的服务(例如AWT事件发送线程)可能会导致死锁。

        关闭挂钩也应该快速完成工作。 当程序调用exit ,期望虚拟机将及时关闭并退出。 当虚拟机由于用户注销或系统关闭而终止时,底层操作系统可能只允许一段固定的时间关闭和退出。 因此,不要在关机挂钩中尝试任何用户交互或执行长时间运行的计算。

        通过调用线程的ThreadGroup对象的uncaughtException方法,关闭钩子中的未捕获异常与其他任何线程一样处理。 此方法的默认实现将异常的堆栈跟踪打印到System.err并终止线程; 它不会导致虚拟机退出或停止。

        在极少数情况下,虚拟机可能会中止 ,也就是停止运行而不会完全关闭。 当虚拟机从外部终止时,例如使用Unix上的SIGKILL信号或Microsoft Windows上的TerminateProcess调用,就会发生这种情况。 如果本机方法例如破坏内部数据结构或尝试访问不存在的内存,虚拟机也可能中止。 如果虚拟机中止,则不能保证是否关闭挂钩将被运行。

        参数
        hook - 已初始化但未启动的Thread对象
        异常
        IllegalArgumentException - 如果指定的钩子已经被注册,或者如果可以确定挂钩已经在运行或已经运行
        IllegalStateException - 如果虚拟机已经处于关闭状态
        SecurityException - 如果安全管理器存在,并且它拒绝RuntimePermission (“shutdownHooks”)
        从以下版本开始:
        1.3
        另请参见:
        removeShutdownHook(java.lang.Thread)halt(int)exit(int)
      • removeShutdownHook

        public boolean removeShutdownHook​(Thread hook)
        取消注册以前注册的虚拟机关闭挂接。
        参数
        hook - 要删除的钩子
        结果
        true如果指定的钩子先前已经注册并被成功注销,否则为 false
        异常
        IllegalStateException - 如果虚拟机已经处于关闭状态
        SecurityException - 如果安全管理员存在,并且它拒绝RuntimePermission (“shutdownHooks”)
        从以下版本开始:
        1.3
        另请参见:
        addShutdownHook(java.lang.Thread)exit(int)
      • halt

        public void halt​(int status)
        强制终止当前正在运行的Java虚拟机。 此方法从不正常返回。

        这种方法应该非常小心。 exit方法不同,此方法不会导致关闭挂钩启动,如果已启用完成终止,则不会运行未命名的终结器。 如果关闭序列已经被启动,则该方法不等待任何运行的关闭挂钩或终结器完成其工作。

        参数
        status - 终止状态。 按照惯例,非零状态码表示异常终止。 如果已经调用了exit (等效的, System.exit )方法,则该状态代码将覆盖传递给该方法的状态代码。
        异常
        SecurityException - 如果存在安全管理员,并且其 checkExit方法不允许具有指定状态的退出
        从以下版本开始:
        1.3
        另请参见:
        exit(int)addShutdownHook(java.lang.Thread)removeShutdownHook(java.lang.Thread)
      • runFinalizersOnExit

        @Deprecated(since="1.2",
                    forRemoval=true)
        public static void runFinalizersOnExit​(boolean value)
        不推荐用于删除:此API元素将在以后的版本中被删除。 这种方法本质上是不安全的。 它可能导致在活动对象上调用finalizer,而其他线程同时操作这些对象,导致不稳定的行为或死锁。 此方法在将来的Java SE版本中可能会被删除。
        退出时启用或禁用最终化; 这样做指定了具有尚未自动调用的finalizer的所有对象的finalizer将在Java运行时退出之前运行。 默认情况下,退出时终止。

        如果有一个安全管理器,它的checkExit方法首先被调用为0作为参数,以确保退出是允许的。 这可能会导致SecurityException。

        参数
        value - true可在退出时启用完成,false禁用
        异常
        SecurityException - 如果存在安全管理员,并且其 checkExit方法不允许退出。
        从以下版本开始:
        1.1
        另请参见:
        exit(int)gc()SecurityManager.checkExit(int)
      • exec

        public Process exec​(String command,
                            String[] envp,
                            File dir)
                     throws IOException
        在指定的环境和工作目录的单独进程中执行指定的字符串命令。

        这是一种方便的方法。 调用表单exec(command, envp, dir)行为方式与调用exec (cmdarray, envp, dir) ,其中cmdarraycmdarray中所有令牌的command

        更准确地说, command字符串使用由调用new {@link StringTokenizer}(command)创建的StringTokenizer分解成令牌,而不再进一步修改字符类别。 然后,令牌化器生成的令牌以相同的顺序放置在新的字符串数组cmdarray中。

        参数
        command - 指定的系统命令。
        envp - 字符串数组,其每个元素具有格式为 name = value的环境变量设置,如果子进程应该继承当前进程的环境, null
        dir - 子 dir的工作目录,如果子进程应继承当前进程的工作目录, null
        结果
        用于管理子进程的新的Process对象
        异常
        SecurityException - 如果存在安全管理员,并且其 checkExec方法不允许创建子 进程
        IOException - 如果发生I / O错误
        NullPointerException -如果 commandnull ,或所述元件中的一个 envpnull
        IllegalArgumentException - 如果 command为空
        从以下版本开始:
        1.3
        另请参见:
        ProcessBuilder
      • exec

        public Process exec​(String[] cmdarray,
                            String[] envp)
                     throws IOException
        在指定环境的单独进程中执行指定的命令和参数。

        这是一种方便的方法。 表单exec(cmdarray, envp)的调用的行为方式与调用exec (cmdarray, envp, null)

        参数
        cmdarray - 包含调用命令及其参数的数组。
        envp - 字符串数组,其每个元素的格式为 name = value都具有环境变量设置,如果子进程应该继承当前进程的环境, null
        结果
        用于管理子进程的新的Process对象
        异常
        SecurityException - 如果存在安全管理员,并且其 checkExec方法不允许创建子 进程
        IOException - 如果发生I / O错误
        NullPointerException -如果 cmdarraynull ,或所述元件中的一个 cmdarraynull ,或所述元件中的一个 envpnull
        IndexOutOfBoundsException - 如果 cmdarray是一个空数组(长度为 0
        另请参见:
        ProcessBuilder
      • exec

        public Process exec​(String[] cmdarray,
                            String[] envp,
                            File dir)
                     throws IOException
        在指定的环境和工作目录的单独进程中执行指定的命令和参数。

        给定的字符串数组cmdarray ,表示命令行的令牌,和一个字符串数组envp ,代表“环境”变量设置,此方法创建在其中执行指定的命令的新方法。

        此方法检查cmdarray是一个有效的操作系统命令。 哪些命令有效是依赖于系统的,但至少该命令必须是非空字符串的非空列表。

        如果envpnull ,则子进程继承当前进程的环境设置。

        在某些操作系统上启动一个进程可能需要一小部分与系统相关的环境变量。 因此,子进程可以继承除指定环境中的更多环境变量设置。

        ProcessBuilder.start()现在是启动具有修改环境的进程的首选方式。

        新的子dir的工作目录由dir指定。 如果dirnull ,则子进程继承当前进程的当前工作目录。

        如果存在安全管理器,则使用阵列cmdarray的第一个组件作为参数来调用其checkExec方法。 这可能会导致抛出SecurityException

        启动操作系统进程与系统相关。 许多可能出错的事情是:

        • 找不到操作系统程序文件。
        • 对程序文件的访问被拒绝。
        • 工作目录不存在。

        在这种情况下,会抛出异常。 异常的确切性质是系统依赖的,但它将始终是IOException的子类。

        如果操作系统不支持创建进程,则会抛出一个UnsupportedOperationException

        参数
        cmdarray - 包含调用命令及其参数的数组。
        envp - 字符串数组,每个元素的格式具有格式为 name = value的环境变量设置,如果子进程应该继承当前进程的环境, null
        dir - 子 dir的工作目录,如果子进程继承当前进程的工作目录, null
        结果
        用于管理子进程的新的Process对象
        异常
        SecurityException - 如果存在安全管理员,并且其 checkExec方法不允许创建子 进程
        UnsupportedOperationException - 如果操作系统不支持创建进程。
        IOException - 如果发生I / O错误
        NullPointerException -如果 cmdarraynull ,或所述元件中的一个 cmdarraynull ,或所述元件中的一个 envpnull
        IndexOutOfBoundsException - 如果 cmdarray是一个空数组(长度为 0
        从以下版本开始:
        1.3
        另请参见:
        ProcessBuilder
      • availableProcessors

        public int availableProcessors​()
        返回可用于Java虚拟机的处理器数量。

        在虚拟机的特定调用期间,此值可能会更改。 因此,对可用处理器数量敏感的应用程序应偶尔轮询此属性并适当调整其资源使用情况。

        结果
        虚拟机可用的最大处理器数量; 从不小于一个
        从以下版本开始:
        1.4
      • freeMemory

        public long freeMemory​()
        返回Java虚拟机中的可用内存量。 调用gc方法可能会导致返回值返回freeMemory.
        结果
        近似于当前可用于未来分配对象的总内存量,以字节为单位。
      • totalMemory

        public long totalMemory​()
        返回Java虚拟机中的内存总量。 此方法返回的值可能随时间而变化,具体取决于主机环境。

        请注意,保存任何给定类型的对象所需的内存量可能取决于实现。

        结果
        目前可用于当前和未来对象的内存总量,以字节为单位。
      • maxMemory

        public long maxMemory​()
        返回Java虚拟机将尝试使用的最大内存量。 如果没有固有的限制,则返回值Long.MAX_VALUE
        结果
        虚拟机将尝试使用的最大内存量,以字节为单位
        从以下版本开始:
        1.4
      • gc

        public void gc​()
        运行垃圾回收器。 调用此方法表明,Java虚拟机花费了回收未使用对象的努力,以使其当前占用的内存可用于快速重用。 当控制从方法调用返回时,虚拟机已尽全力回收所有丢弃的对象。

        名称gc代表“垃圾收集器”。 虚拟机在一个单独的线程中根据需要自动执行此回收过程,即使未明确地调用gc方法。

        方法System.gc()是调用该方法的常规和方便的手段。

      • runFinalization

        public void runFinalization​()
        运行任何对象等待定稿的最终化方法。 调用该方法表明,对运行在Java虚拟机的努力finalize已发现物体的方法被废弃,但其finalize方法还没有被运行。 当控制从方法调用返回时,虚拟机已尽力完成所有未完成的定稿。

        如果未明确地调用runFinalization方法,虚拟机将根据需要在单独的线程中自动执行完成过程。

        方法System.runFinalization()是调用该方法的常规和方便的手段。

        另请参见:
        Object.finalize()
      • traceInstructions

        @Deprecated(since="9",
                    forRemoval=true)
        public void traceInstructions​(boolean on)
        不推荐用于删除:此API元素将在以后的版本中被删除。 该方法旨在控制指令跟踪。 它已经被JVM特定的跟踪机制所取代。 此方法在将来的Java SE版本中可能会被删除。
        没有执行,什么也没做。
        参数
        on - 忽略
      • traceMethodCalls

        @Deprecated(since="9",
                    forRemoval=true)
        public void traceMethodCalls​(boolean on)
        不推荐用于删除:此API元素将在以后的版本中被删除。 此方法旨在控制方法调用跟踪。 它已经被JVM特定的跟踪机制所取代。 此方法在将来的Java SE版本中可能会被删除。
        没有执行,什么也没做。
        参数
        on - 忽略
      • load

        public void load​(String filename)
        加载由filename参数指定的本机库。 filename参数必须是绝对路径名。 (例如Runtime.getRuntime().load("/home/avh/lib/libX11.so"); )。 如果文件名参数在剥离任何特定于平台的库前缀,路径和文件扩展名时,表示名称为例如L的库,并且名为L的本地库与VM静态链接,则JNI_OnLoad_L函数调用库导出而不是尝试加载动态库。 与参数匹配的文件名不必存在于文件系统中。 有关详细信息,请参阅JNI规范。 否则,文件名参数以实现相关的方式映射到本机库映像。

        首先,如果有一个安全管理员,它的checkLink方法是以filename作为参数来调用的。 这可能会导致安全例外。

        这类似于方法loadLibrary(String) ,但它接受通用文件名作为参数,而不仅仅是库名称,允许加载任何本地代码的文件。

        方法System.load(String)是调用该方法的常规和方便的手段。

        参数
        filename - 要加载的文件。
        异常
        SecurityException - 如果存在安全管理员,并且其 checkLink方法不允许加载指定的动态库
        UnsatisfiedLinkError - 如果文件名不是绝对路径名,则本地库不会与VM静态链接,或者该库不能由主机系统映射到本机库映像。
        NullPointerException - 如果 filenamenull
        另请参见:
        getRuntime()SecurityExceptionSecurityManager.checkLink(java.lang.String)
      • loadLibrary

        public void loadLibrary​(String libname)
        加载由libname参数指定的本机库。 libname参数不能包含任何平台特定的前缀,文件扩展名或路径。 如果名为libname的本地库与VM静态链接,则调用库导出的JNI_OnLoad_ libname函数。 有关详细信息,请参阅JNI规范。 否则,libname参数从系统库位置加载,并以实现相关的方式映射到本机库映像。

        首先,如果有一个安全管理员,它的checkLink方法是以libname作为参数来调用的。 这可能会导致安全例外。

        方法System.loadLibrary(String)是调用该方法的常规和方便的手段。 如果本机方法用于实现类,则标准策略是将本机代码放入库文件(称为LibFile ),然后放入静态初始化程序:

         static { System.loadLibrary("LibFile"); }
         
        在班级声明内。 当类被加载和初始化时,本地方法的必要本机代码实现也将被加载。

        如果使用相同的库名称多次调用此方法,则忽略第二个和后续的调用。

        参数
        libname - 图书馆的名称。
        异常
        SecurityException - 如果存在安全管理员,并且其 checkLink方法不允许加载指定的动态库
        UnsatisfiedLinkError - 如果libname参数包含文件路径,本机库不会与VM静态链接,或者该库不能由主机系统映射到本机库映像。
        NullPointerException - 如果 libnamenull
        另请参见:
        SecurityExceptionSecurityManager.checkLink(java.lang.String)
      • getLocalizedInputStream

        @Deprecated(since="1.1",
                    forRemoval=true)
        public InputStream getLocalizedInputStream​(InputStream in)
        不推荐用于删除:此API元素将在以后的版本中被删除。 从JDK 1.1开始,通过InputStreamReaderBufferedReader类将本地编码中的字节流转换为Unicode字符流的首选方法。 此方法在将来的Java SE版本中可能会被删除。
        创建输入流的本地化版本。 该方法需要一个InputStream并返回一个InputStream等效于所有方面的参数,除了它是本地化的:由于从流中读取本地字符集中的字符,它们将自动从本地字符集转换为Unicode。

        如果参数已经是本地化的流,则可能会返回结果。

        参数
        in - InputStream本地化
        结果
        一个本地化的输入流
        另请参见:
        InputStreamBufferedReader(java.io.Reader)InputStreamReader(java.io.InputStream)
      • getLocalizedOutputStream

        @Deprecated(since="1.1",
                    forRemoval=true)
        public OutputStream getLocalizedOutputStream​(OutputStream out)
        不推荐用于删除:此API元素将在以后的版本中被删除。 从JDK 1.1,将Unicode字符流转换为本地编码字节流的首选方法是通过OutputStreamWriterBufferedWriter ,和PrintWriter类。 此方法在将来的Java SE版本中可能会被删除。
        创建输出流的本地化版本。 该方法需要一个OutputStream并返回一个OutputStream等效于所有方面的参数,除了它被本地化:因为Unicode字符被写入流,它们被自动转换为本地字符集。

        如果参数已经是本地化的流,则可能会返回结果。

        参数
        out - 将本地化的OutputStream
        结果
        一个本地化的输出流
        另请参见:
        OutputStreamBufferedWriter(java.io.Writer)OutputStreamWriter(java.io.OutputStream)PrintWriter(java.io.OutputStream)