Tranne il garbage collector, cos'altro rende Java un linguaggio di programmazione non in tempo reale

28

Tranne il garbage collector, quali sono alcune altre funzionalità in Java che lo rendono inadatto per la programmazione in tempo reale? Sulla rete, ogni volta che Java vs C ++ viene discusso per quanto riguarda la programmazione in tempo reale, è sempre il garbage collector menzionato. C'è qualcos'altro?

    
posta Kaushik 24.06.2013 - 05:09
fonte

3 risposte

36

Ci sono altri due elementi che posso ricordare a memoria:

  1. Compilare JIT
  2. Implementazione di threading

In termini di tempo reale, la prevedibilità delle prestazioni è probabilmente il fattore più importante; Ecco perché un ciclo di GC imprevedibile rende Java non adatto alla realtà.

JIT offre prestazioni migliorate, ma prende il via ad un certo punto dopo che il programma è in esecuzione, prendendo alcune risorse e modificando le velocità di esecuzione del sistema. Può anche accadere di nuovo in una fase successiva, se la VM crede di poter fare un lavoro "migliore" in quel momento.

Per quanto riguarda il threading: non ricordo a questo punto se questo fa parte del design del linguaggio, o solo un'implementazione molto comune, ma in genere Java non fornisce strumenti per controllare con precisione l'esecuzione del thread; Ad esempio, mentre ci sono 10 "priorità" specificate per i thread, non è necessario che la VM consideri effettivamente queste priorità. Anche gli operatori per l'arresto e la commutazione dei thread non sono definiti o non sono rigidamente rispettati dal sistema.

Esistono diverse implementazioni di JSR 1: Specifiche in tempo reale per Java - una specifica che ha stato approvato nel 1998. Questa specifica risolve il più possibile i problemi che rendono Java standard inadatto alla realtà in tempo reale.

A partire da circa 5 anni fa, Sun (ora Oracle) aveva una macchina virtuale RTSJ (che non ha mai avuto un nome, AFAIK); IBM aveva WebSphere Real Time; E JamaicaVM era una soluzione gratuita (?), Indipendente dalla piattaforma. Googling quelli oggi non porta molto.

    
risposta data 24.06.2013 - 06:25
fonte
33

Il sistema operativo

Finché Java gira su Unix o Windows o qualsiasi altro sistema operativo "normale", il realtime non è garantito.

Un sistema operativo in tempo reale è obbligatorio per l'esecuzione di applicazioni in tempo reale.

    
risposta data 24.06.2013 - 06:39
fonte
7

Tecnicamente è possibile avere java in tempo reale (come suggeriscono i commenti di SK-logic). tuttavia non è comune per un numero di motivi non tecnici:

Vecchi standard

Avendo difficoltà a trovare un riferimento per questo, ma sono sicuro di aver visto gli standard di sicurezza, o un consiglio di conformità allo standard di sicurezza, mettere un divieto totale su Java. Giustamente o erroneamente se devi conformarti a qualcosa che dice che Java è verboten, allora Java è Verboten.

Vecchi tecnici di sicurezza

Anche se gli standard di cui hai bisogno per lavorare non vietano Java, lavorare con i revisori Safety / Quality senza esperienza di Java significherà molto che non stai seguendo il percorso di minor resistenza. Qualunque cosa fuori dall'ordinario per l'auditor probabilmente attirerà un sacco di domande che a loro volta significano molto lavoro per giustificare le tue scelte.

La community

vale a dire. c'è molta dipendenza dal percorso, la maggior parte degli attuali esperti in tempo reale conoscono C ++, C o ADA, quindi è una scelta naturale per fare nuovi lavori.

(nota: ho un po 'fuso tempo reale e sicurezza in quanto sopra, che è una specie di un altro problema, in quanto anche gli standard di sicurezza spesso confondono i due)

    
risposta data 24.06.2013 - 14:07
fonte

Leggi altre domande sui tag