Класс Runtime
- java.lang.Object
-
- java.lang.Runtime
public class Runtime extends Object
В каждом Java-приложении существует единственный экземпляр класса Runtime, который позволяет приложению взаимодействовать со средой, в которой оно выполняется. Текущий runtime можно получить с помощью метода getRuntime.
Приложения не могут создавать собственные экземпляры этого класса.
- С момента:
- 1.0
- См. также:
getRuntime()
Вложенные классы
| Модификатор и тип | Класс | Описание |
|---|---|---|
static class | Runtime.Version | Представление строки версии для реализации платформы Java SE. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
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() | Выполняет сборщик мусора. |
static Runtime | getRuntime() | Возвращает объект runtime, связанный с текущим Java приложением. |
void | halt(int status) | Принудительно завершает текущую выполняющуюся Java виртуальную машину. |
void | load(String filename) | Загружает системную библиотеку, указанную аргументом имени файла. |
void | loadLibrary(String libname) | Загружает системную библиотеку, указанную аргументом |
long | maxMemory() | Возвращает максимальное количество памяти, которое Java виртуальная машина попытается использовать. |
boolean | removeShutdownHook(Thread hook) | Дерегистрирует ранее зарегистрированный хук завершения работы виртуальной машины. |
void | runFinalization() | Выполняет методы finalization любых объектов, ожидающих finalization. |
long | totalMemory() | Возвращает общее количество памяти в Java виртуальной машине. |
void | traceInstructions(boolean on) | Устарело, для удаления: Этот элемент API может быть удален в будущей версии. Этот метод предназначался для управления трассировкой инструкций. |
void | traceMethodCalls(boolean on) | Устарело, для удаления: Этот элемент API может быть удален в будущей версии. Этот метод предназначался для управления трассировкой вызова методов. |
static Runtime.Version | version() | Возвращает версию Java Runtime Environment как |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы
getRuntime
public static Runtime getRuntime()
Возвращает объект runtime, связанный с текущим приложением Java. Большинство методов класса Runtime являются методами экземпляра и должны вызываться относительно текущего объекта runtime.
- Возвращает:
- объект
Runtime, связанный с текущим приложением Java.
exit
public void exit(int status)
Завершает выполнение текущей виртуальной машины Java, инициируя последовательность завершения. Этот метод никогда не возвращает значение нормально. Аргумент служит в качестве кода состояния; по соглашению, ненулевой код состояния указывает на аномальное завершение.
Все зарегистрированные обработчики завершения, если таковые имеются, запускаются в произвольном порядке и допускается их одновременное выполнение до завершения. После этого виртуальная машина останавливается.
Если этот метод вызывается после того, как все обработчики завершения уже были выполнены, и статус ненулевой, то этот метод останавливает виртуальную машину с заданным кодом состояния. В противном случае этот метод ожидает неопределенно долго.
Метод System.exit является традиционным и удобным способом вызова этого метода.
- Параметры:
-
status- Код завершения. По соглашению, ненулевой код состояния указывает на аномальное завершение. - Исключение:
-
SecurityException- Если присутствует менеджер безопасности, и его методcheckExitне разрешает выход с указанным статусом - См. также:
-
SecurityException,SecurityManager.checkExit(int),addShutdownHook(java.lang.Thread),removeShutdownHook(java.lang.Thread),halt(int)
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(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)
exec
public Process exec(String command)
throws IOException Выполняет указанную строку команды в отдельном процессе.
Это удобный метод. Вызов в форме exec(command) ведет себя точно так же, как вызов exec(command, null, null).
- Параметры:
-
command- Указанная системная команда. - Возвращает:
- Новый объект
Processдля управления дочерним процессом - Исключение:
-
SecurityException- Если существует менеджер безопасности, и его методcheckExecне разрешает создание дочернего процесса -
IOException- Если произошла ошибка ввода-вывода -
NullPointerException- Еслиcommandявляетсяnull -
IllegalArgumentException- Еслиcommandпусто - См. также:
-
exec(String[], String[], File),ProcessBuilder
exec
public Process exec(String command,
String[] envp)
throws IOException Выполняет указанную строковую команду в отдельном процессе со указанной средой.
Это удобный метод. Вызов в форме exec(command, envp) ведет себя точно так же, как вызов exec(command, envp, null).
- Параметры:
-
command- указанная системная команда. -
envp- массив строк, каждый элемент которого содержит настройки переменных среды в формате имя=значение, илиnull, если дочерний процесс должен унаследовать среду текущего процесса. - Возвращает:
- Новый объект
Processдля управления дочерним процессом - Выбрасывает:
-
SecurityException- Если существует менеджер безопасности, и его методcheckExecне разрешает создание дочернего процесса -
IOException- Если произошла ошибка ввода-вывода -
NullPointerException- Еслиcommandимеет значениеnull, или один из элементовenvpимеет значениеnull -
IllegalArgumentException- Еслиcommandпусто - См. также:
-
exec(String[], String[], File),ProcessBuilder
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 {@link StringTokenizer}(command) без дальнейшей модификации категорий символов. Полученные токены помещаются в новый массив строк cmdarray, в том же порядке.
- Параметры:
-
command- указанная системная команда. -
envp- массив строк, каждый элемент которого содержит настройки переменных среды в формате имя=значение, илиnull, если дочерний процесс должен унаследовать среду текущего процесса. -
dir- рабочая директория дочернего процесса, илиnullесли дочерний процесс должен унаследовать рабочую директорию текущего процесса. - Возвращает:
- Новый объект
Processдля управления дочерним процессом - Выбрасывает:
-
SecurityException- Если существует менеджер безопасности, и его методcheckExecне разрешает создание дочернего процесса -
IOException- Если произошла ошибка ввода-вывода -
NullPointerException- Еслиcommandимеет значениеnull, или один из элементовenvpимеет значениеnull -
IllegalArgumentException- Еслиcommandпусто - С:
- 1.3
- См. также:
ProcessBuilder
exec
public Process exec(String[] cmdarray)
throws IOException Выполняет указанную команду и аргументы в отдельном процессе.
Это метод удобства. Вызов в форме exec(cmdarray) ведет себя точно так же, как вызов exec(cmdarray, null, null).
- Параметры:
-
cmdarray- массив, содержащий вызываемую команду и её аргументы. - Возвращает:
- Новый объект
Processдля управления дочерним процессом - Выбрасывает:
-
SecurityException- Если существует менеджер безопасности, и его методcheckExecне разрешает создание дочернего процесса -
IOException- Если произошла ошибка ввода-вывода -
NullPointerException- Еслиcmdarrayимеет значениеnull, или один из элементовcmdarrayимеет значениеnull -
IndexOutOfBoundsException- Еслиcmdarrayявляется пустым массивом (длина0) - См. также:
ProcessBuilder
exec
public Process exec(String[] cmdarray,
String[] envp)
throws IOException Выполняет указанную команду и аргументы в отдельном процессе с указанной средой.
Это метод удобства. Вызов в форме exec(cmdarray, envp) ведет себя точно так же, как вызов exec(cmdarray, envp, null).
- Параметры:
-
cmdarray- массив, содержащий вызываемую команду и её аргументы. -
envp- массив строк, каждый элемент которого содержит настройки переменных среды в формате имя=значение, илиnull, если дочерний процесс должен унаследовать среду текущего процесса. - Возвращает:
- Новый объект
Processдля управления дочерним процессом - Выбрасывает:
-
SecurityException- Если существует менеджер безопасности, и его методcheckExecне разрешает создание дочернего процесса -
IOException- Если произошла ошибка ввода-вывода -
NullPointerException- Еслиcmdarrayимеет значениеnull, или один из элементовcmdarrayимеет значениеnull, или один из элементовenvpимеет значениеnull -
IndexOutOfBoundsException- Еслиcmdarrayявляется пустым массивом (длина0) - См. также:
ProcessBuilder
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.
- Параметры:
-
cmdarray- массив, содержащий вызываемую команду и её аргументы. -
envp- массив строк, каждый элемент которого содержит настройки переменных среды в формате имя=значение, илиnull, если дочерний процесс должен унаследовать среду текущего процесса. -
dir- рабочая директория дочернего процесса, илиnullесли дочерний процесс должен унаследовать рабочую директорию текущего процесса. - Возвращает:
- Новый объект
Processдля управления дочерним процессом - Выбрасывает:
-
SecurityException- Если существует менеджер безопасности, и его методcheckExecне разрешает создание дочернего процесса -
UnsupportedOperationException- Если операционная система не поддерживает создание процессов. -
IOException- Если произошла ошибка ввода-вывода -
NullPointerException- Еслиcmdarrayимеет значениеnull, или один из элементовcmdarrayимеет значениеnull, или один из элементовenvpимеет значениеnull -
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) Не реализовано, ничего не делает.
- Параметры:
-
on- игнорируется
traceMethodCalls
@Deprecated(since="9",
forRemoval=true)
public void traceMethodCalls(boolean on) Не реализовано, ничего не делает.
- Параметры:
-
on- игнорируется
load
public void load(String filename)
Загружает нативную библиотеку, указанную аргументом filename. Аргумент 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) является стандартным и удобным способом вызова этого метода.
- Параметры:
-
filename- файл для загрузки. - Исключение:
-
SecurityException- если существует менеджер безопасности и его методcheckLinkне разрешает загрузку указанной динамической библиотеки -
UnsatisfiedLinkError- если либо имя файла не является абсолютным именем пути, нативная библиотека не статически связана с VM, или библиотека не может быть отображена на образ нативной библиотеки хост-системой. -
NullPointerException- еслиfilenameявляетсяnull - См. также:
-
getRuntime(),SecurityException,SecurityManager.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- еслиlibnameявляетсяnull - См. также:
-
SecurityException,SecurityManager.checkLink(java.lang.String)
version
public static Runtime.Version version()
Возвращает версию среды выполнения Java в виде Runtime.Version.
- Возвращает:
- версия
Runtime.Versionсреды выполнения Java - С тех пор как:
- 9
© 1993, 2020, 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/11/docs/api/java.base/java/lang/Runtime.html