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


28

За винятком сміттєзбірника, які ще функції у Java роблять його непридатним для програмування в режимі реального часу? У мережі завжди, коли обговорюється Java vs C ++ щодо програмування в режимі реального часу, завжди йдеться про сміттєзбірник. Є ще щось?


4
Навіть збирання сміття не є проблемою - є кілька важких збирачів сміття в реальному часі. Ті, хто згадує gc як пробку шоу в режимі реального часу, просто некомпетентний.
SK-логіка

2
@ SK-logic s / некомпетентний / непоінформований / г
Скотт Вітлок

@ScottWhitlock, погоджено, більшість з них є. Але деякі (найбільш голосові) продовжують наполягати навіть після належної інформації. Я не знаю жодного раціонального пояснення цього антропологічного явища.
SK-логіка

Відповіді:


36

Є два додаткові речі, які я можу запам'ятати без проблем:

  1. Складання JIT
  2. Нитка реалізація

Що стосується реального часу, передбачуваність результатів є, мабуть, найважливішим фактором; Ось чому непередбачуваний цикл GC робить Java непридатною для реального часу.

JIT пропонує покращені показники роботи, але починається в якийсь момент після запуску програми, забираючи певні ресурси та змінюючи швидкість виконання системи. Це також може повторитися на більш пізньому етапі, якщо ВМ вважає, що може зробити «кращу» роботу на той час.

Що стосується нарізки: я зараз не дуже пам’ятаю, чи це частина мовної розробки, чи просто дуже поширена реалізація, але Java зазвичай не пропонує інструментів, щоб точно контролювати виконання потоків; Наприклад, хоча для потоків визначено 10 "пріоритетів", немає необхідності, щоб ВМ насправді враховувала ці пріоритети. Оператори для зупинки та перемикання потоків також або не визначені, або не жорстко дотримуються системою.

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

Станом на, можливо, 5 років тому, у Sun (зараз Oracle) був RTSJ VM (Це ніколи не було назви, AFAIK); IBM мав WebSphere в режимі реального часу; І JamaicaVM - це вільне (?) Рішення, незалежне від платформи. Гуглі ті, хто сьогодні, не приносять багато.


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

5
У специфікації Java немає нічого, що б застосувало JIT замість AOT або чистої інтерпретації. Чисті зелені нитки цілком передбачувані, тому вони також не можуть бути перешкодою в реальному часі.
SK-логіка

Вебсфера в реальному часі хоча б все ще підтримується (вимагає підтримки Java 7.0, і ви можете потрапити на сторінку, щоб придбати її)
jk.

@ SK-логіка - правильно, хороший момент!
авів

33

Операційна система

Поки Java працює поверх Unix або Windows або будь-якої іншої "звичайної" ОС, реальний час не гарантується.

Операційна система в режимі реального часу є обов'язковою для запуску програм у режимі реального часу.


13
@Giorgio: на жорсткі гарантії в режимі реального часу? Так.
Йоахім Зауер

5
Крім того, є доступні операційні системи, розроблені для реального часу з самого початку, наприклад, FreeRTOS.
середів

4
Хоча це взагалі дуже важливий момент у важкому реальному часі, він, схоже, не є специфічним для Java. Я щось пропускаю?

3
@delnan справа в тому, що навіть якщо ви використовуєте (уявну?) реалізацію Java VM в реальному часі, це не дуже допоможе, якщо ОС не може дати вам гарантій у режимі реального часу.
шлінгел

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

7

З технічної точки зору, в режимі реального часу Java можна (як підказують коментарі SK-логіки). однак це не є загальним для ряду нетехнічних причин:

Старі стандарти

Не вдається знайти посилання на це, але я впевнений, що я бачив стандарти безпеки або поради щодо відповідності стандартів безпеки, встановивши заборону на Java. Правильно чи неправильно, якщо вам доведеться відповідати чомусь, що говорить, що Java є багатослівним, то Java - це верботен.

Старі інженери з безпеки

Навіть якщо стандарти, які потрібно працювати, щоб не забороняти Java, робота з аудиторами безпеки / якості без досвіду роботи Java дуже означатиме, що ви не йдете шляхом найменшого опору. Все, що не є звичайним для аудитора, швидше за все, викличе багато питань, що, в свою чергу, означає, що ви багато працюєте для обґрунтування вашого вибору.

Спільнота

тобто існує велика залежність від шляху, більшість нинішніх експертів у реальному часі знають C ++, C або ADA зсередини, тому це природний вибір робити нову роботу.

(зауважте: я дещо зв'язав реальне життя та безпеку у вищесказаному, що є щось інше питання, оскільки навіть стандарти безпеки часто плутають їх два)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.