За исключением сборщика мусора, что еще делает Java языком программирования не в реальном времени


28

Кроме сборщика мусора, какие еще функции в Java делают его неподходящим для программирования в реальном времени? В сети всякий раз, когда Java против C ++ обсуждается в отношении программирования в реальном времени, всегда упоминается сборщик мусора. Есть ли еще что-нибудь?


4
Даже сборка мусора не является проблемой - есть несколько жестких сборщиков мусора в реальном времени. Те, кто упоминает gc как ограничитель показа в реальном времени, просто некомпетентны.
SK-logic

2
@ SK-логика s / некомпетентный / неосведомленный / г
Скотт Уитлок

@ ScottWhitlock, согласился, большинство из них. Но некоторые (самые громкие) продолжают настаивать даже после того, как их должным образом информируют. Я не знаю ни одного рационального объяснения этого антропологического явления.
SK-logic

Ответы:


36

Есть два дополнительных пункта, которые я могу вспомнить по отдельности:

  1. JIT сборник
  2. Реализация потоков

В реальном времени предсказуемость производительности, вероятно, является наиболее важным фактором; Вот почему непредсказуемый цикл GC делает Java непригодной для работы в реальном времени.

JIT предлагает улучшенную производительность, но запускается в какой-то момент после запуска программы, использования некоторых ресурсов и изменения скоростей выполнения системы. Это также может произойти снова на более позднем этапе, если виртуальная машина полагает, что она может сделать «лучшую» работу в это время.

Что касается многопоточности: на данный момент я не совсем помню, является ли это частью языкового дизайна или просто очень распространенной реализацией, но Java обычно не предоставляет инструментов для точного управления выполнением потоков; Например, хотя для потоков указано 10 «приоритетов», не требуется, чтобы виртуальная машина действительно учитывала эти приоритеты. Операторы остановки и переключения потоков также либо не определены, либо жестко не соблюдаются системой.

Существует несколько реализаций JSR 1: Спецификация в реальном времени для Java - спецификация, которая была одобрена в 1998 году. Эта спецификация затрагивает как можно больше проблем, которые делают стандартную Java непригодной для работы в реальном времени.

Примерно 5 лет назад у Sun (теперь Oracle) была RTSJ VM (у которой никогда не было имени, AFAIK); У IBM был WebSphere Real Time; И JamaicaVM было бесплатным (?), Независимым от платформы решением. Погуглить тех сегодня мало что дает.


Другая проблема, хотя и небольшая по сравнению, заключается в том, что класс загружается только тогда, когда он будет использоваться.
T-Bull

5
В спецификации Java нет ничего, что обеспечивало бы использование JIT вместо AOT или чистой интерпретации. Чистые зеленые нити абсолютно предсказуемы, поэтому они также не могут быть препятствием в реальном времени.
SK-logic

По-видимому, поддержка реального времени в websphere по-прежнему поддерживается (заявляется о поддержке Java 7.0, и вы можете перейти на страницу, чтобы приобрести ее)
jk.

@ СК-логика - правильно, хорошо!
Авив

33

Операционная система

Пока Java работает поверх Unix или Windows или любой другой «обычной» ОС, реальное время не гарантируется.

ОС реального времени обязательна для запуска приложений реального времени.


13
@ Джорджио: для твердых гарантий в реальном времени? Да.
Иоахим Зауэр

5
Кроме того, существуют доступные операционные системы, разработанные для реального времени с самого начала, например, FreeRTOS.
Медив

4
Хотя это очень важный момент для сложного реального времени в целом, он, по-видимому, не является специфичным для Java. Я что-то пропустил?

3
@delnan суть в том, что даже если вы используете (воображаемую?) реализацию Java VM в реальном времени, это не сильно поможет, если ОС не может дать вам гарантии в реальном времени.
Шлингель

3
@delnan - у вопроса есть ложные предпосылки, предполагающие, что C ++ является языком программирования в реальном времени.
Mouviciel

7

Технически возможно иметь Java в реальном времени (как подсказывают комментарии SK-logic). однако это не распространено по ряду нетехнических причин:

Старые стандарты

Возникли проблемы с поиском ссылки на это, но я уверен, что я видел стандарты безопасности или советы по соответствию стандартам безопасности, наложил полный запрет на Java. Правильно или нет, если вам нужно соответствовать чему-то, что говорит, что Java - верботен, то Java - верботен.

Старые инженеры по технике безопасности

Даже если вам нужно работать над стандартами, чтобы не запрещать Java, работа с аудиторами Safety / Quality без опыта работы с Java будет означать, что вы не идете по пути наименьшего сопротивления. Все, что является необычным для аудитора, вероятно, вызовет много вопросов, что, в свою очередь, означает большую работу для вас, оправдывающую ваш выбор.

Общество

т. е. существует много зависимостей от пути, большинство нынешних экспертов в реальном времени будут знать C ++, C или ADA наизнанку, поэтому это естественный выбор для новой работы.

(примечание: я несколько совмещал в реальном времени и безопасность в вышеупомянутом, что является своего рода другой проблемой, в которой даже стандарты безопасности часто объединяют два)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.