Что значит иметь разветвленную виртуальную машину Java? - PullRequest
9 голосов
/ 15 декабря 2011

Иногда я получаю эту ошибку при запуске тестов JUnit.

Я не совсем спрашиваю, в чем ошибка. Я просто хочу знать, что это означает, когда вилка Java Java?

Ответы [ 2 ]

25 голосов
/ 15 декабря 2011

«Разветвленная виртуальная машина» не является ошибкой (хотя полученная вами ошибка может быть связана с ней).

Некоторые инструменты, участвующие в различных аспектах компиляции и тестирования (например, Maven), написаны наJava и используйте JVM для запуска сами.

Если вы запускаете модульные тесты для своего приложения без разветвления виртуальной машины, Maven будет запускать эти тесты в той же виртуальной машине, что и Maven.Поэтому на него могут влиять определенные настройки всей виртуальной машины (например, некоторые системные свойства).

Чтобы избежать побочных эффектов из-за Maven, можно запускать тесты на разветвленной виртуальной машине, то есть вполностью отдельная виртуальная машина, работающая как другой процесс в ОС.

(Это может относиться к другим инструментам, Maven - только пример.)

Сбой раздвоенной виртуальной машины, по крайней мере, позволяет вернутьсяв другое приложение Java, которое запустило и организовало эти модульные тесты.Если бы вы выполняли эти тесты на одной и той же виртуальной машине, вы также могли бы аварийно завершить работу приложения, которое запустило ваши тесты (и, таким образом, получить очень мало информации взамен).

2 голосов
/ 15 декабря 2011

A ' fork ' - это терминология, используемая в Linux для обозначения выполнения другого процесса (вольно). В этом случае разветвленная виртуальная машина Java является дочерним процессом, используемым для изоляции ваших модульных тестов по классам или методам, гарантируя, что между несколькими тестами не будет загрязнения состояния.

Задача ant JUnit поддерживает несколько режимов разветвления, как можно увидеть здесь .

Я видел ошибки, в которых говорится, что разветвленная ВМ умерла при использовании JUnit. Это означает, что ваш тест сбой и что ваш бегун JUnit (обычно ant) ​​не может получить ничего из вывода.

Вам следует попытаться устранить причину сбоя.

...