Класс Runtime
public class Runtime extends Object
Runtime, который позволяет приложению взаимодействовать со средой, в которой оно выполняется. Текущий экземпляр runtime можно получить с помощью метода getRuntime. Приложение не может создать собственный экземпляр этого класса.
- С момента:
- 1.0
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static final class |
Runtime.Version |
Представление строкового значения версии реализации платформы Java SE. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
availableProcessors() |
Регистрирует новый обработчик завершения работы виртуальной машины. |
int |
availableProcessors() |
Возвращает количество процессоров, доступных виртуальной машине Java. |
Process |
exec |
Выполняет указанную строковую команду в отдельном процессе. |
Process |
exec |
Выполняет указанную команду и аргументы в отдельном процессе. |
Process |
exec |
Выполняет указанную команду и аргументы в отдельном процессе с указанной средой. |
Process |
exec |
Выполняет указанную команду и аргументы в отдельном процессе с указанной средой и рабочей директорией. |
Process |
exec |
Выполняет указанную строковую команду в отдельном процессе с указанной средой. |
Process |
exec |
Выполняет указанную строковую команду в отдельном процессе с указанной средой и рабочей директорией. |
void |
exit |
Завершает текущую виртуальную машину Java, инициируя последовательность завершения её работы. |
long |
freeMemory() |
Возвращает количество свободной памяти в виртуальной машине Java. |
void |
gc() |
Выполняет сборщик мусора в виртуальной машине Java. |
static Runtime |
getRuntime() |
Возвращает объект runtime, связанный с текущим приложением Java. |
void |
halt |
Принудительно завершает текущую виртуальную машину Java. |
void |
load |
Загружает нативный модуль, указанный в аргументе filename. |
void |
loadLibrary |
Загружает нативный модуль, указанный в аргументе libname. |
long |
maxMemory() |
Возвращает максимальный объём памяти, который виртуальная машина Java попытается использовать. |
boolean |
removeShutdownHook |
Отменяет регистрацию ранее зарегистрированного обработчика завершения работы виртуальной машины. |
void |
runFinalization() |
Выполняет методы финализации для любых объектов, ожидающих финализации. |
long |
totalMemory() |
Возвращает общий объём памяти в виртуальной машине Java. |
static Runtime.Version |
version() |
Возвращает версию среды исполнения Java в виде объекта Runtime.Version. |
Подробности методов
getRuntime
public static Runtime getRuntime()
Runtime являются методами экземпляра и должны вызываться относительно текущего объекта runtime.- Возвращает:
- объект
Runtime, связанный с текущим приложением Java.
exit
public void exit(int status)
Все зарегистрированные обработчики завершения работы, если таковые имеются, запускаются в некотором неопределённом порядке и могут выполняться параллельно до завершения. После этого виртуальная машина останавливается.
Если этот метод вызывается после того, как все обработчики завершения работы уже были выполнены, и статус ненулевой, то этот метод останавливает виртуальную машину с указанным кодом состояния. В противном случае этот метод блокируется неопределённое время.
Метод System.exit является стандартным и удобным способом вызова этого метода.
- Параметры:
-
status- Код состояния завершения. По соглашению, ненулевой код состояния указывает на аномальное завершение. - Исключения:
-
SecurityException- Если присутствует менеджер безопасности, и его методcheckExitне разрешает выход с указанным статусом - См. также:
addShutdownHook
public void addShutdownHook(Thread hook)
Виртуальная машина Java завершает работу в ответ на два вида событий:
- Программа завершается нормально, когда завершается последний нить, не являющаяся демо-нитью, или когда вызывается метод
exit(эквивалентно,System.exit), или - Виртуальная машина останавливается в ответ на прерывание пользователя, такое как нажатие
^C, или системное событие, такое как выход пользователя или выключение системы.
Обработчик завершения работы — это просто инициализированная, но не запущенная нить. Когда виртуальная машина начинает последовательность завершения работы, она запустит все зарегистрированные обработчики завершения работы в некотором неопределённом порядке и позволит им выполняться параллельно. После завершения работы всех обработчиков она остановится. Обратите внимание, что демо-нити будут продолжать выполняться во время последовательности завершения работы, а также нити, не являющиеся демо-нитями, если завершение было инициировано вызовом метода exit.
После начала последовательности завершения работы её можно остановить только путём вызова метода halt, который насильственно завершает работу виртуальной машины.
После начала последовательности завершения работы невозможно зарегистрировать новый обработчик завершения работы или дезактивировать ранее зарегистрированный обработчик. Попытка выполнения любой из этих операций приведёт к возникновению исключения IllegalStateException.
Обработчики завершения работы работают в деликатное время жизненного цикла виртуальной машины и поэтому должны быть запрограммированы с учётом этого. В частности, они должны быть написаны так, чтобы быть потокобезопасными и избегать тупиковых ситуаций по мере возможности. Они также не должны слепо полагаться на службы, которые могут зарегистрировать собственные обработчики завершения работы и, следовательно, сами могут находиться в процессе завершения. Попытки использовать другие службы на основе потоков, такие как поток диспетчеризации событий AWT, например, могут привести к тупиковым ситуациям.
Обработчики завершения работы также должны быстро завершать свою работу. Когда программа вызывает exit, ожидается, что виртуальная машина быстро завершит работу и выйдет. Когда виртуальная машина завершается из-за выхода пользователя или выключения системы, базовая операционная система может позволить только ограниченное количество времени на завершение и выход. Поэтому не рекомендуется пытаться взаимодействовать с пользователем или выполнять длительные вычисления в обработчике завершения работы.
Необработанные исключения обрабатываются в обработчиках завершения работы так же, как и в любой другой нити, путём вызова метода uncaughtException объекта ThreadGroup нити. По умолчанию этот метод печатает трассировку стека исключения в System.err и завершает нить; это не приводит к выходу или остановке виртуальной машины.
В редких случаях виртуальная машина может прерваться, то есть остановиться, не завершив работу должным образом. Это происходит, когда виртуальная машина завершается внешне, например, с сигналом SIGKILL в Unix или вызовом TerminateProcess в Microsoft Windows. Виртуальная машина также может прерваться, если нативный метод работает неправильно, например, повреждая внутренние структуры данных или пытаясь получить доступ к несуществующей памяти. Если виртуальная машина прервётся, то нельзя гарантировать, будут ли запущены какие-либо обработчики завершения работы.
- Параметры:
-
hook- Инициализированный, но незапущенный объектThread - Исключения:
-
IllegalArgumentException- Если указанный обработчик уже зарегистрирован, или если можно определить, что обработчик уже запущен или уже был запущен -
IllegalStateException- Если виртуальная машина уже находится в процессе завершения работы -
SecurityException- Если присутствует менеджер безопасности, и он запрещаетRuntimePermission("shutdownHooks") - С:
- 1.3
- См. также:
removeShutdownHook
public boolean removeShutdownHook(Thread hook)
- Параметры:
-
hook- обработчик для удаления - Возвращает:
-
trueесли указанный обработчик был ранее зарегистрирован и успешно дезактивирован,falseв противном случае. - Исключения:
-
IllegalStateException- Если виртуальная машина уже находится в процессе завершения работы -
SecurityException- Если присутствует менеджер безопасности, и он запрещаетRuntimePermission("shutdownHooks") - С:
- 1.3
- См. также:
halt
public void halt(int status)
Этот метод следует использовать с большой осторожностью. В отличие от метода exit, этот метод не заставляет запускаться обработчики завершения работы. Если последовательность завершения работы уже началась, то этот метод не ожидает завершения работы ни одного обработчика завершения работы.
- Параметры:
-
status- Код состояния завершения. По соглашению, ненулевой код состояния указывает на аномальное завершение. Если методexit(эквивалентноSystem.exit) уже был вызван, то этот код состояния переопределит код состояния, переданный этому методу. - Исключения:
-
SecurityException- Если присутствует менеджер безопасности, и его методcheckExitне разрешает выход с указанным статусом - С:
- 1.3
- См. также:
exec
public Process exec(String command) throws IOException
Это удобный метод. Вызов вида exec(command) ведет себя точно так же, как вызов exec(command, null, null).
- Параметры:
-
command- указанная системная команда. - Возвращает:
- Новый объект
Processдля управления дочерним процессом - Исключения:
-
SecurityException- Если существует менеджер безопасности, и его методcheckExecне разрешает создание дочернего процесса -
IOException- Если произошла ошибка ввода-вывода -
NullPointerException- Еслиcommandnull -
IllegalArgumentException- Еслиcommandпустая - См. также:
exec
public Process exec(String command, String[] envp) throws IOException
Это метод-удобство. Вызов вида exec(command, envp) ведет себя точно так же, как вызов exec(command, envp, null).
- Parameters:
-
command- указанная системная команда. -
envp- массив строк, каждая из которых содержит настройки переменных среды в формате имя=значение, илиnullесли дочерний процесс должен унаследовать среду текущего процесса. - Returns:
- Новый объект
Processдля управления дочерним процессом - Throws:
-
SecurityException- Если существует менеджер безопасности, и его методcheckExecне разрешает создание дочернего процесса -
IOException- Если произошла ошибка ввода-вывода -
NullPointerException- Еслиcommandявляетсяnull, или один из элементовenvpявляетсяnull -
IllegalArgumentException- Еслиcommandпусто - See Also:
exec
public Process exec(String command, String[] envp, File dir) throws IOException
Это метод-удобство. Вызов вида exec(command, envp, dir) ведет себя точно так же, как вызов exec(cmdarray, envp, dir), где cmdarray - массив всех токенов в command.
Более точно, строка command разбивается на токены с помощью StringTokenizer, созданной вызовом new StringTokenizer(command) без дальнейшей модификации категорий символов. Токены, полученные токенизатором, затем помещаются в новый массив строк cmdarray, в том же порядке.
- Parameters:
-
command- указанная системная команда. -
envp- массив строк, каждая из которых содержит настройки переменных среды в формате имя=значение, илиnullесли дочерний процесс должен унаследовать среду текущего процесса. -
dir- рабочая директория дочернего процесса, илиnullесли дочерний процесс должен унаследовать рабочую директорию текущего процесса. - Returns:
- Новый объект
Processдля управления дочерним процессом - Throws:
-
SecurityException- Если существует менеджер безопасности, и его методcheckExecне разрешает создание дочернего процесса -
IOException- Если произошла ошибка ввода-вывода -
NullPointerException- Еслиcommandявляетсяnull, или один из элементовenvpявляетсяnull -
IllegalArgumentException- Еслиcommandпуста - Since:
- 1.3
- See Also:
exec
public Process exec(String[] cmdarray) throws IOException
Это метод-удобство. Вызов вида exec(cmdarray) ведет себя точно так же, как вызов exec(cmdarray, null, null).
- Parameters:
-
cmdarray- массив, содержащий вызываемую команду и её аргументы. - Returns:
- Новый объект
Processдля управления дочерним процессом - Throws:
-
SecurityException- Если существует менеджер безопасности, и его методcheckExecне разрешает создание дочернего процесса -
IOException- Если произошла ошибка ввода-вывода -
NullPointerException- Еслиcmdarrayявляетсяnull, или один из элементовcmdarrayявляетсяnull -
IndexOutOfBoundsException- Еслиcmdarrayявляется пустым массивом (имеет длину0) - See Also:
exec
public Process exec(String[] cmdarray, String[] envp) throws IOException
Это метод-удобство. Вызов вида exec(cmdarray, envp) ведет себя точно так же, как вызов exec(cmdarray, envp, null).
- Parameters:
-
cmdarray- массив, содержащий вызываемую команду и её аргументы. -
envp- массив строк, каждая из которых содержит настройки переменных среды в формате имя=значение, илиnullесли дочерний процесс должен унаследовать среду текущего процесса. - Returns:
- Новый объект
Processдля управления дочерним процессом - Throws:
-
SecurityException- Если существует менеджер безопасности, и его методcheckExecне разрешает создание дочернего процесса -
IOException- Если произошла ошибка ввода-вывода -
NullPointerException- Еслиcmdarrayявляетсяnull, или один из элементовcmdarrayявляетсяnull, или один из элементовenvpявляетсяnull -
IndexOutOfBoundsException- Еслиcmdarrayявляется пустым массивом (имеет длину0) - See Also:
exec
public Process exec(String[] cmdarray, String[] envp, File dir) throws IOException
Учитывая массив строк cmdarray, представляющих токены командной строки, и массив строк envp, представляющих настройки переменных среды, этот метод создаёт новый процесс, в котором нужно выполнить указанную команду.
Этот метод проверяет, что cmdarray является допустимой командой операционной системы. Какие команды допустимы, зависит от системы, но как минимум команда должна быть непустым списком непустых строк.
Если envp равно null, дочерний процесс наследует настройки среды текущего процесса.
Для запуска процесса на некоторых операционных системах может потребоваться минимальный набор системно-зависимых переменных среды. В результате дочерний процесс может унаследовать дополнительные настройки переменных среды, помимо указанных в среде.
ProcessBuilder.start() теперь является предпочтительным способом запуска процесса с изменённой средой.
Рабочая директория нового дочернего процесса задаётся dir. Если dir равно null, дочерний процесс наследует текущую рабочую директорию текущего процесса.
Если существует менеджер безопасности, его метод checkExec вызывается с первым компонентом массива cmdarray в качестве аргумента. Это может привести к выбрасыванию исключения SecurityException.
Запуск процесса операционной системы сильно зависит от системы. Среди многих возможных проблем:
- Файл программы операционной системы не найден.
- Доступ к файлу программы запрещён.
- Рабочая директория не существует.
В таких случаях будет выбрашено исключение. Точный характер исключения зависит от системы, но оно всегда будет подклассом IOException.
Если операционная система не поддерживает создание процессов, будет выбрашено исключение UnsupportedOperationException.
- Parameters:
-
cmdarray- массив, содержащий команду для вызова и её аргументы. -
envp- массив строк, каждый элемент которого содержит настройки переменной среды в формате имя=значение, илиnullесли дочерний процесс должен унаследовать среду текущего процесса. -
dir- рабочая директория дочернего процесса, илиnullесли дочерний процесс должен унаследовать рабочую директорию текущего процесса. - Returns:
- Новый объект
Processдля управления дочерним процессом - Throws:
-
SecurityException- Если менеджер безопасности существует и его методcheckExecне разрешает создание дочернего процесса -
UnsupportedOperationException- Если операционная система не поддерживает создание процессов. -
IOException- Если произошла ошибка ввода-вывода -
NullPointerException- Еслиcmdarrayравноnull, или один из элементовcmdarrayравенnull, или один из элементовenvpравенnull -
IndexOutOfBoundsException- Еслиcmdarray- это пустой массив (имеет длину0) - Since:
- 1.3
- See Also:
availableProcessors
public int availableProcessors()
Это значение может меняться во время конкретного вызова виртуальной машины. Приложения, чувствительные к количеству доступных процессоров, поэтому должны периодически опрашивать эту свойство и соответствующим образом настраивать использование ресурсов.
- Returns:
- максимальное количество процессоров, доступных для виртуальной машины; никогда не меньше единицы
- Since:
- 1.4
freeMemory
public long freeMemory()
gc может привести к увеличению значения, возвращаемого методом freeMemory.
- Returns:
- приблизительное значение общего количества памяти, в настоящее время доступной для будущих выделенных объектов, измеряется в байтах.
totalMemory
public long totalMemory()
Обратите внимание, что количество памяти, необходимое для хранения объекта любого заданного типа, может зависеть от реализации.
- Returns:
- общее количество памяти, в настоящее время доступной для текущих и будущих объектов, измеряется в байтах.
maxMemory
public long maxMemory()
Long.MAX_VALUE.- Returns:
- максимальное количество памяти, которое виртуальная машина попытается использовать, измеряется в байтах
- Since:
- 1.4
gc
public void gc()
Вызов этого метода предполагает, что виртуальная машина Java потратит ресурсы на переработку неиспользуемых объектов, чтобы освободить память, которую они в настоящее время занимают, для повторного использования виртуальной машиной Java. При возврате управления из вызова метода виртуальная машина Java сделает всё возможное, чтобы освободить место от всех неиспользуемых объектов. Нет гарантии, что эти усилия приведут к переработке определённого количества неиспользуемых объектов, освобождению определённого количества памяти или завершению в определённое время, если вообще. Также нет гарантии, что эти усилия приведут к изменению доступности определённого количества объектов или что определённое количество объектов Reference будет очищено и помещено в очередь.
Имя gc означает "сборщик мусора". Виртуальная машина Java выполняет этот процесс переработки автоматически по мере необходимости в отдельном потоке, даже если метод gc не вызывается явно.
Метод System.gc() является общепринятым и удобным способом вызова этого метода.
runFinalization
public void runFinalization()
finalize объектов, которые были обнаружены как удалённые, но чьи методы finalize ещё не были выполнены. При возврате управления из вызова метода виртуальная машина сделает всё возможное для завершения всех ожидающих finalization. Виртуальная машина выполняет процесс finalization автоматически по мере необходимости в отдельном потоке, если метод runFinalization не вызывается явно.
Метод System.runFinalization() является общепринятым и удобным способом вызова этого метода.
- See Also:
load
public void load(String filename)
Runtime.getRuntime().load("/home/avh/lib/libX11.so");). Если аргумент filename, после удаления всех платформно-специфических префиксов, путей и расширений, указывает на библиотеку, имя которой, например, L, и системная библиотека с именем L статически связана с VM, то вызывается функция JNI_OnLoad_L, экспортируемая библиотекой, а не попытка загрузить динамическую библиотеку. Файл, соответствующий аргументу, не обязательно должен существовать в файловой системе. См. Спецификацию JNI для получения дополнительной информации. В противном случае аргумент filename отображается на изображение системной библиотеки способом, зависящим от реализации. Сначала, если существует менеджер безопасности, его метод checkLink вызывается с filename в качестве аргумента. Это может привести к исключению безопасности.
Это аналогично методу loadLibrary(String), но принимает в качестве аргумента общее имя файла, а не только имя библиотеки, что позволяет загружать любой файл кода нативных функций.
Метод System.load(String) является общепринятым и удобным способом вызова этого метода.
- Parameters:
-
filename- файл для загрузки. - Throws:
-
SecurityException- если существует менеджер безопасности и его методcheckLinkне разрешает загрузку указанной динамической библиотеки -
UnsatisfiedLinkError- если имя файла не является абсолютным именем файла, системная библиотека не статически связана с VM или библиотека не может быть отображена на изображение системной библиотеки хост-системой. -
NullPointerException- еслиfilenameравноnull - See Also:
loadLibrary
public void loadLibrary(String libname)
libname. Аргумент libname не должен содержать никаких платформозависимых префиксов, расширений файлов или путей. Если нативная библиотека, называемая libname, статически связана с виртуальной машиной, то вызывается функция JNI_OnLoad_libname, экспортируемая библиотекой. См. Спецификацию JNI для получения более подробной информации. В противном случае, аргумент libname загружается из системного расположения библиотек и сопоставляется с образом нативной библиотеки способом, зависящим от реализации. Сначала, если существует менеджер безопасности, вызывается его метод checkLink с аргументом libname. Это может привести к исключению безопасности.
Метод System.loadLibrary(String) является стандартным и удобным способом вызова этого метода. Если нативные методы должны использоваться в реализации класса, стандартная стратегия заключается в размещении нативного кода в файле библиотеки (назовите его LibFile) и затем добавлении статического инициализатора:
static { System.loadLibrary("LibFile"); }
внутри объявления класса. Когда класс загружается и инициализируется, необходимое нативное кодовое реализация для нативных методов также загружается. Если этот метод вызывается более одного раза с тем же именем библиотеки, второй и последующие вызовы игнорируются.
- Параметры:
-
libname- имя библиотеки. - Исключения:
-
UnsatisfiedLinkError- если аргумент libname содержит путь к файлу, нативная библиотека не статически связана с виртуальной машиной или библиотека не может быть сопоставлена с изображением нативной библиотеки хост-системой. -
NullPointerException- еслиlibnameравноnull - См. также:
version
public static Runtime.Version version()
Runtime.Version.- Возвращает:
-
Runtime.VersionJava Runtime Environment - С:
- 9
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Runtime.html