System
类包含几个有用的类字段和方法。它不能被实例化。 System
类提供的功能包括标准输入、标准输出和错误输出流;访问外部定义的属性和环境变量;一种加载文件和库的方法;以及一种用于快速复制数组的一部分的实用方法。
- 自从:
- 1.0
-
内部类总结
内部类修饰符和类型类描述static interface
System.Logger
实例记录消息,这些消息将被路由到LoggerFinder
使用的底层日志记录框架。static class
LoggerFinder
服务负责创建、管理和配置记录器到它使用的底层框架。 -
字段摘要
字段修饰符和类型Field描述static final PrintStream
“标准”错误输出流。static final InputStream
“标准”输入流。static final PrintStream
“标准”输出流。 -
方法总结
修饰符和类型方法描述static void
将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。static String
clearProperty
(String key) 删除指定键指示的系统属性。static Console
console()
返回与当前 Java 虚拟机关联的唯一Console
对象(如果有)。static long
以毫秒为单位返回当前时间。static void
exit
(int status) 启动 Java 虚拟机的关机顺序。static void
gc()
在 Java 虚拟机中运行垃圾收集器。getenv()
返回当前系统环境的不可修改的字符串映射视图。static String
获取指定环境变量的值。static System.Logger
返回Logger
的实例供调用者使用。static System.Logger
getLogger
(String name, ResourceBundle bundle) 返回Logger
的可本地化实例以供调用者使用。static Properties
确定当前系统属性。static String
getProperty
(String key) 获取指定键指示的系统属性。static String
getProperty
(String key, String def) 获取指定键指示的系统属性。static SecurityManager
已弃用,将被删除:此 API 元素可能会在未来版本中删除。此方法仅与 安全管理器 结合使用,已弃用并在未来版本中删除。static int
为给定对象返回与默认方法 hashCode() 返回的相同的哈希码,无论给定对象的类是否重写 hashCode()。static Channel
返回从创建此 Java 虚拟机的实体继承的通道。static String
返回系统相关的行分隔符字符串。static void
加载由文件名参数指定的本机库。static void
loadLibrary
(String libname) 加载由libname
参数指定的本机库。static String
mapLibraryName
(String libname) 将库名称映射到表示本机库的特定于平台的字符串。static long
nanoTime()
返回正在运行的 Java 虚拟机的高分辨率时间源的当前值,以纳秒为单位。static void
已弃用,将被删除:此 API 元素可能会在未来版本中删除。Finalization 已被弃用以移除。static void
setErr
(PrintStream err) 重新分配“标准”错误输出流。static void
setIn
(InputStream in) 重新分配“标准”输入流。static void
setOut
(PrintStream out) 重新分配“标准”输出流。static void
setProperties
(Properties props) 将系统属性设置为Properties
参数。static String
setProperty
(String key, String value) 设置指定键指示的系统属性。static void
已弃用,将被删除:此 API 元素可能会在未来版本中删除。此方法仅与 安全管理器 结合使用,已弃用并在未来版本中删除。
-
字段详细信息
-
in
“标准”输入流。该流已经打开并准备好提供输入数据。通常,此流对应于键盘输入或主机环境或用户指定的其他输入源。如果此流包含在InputStreamReader
中,则应将Console.charset()
用于字符集,或考虑使用Console.reader()
。- 参见:
-
out
“标准”输出流。此流已打开并准备好接受输出数据。通常,此流对应于显示输出或主机环境或用户指定的另一个输出目标。如果Console
存在,则从字符到字节的转换中使用的编码等效于Console.charset()
,否则为 stdout.encoding。对于简单的独立 Java 应用程序,写入一行输出数据的典型方式是:
System.out.println(data)
请参阅类
PrintStream
中的println
方法。- 参见:
-
err
“标准”错误输出流。此流已打开并准备好接受输出数据。通常,此流对应于显示输出或主机环境或用户指定的另一个输出目标。按照惯例,此输出流用于显示错误消息或应立即引起用户注意的其他信息,即使主要输出流(变量
out
的值)已被重定向到文件或其他目的地通常不会持续监控。如果Console
存在,则从字符到字节的转换中使用的编码等效于Console.charset()
,否则为 stderr.encoding。- 参见:
-
-
方法详情
-
setIn
重新分配“标准”输入流。首先,如果有安全管理器,它的checkPermission
方法会以RuntimePermission("setIO")
权限调用,以查看是否可以重新分配“标准”输入流。- 参数:
in
- 新的标准输入流。- 抛出:
SecurityException
- 如果安全管理器存在且其checkPermission
方法不允许重新分配标准输入流。- 自从:
- 1.1
- 参见:
-
setOut
重新分配“标准”输出流。首先,如果有安全管理器,它的checkPermission
方法会以RuntimePermission("setIO")
权限调用,以查看是否可以重新分配“标准”输出流。- 参数:
out
- 新的标准输出流- 抛出:
SecurityException
- 如果安全管理器存在且其checkPermission
方法不允许重新分配标准输出流。- 自从:
- 1.1
- 参见:
-
setErr
重新分配“标准”错误输出流。首先,如果有安全管理器,它的checkPermission
方法将以RuntimePermission("setIO")
权限调用,以查看是否可以重新分配“标准”错误输出流。- 参数:
err
- 新的标准错误输出流。- 抛出:
SecurityException
- 如果安全管理器存在且其checkPermission
方法不允许重新分配标准错误输出流。- 自从:
- 1.1
- 参见:
-
console
返回与当前 Java 虚拟机关联的唯一Console
对象(如果有)。- 返回:
-
系统控制台(如果有),否则为
null
。 - 自从:
- 1.6
-
inheritedChannel
返回从创建此 Java 虚拟机的实体继承的通道。此方法返回通过调用系统范围默认SelectorProvider
对象的inheritedChannel
方法获得的通道。除了
inheritedChannel
中描述的面向网络的通道外,此方法将来可能会返回其他类型的通道。- 返回:
-
继承的通道(如果有),否则为
null
。 - 抛出:
IOException
- 如果发生 I/O 错误SecurityException
- 如果存在安全管理器并且它不允许访问通道。- 自从:
- 1.5
-
setSecurityManager
@Deprecated (since ="17", forRemoval =true) public static void setSecurityManager(SecurityManager sm) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。此方法仅与 安全管理器 结合使用,已弃用并在未来版本中删除。因此,此方法也已弃用并可能被删除。安全管理器或此方法没有替代品。设置系统范围的安全管理器。如果已经安装了安全管理器,则此方法首先调用具有RuntimePermission("setSecurityManager")
权限的安全管理器的checkPermission
方法,以确保可以替换现有的安全管理器。这可能会导致抛出SecurityException
。否则,参数被建立为当前的安全管理器。如果参数是
null
并且没有建立安全管理器,则不采取任何操作并且该方法简单地返回。- 实现注意事项:
-
在 JDK 实现中,如果 Java 虚拟机在系统属性
java.security.manager
未设置或设置为特殊标记“disallow
”的情况下启动,则setSecurityManager
方法不能用于设置安全管理器。有关详细信息,请参阅以下SecurityManager
类规范的部分。 - 参数:
sm
- 安全经理或null
- 抛出:
SecurityException
- 如果安全管理器已经设置并且它的checkPermission
方法不允许它被替换UnsupportedOperationException
- 如果sm
为非空且不允许动态设置安全管理器- 参见:
-
getSecurityManager
已弃用,将被删除:此 API 元素可能会在未来版本中删除。此方法仅与 安全管理器 结合使用,已弃用并在未来版本中删除。因此,此方法也已弃用并可能被删除。安全管理器或此方法没有替代品。获取系统范围的安全管理器。- 返回:
-
如果已经为当前应用程序建立了安全管理器,则返回该安全管理器;否则,返回
null
。 - 参见:
-
currentTimeMillis
public static long currentTimeMillis()以毫秒为单位返回当前时间。请注意,虽然返回值的时间单位是毫秒,但值的粒度取决于底层操作系统并且可能更大。例如,许多操作系统以几十毫秒为单位测量时间。有关“计算机时间”和协调世界时 (UTC) 之间可能出现的细微差异的讨论,请参阅类
Date
的描述。- 返回:
- 当前时间与 UTC 时间 1970 年 1 月 1 日午夜之间的差异,以毫秒为单位。
- 参见:
-
nanoTime
public static long nanoTime()返回正在运行的 Java 虚拟机的高分辨率时间源的当前值,以纳秒为单位。此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示纳秒,因为一些固定但任意的起源时间(可能在未来,因此值可能为负)。在 Java 虚拟机的实例中,此方法的所有调用都使用相同的来源;其他虚拟机实例可能使用不同的来源。此方法提供纳秒级精度,但不一定提供纳秒级分辨率(即值更改的频率)- 除了分辨率至少与
currentTimeMillis()
的分辨率一样好外,不提供任何保证。跨度超过大约 292 年的连续呼叫的差异(263纳秒)由于数值溢出将无法正确计算经过的时间。
仅当计算在同一 Java 虚拟机实例中获得的两个此类值之间的差异时,此方法返回的值才有意义。
例如,要测量执行某些代码需要多长时间:
long startTime = System.nanoTime(); // ... the code being measured ... long elapsedNanos = System.nanoTime() - startTime;
要将经过的时间与超时进行比较,请使用
if (System.nanoTime() - startTime >= timeoutNanos) ...
if (System.nanoTime() >= startTime + timeoutNanos) ...
- 返回:
- 正在运行的 Java 虚拟机的高分辨率时间源的当前值,以纳秒为单位
- 自从:
- 1.5
-
arraycopy
将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。数组组件的子序列从src
引用的源数组复制到dest
引用的目标数组。复制的组件数等于length
参数。源数组中位置srcPos
到srcPos+length-1
的组件分别复制到目标数组的位置destPos
到destPos+length-1
中。如果
src
和dest
参数引用相同的数组对象,则执行复制就像位置srcPos
到srcPos+length-1
的组件首先被复制到具有length
组件的临时数组,然后临时数组的内容被复制到位置destPos
通过目标数组的destPos+length-1
。如果
dest
是null
,则抛出NullPointerException
。如果
src
是null
,则抛出NullPointerException
并且不修改目标数组。否则,如果以下任一情况为真,则抛出
ArrayStoreException
且目标不被修改:src
参数指的是一个不是数组的对象。dest
参数指的是一个不是数组的对象。src
参数和dest
参数指的是组件类型是不同原始类型的数组。src
参数指的是具有原始组件类型的数组,dest
参数指的是具有引用组件类型的数组。src
参数指的是具有引用组件类型的数组,dest
参数指的是具有原始组件类型的数组。
否则,如果以下任一情况为真,则会抛出
IndexOutOfBoundsException
且目标不会被修改:srcPos
参数是否定的。destPos
参数是否定的。length
参数是否定的。srcPos+length
大于src.length
,源数组的长度。destPos+length
大于目标数组的长度dest.length
。
否则,如果源数组从位置
srcPos
到srcPos+length-1
的任何实际组件无法通过赋值转换转换为目标数组的组件类型,则抛出ArrayStoreException
。在这种情况下,让k是小于长度的最小非负整数,使得src[srcPos+
k]
无法转换为目标数组的组件类型;抛出异常时,从位置srcPos
到srcPos+
的源数组组件k-1
已经被复制到目标数组位置destPos
到destPos+
k-1
并且目标数组的其他位置都不会被修改。 (由于已经列出的限制,本段实际上仅适用于两个数组都具有引用类型的组件类型的情况。)- 参数:
src
- 源数组。srcPos
- 源数组中的起始位置。dest
- 目标数组。destPos
- 目标数据中的起始位置。length
- 要复制的数组元素的数量。- 抛出:
IndexOutOfBoundsException
- 如果复制会导致访问数组边界之外的数据。ArrayStoreException
- 如果src
数组中的元素由于类型不匹配而无法存储到dest
数组中。NullPointerException
- 如果src
或dest
是null
。
-
identityHashCode
为给定对象返回与默认方法 hashCode() 返回的相同的哈希码,无论给定对象的类是否重写 hashCode()。空引用的哈希码为零。- 参数:
x
- 要为其计算 hashCode 的对象- 返回:
- 哈希码
- 自从:
- 1.1
- 参见:
-
getProperties
确定当前系统属性。首先,如果有一个安全管理器,它的checkPropertiesAccess
方法会在没有参数的情况下被调用。这可能会导致安全异常。getProperty(String)
方法使用的当前系统属性集作为Properties
对象返回。如果没有当前的系统属性集,则首先创建并初始化一组系统属性。这组系统属性包括以下每个键的值,除非关联值的描述表明该值是可选的。Key 关联值的描述 java.version
Java Runtime Environment 版本,可以解释为 Runtime.Version
java.version.date
Java Runtime Environment 版本日期,采用 ISO-8601 YYYY-MM-DD 格式,可以解释为 LocalDate
java.vendor
Java 运行时环境供应商 java.vendor.url
Java 供应商网址 java.vendor.version
Java 供应商版本 (optional) java.home
Java安装目录 java.vm.specification.version
Java虚拟机规范版本,其值为运行时版本的feature元素 java.vm.specification.vendor
Java 虚拟机规范供应商 java.vm.specification.name
Java 虚拟机规范名称 java.vm.version
可以解释为 Runtime.Version
的 Java 虚拟机实现版本java.vm.vendor
Java 虚拟机实现供应商 java.vm.name
Java 虚拟机实现名称 java.specification.version
Java Runtime Environment规范版本,其值为运行时版本的feature元素 java.specification.maintenance.version
Java Runtime Environment 规范维护版本,可解释为正整数 (optional, see below) java.specification.vendor
Java 运行时环境规范供应商 java.specification.name
Java 运行时环境规范名称 java.class.version
Java类格式版本号 java.class.path
Java类路径(详见 ClassLoader.getSystemClassLoader()
)java.library.path
加载库时要搜索的路径列表 java.io.tmpdir
默认临时文件路径 java.compiler
要使用的 JIT 编译器的名称 os.name
操作系统名称 os.arch
操作系统架构 os.version
操作系统版本 file.separator
文件分隔符(在 UNIX 上为“/”) path.separator
路径分隔符(在 UNIX 上为“:”) line.separator
行分隔符(在 UNIX 上为“\n”) user.name
用户的账户名 user.home
用户的主目录 user.dir
用户当前工作目录 native.encoding
源自主机环境和/或用户设置的字符编码名称。设置此系统属性无效。 stdout.encoding
System.out
的字符编码名称。 Java 运行时可以在系统属性设置为UTF-8
的情况下启动,在属性设置为另一个值的情况下启动它会导致未定义的行为。stderr.encoding
System.err
的字符编码名称。 Java 运行时可以在系统属性设置为UTF-8
的情况下启动,在属性设置为另一个值的情况下启动它会导致未定义的行为。如果此运行时在构建时实现的规范经历了 维护版本 ,则定义
java.specification.maintenance.version
属性。定义后,其值标识该维护版本。要指示第一个维护版本,此属性将具有值"1"
,以指示第二个维护版本,此属性将具有值"2"
,依此类推。系统属性值中的多个路径由平台的路径分隔符分隔。
请注意,即使安全管理器不允许
getProperties
操作,它也可以选择允许getProperty(String)
操作。- API 注意:
- Changing a standard system property may have unpredictable results unless otherwise specified. 属性值可能会在初始化或首次使用时被缓存。使用
getProperties()
、setProperties(Properties)
、setProperty(String, String)
或clearProperty(String)
初始化后设置标准属性可能不会产生预期的效果。 - 实现注意事项:
-
除了标准系统属性外,系统属性还可能包括以下键:
Key 关联值的描述 jdk.module.path
应用模块路径 jdk.module.upgrade.path
升级模块路径 jdk.module.main
初始/主模块的模块名称 jdk.module.main.class
初始模块的主类名 file.encoding
默认字符集的名称,默认为 UTF-8
。该属性可以在命令行上设置为值UTF-8
或COMPAT
。如果在命令行上将值设置为COMPAT
,则该值将在启动期间替换为native.encoding
属性的值。将属性设置为UTF-8
或COMPAT
以外的值会导致未指定的行为。 - 返回:
- 系统属性
- 抛出:
SecurityException
- 如果安全管理器存在且其checkPropertiesAccess
方法不允许访问系统属性。- 参见:
-
lineSeparator
返回系统相关的行分隔符字符串。它始终返回相同的值 - 系统属性line.separator
的初始值。在 UNIX 系统上,它返回
"\n"
;在 Microsoft Windows 系统上,它返回"\r\n"
。- 返回:
- 系统相关的行分隔符字符串
- 自从:
- 1.7
-
setProperties
将系统属性设置为Properties
参数。首先,如果有一个安全管理器,它的checkPropertiesAccess
方法会在没有参数的情况下被调用。这可能会导致安全异常。该参数成为
getProperty(String)
方法使用的当前系统属性集。如果参数是null
,那么当前的系统属性集将被遗忘。- API 注意:
- Changing a standard system property may have unpredictable results unless otherwise specified。有关详细信息,请参阅 getProperties。
- 参数:
props
- 新的系统属性。- 抛出:
SecurityException
- 如果安全管理器存在且其checkPropertiesAccess
方法不允许访问系统属性。- 参见:
-
getProperty
获取指定键指示的系统属性。首先,如果有安全管理器,它的checkPropertyAccess
方法会以密钥作为参数调用。这可能会导致 SecurityException。如果没有当前的系统属性集,则首先以与
getProperties
方法相同的方式创建和初始化一组系统属性。- API 注意:
- Changing a standard system property may have unpredictable results unless otherwise specified。有关详细信息,请参阅 getProperties。
- 参数:
key
- 系统属性的名称。- 返回:
-
系统属性的字符串值,如果没有具有该键的属性,则为
null
。 - 抛出:
SecurityException
- 如果安全管理器存在且其checkPropertyAccess
方法不允许访问指定的系统属性。NullPointerException
- 如果key
是null
。IllegalArgumentException
- 如果key
为空。- 参见:
-
getProperty
获取指定键指示的系统属性。首先,如果有安全管理器,它的checkPropertyAccess
方法会以key
作为参数调用。如果没有当前的系统属性集,则首先以与
getProperties
方法相同的方式创建和初始化一组系统属性。- 参数:
key
- 系统属性的名称。def
- 默认值。- 返回:
- 系统属性的字符串值,如果没有具有该键的属性,则为默认值。
- 抛出:
SecurityException
- 如果安全管理器存在且其checkPropertyAccess
方法不允许访问指定的系统属性。NullPointerException
- 如果key
是null
。IllegalArgumentException
- 如果key
为空。- 参见:
-
setProperty
设置指定键指示的系统属性。首先,如果存在安全管理器,则使用PropertyPermission(key, "write")
权限调用其SecurityManager.checkPermission
方法。这可能会导致抛出 SecurityException。如果没有抛出异常,则将指定的属性设置为给定值。- API 注意:
- Changing a standard system property may have unpredictable results unless otherwise specified。有关详细信息,请参阅 getProperties。
- 参数:
key
- 系统属性的名称。value
- 系统属性的值。- 返回:
-
系统属性的前一个值,如果没有,则为
null
。 - 抛出:
SecurityException
- 如果安全管理器存在并且其checkPermission
方法不允许设置指定的属性。NullPointerException
- 如果key
或value
是null
。IllegalArgumentException
- 如果key
为空。- 自从:
- 1.2
- 参见:
-
clearProperty
删除指定键指示的系统属性。首先,如果存在安全管理器,则使用PropertyPermission(key, "write")
权限调用其SecurityManager.checkPermission
方法。这可能会导致抛出 SecurityException。如果没有抛出异常,则删除指定的属性。- API 注意:
- Changing a standard system property may have unpredictable results unless otherwise specified。有关详细信息,请参阅 getProperties 方法。
- 参数:
key
- 要删除的系统属性的名称。- 返回:
-
系统属性的前一个字符串值,如果不存在具有该键的属性,则为
null
。 - 抛出:
SecurityException
- 如果安全管理器存在且其checkPropertyAccess
方法不允许访问指定的系统属性。NullPointerException
- 如果key
是null
。IllegalArgumentException
- 如果key
为空。- 自从:
- 1.5
- 参见:
-
getenv
获取指定环境变量的值。环境变量是依赖于系统的外部命名值。如果存在安全管理器,则使用
RuntimePermission("getenv."+name)
权限调用其checkPermission
方法。这可能会导致抛出SecurityException
。如果没有抛出异常,则返回变量name
的值。系统属性和环境变量 都是名称和值之间的概念映射。这两种机制都可用于将用户定义的信息传递给 Java 进程。环境变量具有更全局的影响,因为它们对定义它们的进程的所有后代都是可见的,而不仅仅是直接的 Java 子进程。它们在不同的操作系统上可能具有细微不同的语义,例如不区分大小写。由于这些原因,环境变量更有可能产生意想不到的副作用。最好尽可能使用系统属性。当需要全局效果或外部系统接口需要环境变量(例如
PATH
)时,应使用环境变量。在 UNIX 系统上,
name
的字母大小写通常很重要,而在 Microsoft Windows 系统上通常不是。例如,表达式System.getenv("FOO").equals(System.getenv("foo"))
在 Microsoft Windows 上很可能为真。- 参数:
name
- 环境变量的名称- 返回:
-
变量的字符串值,如果变量未在系统环境中定义,则返回
null
- 抛出:
NullPointerException
- 如果name
是null
SecurityException
- 如果安全管理器存在且其checkPermission
方法不允许访问环境变量name
- 参见:
-
getenv
返回当前系统环境的不可修改的字符串映射视图。环境是从名称到值的系统相关映射,从父进程传递到子进程。如果系统不支持环境变量,则返回一个空map。
返回的map永远不会包含空键或值。尝试查询是否存在空键或值将抛出
NullPointerException
。尝试查询不属于String
类型的键或值的存在将抛出ClassCastException
。返回的map及其集合视图可能不遵守
Object.equals(java.lang.Object)
和Object.hashCode()
方法的一般约定。返回的map在所有平台上通常区分大小写。
如果存在安全管理器,则使用
RuntimePermission("getenv.*")
权限调用其checkPermission
方法。这可能会导致抛出SecurityException
。将信息传递给 Java 子进程时,系统属性 通常优先于环境变量。
- 返回:
- 环境作为变量名称到值的映射
- 抛出:
SecurityException
- 如果安全管理器存在且其checkPermission
方法不允许访问进程环境- 自从:
- 1.5
- 参见:
-
getLogger
返回Logger
的实例供调用者使用。- API 注意:
-
此方法可能会延迟调用
LoggerFinder.getLogger
方法来创建由日志后端提供的实际记录器,例如,以允许在系统初始化期间获取记录器。 - 实现要求:
-
此方法返回的实例将消息路由到通过调用
LoggerFinder.getLogger(name, module)
获得的记录器,其中module
是调用者的模块。如果System.getLogger
是从堆栈上没有调用者框架的上下文调用的(例如,当直接从 JNI 附加线程调用时),则抛出IllegalCallerException
。要在这样的上下文中获取记录器,请使用将隐式标识为调用者的辅助类,或者使用系统LoggerFinder
来获取记录器。请注意,执行后者可能会急切地初始化底层日志系统。 - 参数:
name
- 记录器的名称。- 返回:
-
可由调用类使用的
System.Logger
实例。 - 抛出:
NullPointerException
- 如果name
是null
。IllegalCallerException
- 如果堆栈上没有 Java 调用者框架。- 自从:
- 9
-
getLogger
返回Logger
的可本地化实例以供调用者使用。返回的记录器将使用提供的资源包进行消息本地化。- API 注意:
-
此方法旨在在系统完全初始化后使用。此方法可能会触发
System.LoggerFinder
服务的立即加载和初始化,如果 Java 运行时尚未准备好初始化具体服务实现,这可能会导致问题。可能在引导序列早期加载并需要记录本地化消息的系统类应该使用getLogger(java.lang.String)
创建一个记录器,然后使用将资源包作为参数的日志方法。 - 实现要求:
-
返回的记录器将按照
LoggerFinder.getLocalizedLogger(name, bundle, module)
指定的方式执行消息本地化,其中module
是调用方的模块。如果System.getLogger
是从堆栈上没有调用者框架的上下文调用的(例如,当直接从 JNI 附加线程调用时),则抛出IllegalCallerException
。要在这样的上下文中获取记录器,请使用将隐式标识为调用者的辅助类,或者使用系统LoggerFinder
来获取记录器。请注意,执行后者可能会急切地初始化底层日志系统。 - 参数:
name
- 记录器的名称。bundle
- 资源包。- 返回:
System.Logger
的实例,它将使用提供的资源包进行消息本地化。- 抛出:
NullPointerException
- 如果name
是null
或bundle
是null
。IllegalCallerException
- 如果堆栈上没有 Java 调用者框架。- 自从:
- 9
-
exit
public static void exit(int status) 启动 Java 虚拟机的关机顺序。这种方法总是无限期地阻塞。该参数用作状态代码;按照惯例,非零状态代码表示异常终止。此方法调用类
Runtime
中的exit
方法。此方法永远不会正常返回。调用
System.exit(n)
实际上等同于调用:Runtime.getRuntime().exit(n)
- 参数:
status
- 退出状态。- 抛出:
SecurityException
- 如果安全管理器存在并且其checkExit
方法不允许以指定状态退出。- 参见:
-
gc
public static void gc()在 Java 虚拟机中运行垃圾收集器。调用
gc
方法表明 Java 虚拟机努力回收未使用的对象,以使它们当前占用的内存可供 Java 虚拟机重用。当控制从方法调用返回时,Java 虚拟机已尽最大努力从所有未使用的对象中回收空间。无法保证此工作将回收任何特定数量的未使用对象,回收任何特定数量的空间,或在任何特定时间完成,如果有的话,在方法返回之前或永远。也不能保证这种努力将决定任何特定数量的对象的可达性的变化,或者任何特定数量的Reference
对象将被清除和排队。调用
System.gc()
实际上等同于调用:Runtime.getRuntime().gc()
- 参见:
-
runFinalization
已弃用,将被删除:此 API 元素可能会在未来版本中删除。Finalization 已被弃用以移除。有关迁移选项的背景信息和详细信息,请参阅Object.finalize()
。在已禁用或删除终结的 JVM 中运行时,没有对象将等待终结,因此此方法不执行任何操作。
运行任何待完成的对象的完成方法。调用此方法表明 Java 虚拟机努力运行已被发现被丢弃但其finalize
方法尚未运行的对象的finalize
方法。当控制从方法调用返回时,Java 虚拟机已尽最大努力完成所有未完成的终结。调用
System.runFinalization()
实际上等同于调用:Runtime.getRuntime().runFinalization()
- 看Java 语言规范:
-
12.6 类实例的终结
- 参见:
-
load
加载由文件名参数指定的本机库。文件名参数必须是绝对路径名。如果文件名参数在去除任何特定于平台的库前缀、路径和文件扩展名时指示名称为 L 的库,并且名为 L 的本机库与 VM 静态链接,则 JNI_OnLoad_L 函数调用库导出的,而不是尝试加载动态库。文件系统中不必存在与参数匹配的文件名。有关详细信息,请参阅 JNI规范。否则,文件名参数将以依赖于实现的方式映射到本地库映像。调用
System.load(name)
实际上等同于调用:Runtime.getRuntime().load(name)
- 参数:
filename
- 要加载的文件。- 抛出:
SecurityException
- 如果安全管理器存在且其checkLink
方法不允许加载指定的动态库UnsatisfiedLinkError
- 如果文件名不是绝对路径名,则本机库未与 VM 静态链接,或者库无法通过主机系统映射到本机库映像。NullPointerException
- 如果filename
是null
- 参见:
-
loadLibrary
加载由libname
参数指定的本机库。libname
参数不得包含任何特定于平台的前缀、文件扩展名或路径。如果名为libname
的本机库与 VM 静态链接,则调用该库导出的 JNI_OnLoad_libname
函数。有关详细信息,请参阅 JNI规范。否则,libname 参数将从系统库位置加载,并以依赖于实现的方式映射到本机库映像。调用
System.loadLibrary(name)
实际上等同于调用Runtime.getRuntime().loadLibrary(name)
- 参数:
libname
- 库的名称。- 抛出:
SecurityException
- 如果安全管理器存在且其checkLink
方法不允许加载指定的动态库UnsatisfiedLinkError
- 如果 libname 参数包含文件路径,则本机库未与 VM 静态链接,或者该库无法通过主机系统映射到本机库映像。NullPointerException
- 如果libname
是null
- 参见:
-
mapLibraryName
将库名称映射到表示本机库的特定于平台的字符串。- 参数:
libname
- 库的名称。- 返回:
- 依赖于平台的本机库名称。
- 抛出:
NullPointerException
- 如果libname
是null
- 自从:
- 1.2
- 参见:
-