Tranne Garbage Collector, cos'altro rende Java un linguaggio di programmazione non in tempo reale


28

Tranne il Garbage Collector, quali sono alcune altre funzionalità di Java che lo rendono inadatto per la programmazione in tempo reale? In rete, ogni volta che si discute di Java vs C ++ per quanto riguarda la programmazione in tempo reale, è sempre il garbage collector a essere menzionato. C'è niente altro?


4
Anche la garbage collection non è un problema: sono disponibili numerosi Garbage Collector in tempo reale. Coloro che menzionano gc come uno show stopper in tempo reale sono semplicemente incompetenti.
SK-logic,

2
@ SK-logic s / incompetente / disinformato / g
Scott Whitlock

@ScottWhitlock, d'accordo, molti di loro lo sono. Ma alcuni (i più vocali) continuano a insistere anche dopo essere stati adeguatamente informati. Non sono a conoscenza di alcuna spiegazione razionale per questo fenomeno antropologico.
SK-logic,

Risposte:


36

Ci sono altri due elementi che posso ricordare a mano libera:

  1. Compilazione JIT
  2. Implementazione del threading

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

JIT offre prestazioni migliorate, ma si avvia a un certo punto dopo l'esecuzione del programma, prendendo alcune risorse e modificando le velocità di esecuzione del sistema. Può anche succedere di nuovo in una fase successiva, se la VM ritiene di poter fare un lavoro "migliore" in quel momento.

Per quanto riguarda il threading: non ricordo bene a questo punto se fa parte del design del linguaggio, o solo un'implementazione molto comune, ma Java di solito 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: specifica in tempo reale per Java - una specifica che è stata approvata nel 1998. Questa specifica affronta il più possibile i problemi che rendono Java standard inadatto per il tempo reale.

Almeno 5 anni fa, Sun (Now Oracle) aveva una VM RTSJ (che non aveva mai avuto un nome, AFAIK); IBM aveva WebSphere Real Time; E JamaicaVM era una soluzione gratuita (?) Indipendente dalla piattaforma. Cercare su Google oggi non porta molto.


Un altro problema, anche se piccolo in confronto, è che una classe viene caricata solo quando verrà utilizzata.
T-Bull,

5
Non c'è nulla nelle specifiche Java che imporrà JIT invece di AOT o una pura interpretazione. I fili verdi puri sono totalmente prevedibili, quindi non possono essere un ostacolo in tempo reale.
SK-logic,

sembra che il tempo reale di websphere sia ancora supportato (sostiene il supporto Java 7.0 e puoi arrivare a una pagina per acquistarlo)
jk.

@ SK-logic - giusto, buon punto!
aviv

33

Il sistema operativo

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

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


13
@Giorgio: per garanzie reali in tempo reale? Sì.
Joachim Sauer,

5
Inoltre, ci sono sistemi operativi disponibili progettati per Real Time dall'inizio, ad esempio FreeRTOS.
Medivh

4
Anche se questo è un punto molto importante per il vero tempo reale in generale, non sembra minimamente specifico per Java. Mi sto perdendo qualcosa?

3
@delnan il punto è, anche se usi un'implementazione (immaginaria?) in tempo reale di una VM Java, non aiuta molto se il sistema operativo non può fornirti garanzie in tempo reale.
schlingel,

3
@delnan - La domanda ha falsi presupposti, suggerendo che C ++ è un linguaggio di programmazione in tempo reale.
mouviciel,

7

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

Vecchi standard

Avere problemi a trovare un riferimento per questo, ma sono certo di aver visto standard di sicurezza o consigli di conformità agli standard di sicurezza mettere un divieto generale su Java. Giustamente o erroneamente se devi conformarti a qualcosa che dice che Java è verboten, allora Java è Verboten.

Vecchi ingegneri della sicurezza

Anche se gli standard di cui hai bisogno per lavorare per non vietare Java, lavorare con i revisori di sicurezza / qualità senza esperienza di Java significherà molto che non stai seguendo il percorso di minor resistenza. Tutto ciò che è fuori dall'ordinario per il revisore attirerà probabilmente molte domande che a loro volta significano molto lavoro per te che giustifica le tue scelte.

La comunità

cioè c'è molta dipendenza dal percorso, la maggior parte degli attuali esperti in tempo reale conosceranno a fondo C ++, C o ADA, quindi è una scelta naturale fare un nuovo lavoro.

(nota: ho in qualche modo confuso in tempo reale e sicurezza quanto sopra, che è una specie di altro problema, in quanto anche gli standard di sicurezza spesso confondono i due)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.