Я часто чув, як розробники згадують, що Java не може " робити в реальному часі ", тобто додаток Java, що працює на Linux, не може відповідати вимогам детермінованої системи реального часу, наприклад, що працює на RIOT-OS тощо.
Я намагаюся зрозуміти, чому . Мій SWAG каже мені, що це, мабуть, багато в чому пов’язано з збирачем сміття Java, який може працювати в будь-який час і повністю призупиняти систему. І хоча там є так звані "паузальні ГК", я не обов'язково вірю їх рекламі, а також не маю 80 000 доларів за JVM-екземпляр, щоб розщедритися на проект хобі!
Я також читав цю статтю про запуск безпілотного програмного забезпечення в Linux . У цій статті автор описує сценарій, коли Linux ледь не спричинив, що його дрон врізався в його автомобіль:
Я навчився важкого уроку після того, як вирішив зробити цикл керування низьким рівнем (PID) на Pi - намагаючись бути розумним, я вирішив поставити запис журналу в середину циклу для налагодження - четвірка спочатку пролетіла добре, але потім Linux вирішив щоб зайняти 2 секунди, щоб написати один запис в журнал, і квадроцикл майже врізався в мій автомобіль!
Тепер, хоча цей автор написав своє програмне забезпечення для безпілотника на C ++, я б міг уявити, що додаток Java, що працює під управлінням Linux, може дуже спіткати таку ж долю.
За даними Вікіпедії:
Кажуть, що система є в реальному часі, якщо повна правильність операції залежить не тільки від її логічної правильності, але і від часу, в якому вона виконується.
Тому для мене це означає "у вас немає реального часу, якщо повна коректність вимагає логічної коректності та своєчасності ".
Давайте зробимо вигляд, що я написав програму Java, що вона є надзвичайно ефективною, і що я "стиснув лимон" так би мовити, і це не могло розумно написати (на Java), щоб бути швидшим.
Загалом, моє запитання таке: я шукаю когось, який би мені пояснив усі / більшість причин того, чому програма Java, що працює під управлінням Linux, не буде «додатком у реальному часі». Що означає, що всі категорії речей на стеку Java / Linux не дозволяють йому бути "своєчасним", а отже, бути " абсолютно правильним "? Як уже згадувалося, схоже, що зчитування журналу GC та Linux може призупинити виконання, але я впевнений, що поза цим додатком Java є ще багато речей, які можуть спричинити погані терміни / продуктивність та призвести до жорстких обмежень щодо терміну. Хто вони?