Кроме сборщика мусора, какие еще функции в Java делают его неподходящим для программирования в реальном времени? В сети всякий раз, когда Java против C ++ обсуждается в отношении программирования в реальном времени, всегда упоминается сборщик мусора. Есть ли еще что-нибудь?
28
Ответы:
Есть два дополнительных пункта, которые я могу вспомнить по отдельности:
В реальном времени предсказуемость производительности, вероятно, является наиболее важным фактором; Вот почему непредсказуемый цикл GC делает Java непригодной для работы в реальном времени.
JIT предлагает улучшенную производительность, но запускается в какой-то момент после запуска программы, использования некоторых ресурсов и изменения скоростей выполнения системы. Это также может произойти снова на более позднем этапе, если виртуальная машина полагает, что она может сделать «лучшую» работу в это время.
Что касается многопоточности: на данный момент я не совсем помню, является ли это частью языкового дизайна или просто очень распространенной реализацией, но Java обычно не предоставляет инструментов для точного управления выполнением потоков; Например, хотя для потоков указано 10 «приоритетов», не требуется, чтобы виртуальная машина действительно учитывала эти приоритеты. Операторы остановки и переключения потоков также либо не определены, либо жестко не соблюдаются системой.
Существует несколько реализаций JSR 1: Спецификация в реальном времени для Java - спецификация, которая была одобрена в 1998 году. Эта спецификация затрагивает как можно больше проблем, которые делают стандартную Java непригодной для работы в реальном времени.
Примерно 5 лет назад у Sun (теперь Oracle) была RTSJ VM (у которой никогда не было имени, AFAIK); У IBM был WebSphere Real Time; И JamaicaVM было бесплатным (?), Независимым от платформы решением. Погуглить тех сегодня мало что дает.
источник
Операционная система
Пока Java работает поверх Unix или Windows или любой другой «обычной» ОС, реальное время не гарантируется.
ОС реального времени обязательна для запуска приложений реального времени.
источник
Технически возможно иметь Java в реальном времени (как подсказывают комментарии SK-logic). однако это не распространено по ряду нетехнических причин:
Старые стандарты
Возникли проблемы с поиском ссылки на это, но я уверен, что я видел стандарты безопасности или советы по соответствию стандартам безопасности, наложил полный запрет на Java. Правильно или нет, если вам нужно соответствовать чему-то, что говорит, что Java - верботен, то Java - верботен.
Старые инженеры по технике безопасности
Даже если вам нужно работать над стандартами, чтобы не запрещать Java, работа с аудиторами Safety / Quality без опыта работы с Java будет означать, что вы не идете по пути наименьшего сопротивления. Все, что является необычным для аудитора, вероятно, вызовет много вопросов, что, в свою очередь, означает большую работу для вас, оправдывающую ваш выбор.
Общество
т. е. существует много зависимостей от пути, большинство нынешних экспертов в реальном времени будут знать C ++, C или ADA наизнанку, поэтому это естественный выбор для новой работы.
(примечание: я несколько совмещал в реальном времени и безопасность в вышеупомянутом, что является своего рода другой проблемой, в которой даже стандарты безопасности часто объединяют два)
источник