Bei meiner Arbeit haben wir kürzlich die Systemarchitektur für eine Steuerungsanwendung fertiggestellt, die eine maximale Latenz von ungefähr ein bis zwei Sekunden hat. Es wird auf kleinen ARM-On-Chip-Boxen verteilt, die über ein IP-LAN kommunizieren.~ 1s Latenzkontroll-App: Ist das für Java geeignet?
Wir erwarten zunächst, dass wir C oder C++ verwenden würden, da es sich um eine klassische Steuersystemsprache handelt. Nachdem wir besprochen haben, wie man die Anwendung implementiert, stellen wir fest, dass C++ eine recht begrenzte Anzahl von Bibliotheken hat, keine Introspektion aufweist und einige andere Eigenschaften aufweist, die die Entwicklung verlangsamen könnten. Mein Kollege schlug dann vor, dass Java für den Job geeignet sein könnte.
Ich habe wirklich Angst vor der Latenz eines GC für eine Control-App, und ich zögere auch, RAII zu löschen, da die App eine Menge externer Ressourcen (Sockets, Datei-Handles, Handles von extern) verwenden wird libs usw.).
Die Pro/con Liste ist zur Zeit wie folgt:
C++
+ RAII - Easy resource management - it will be a complex system
+ System language - speed if we cant't find a JIT VM for our ARM
+ No GC - no big worst case latencies from the GC
+ Easy to integrate with some shared mem libs that we have to interface with
- Fewer free as in beer libs
- Lacks introspection - Mapping classes to DB and external data formats (XML)
would benefit from this (ORM /JAXB) approach
- Easy to shoot one self in the foot - hard and expensive to find programmers
which don't make big mistakes
- Memory fragmentation - needs tuning and workarounds
Java
+ Huge amount of libs
+ Introspection - serialization becomes a breeze (see C++ section)
+ Easier to find 'good enough' programmers
- No RAII - Client has to remember finally or you leak
resources. IMO Java programmers tend to ignore this
problem unless they have server app background.
- No System Language - possibly slower although ARMj could alleviate this
- GC - latency might go up (don't know if parallel GC will work - seems that
you might get fragmentation, see note below).
- Need to write JNI for the shared mem libs that we interface with
- Maybe ORACLE will eat us
Die Speicherfragmentierung mit parallelen GC erwähnt wurde in this AMD article
Ich würde gerne Java verwenden, wenn GC Latenz war kein Problem und wir könnte RAII bekommen. Deshalb habe ich mir auch andere Sprachen angesehen, die RAII haben und als gute Alternativen dienen könnten, und bisher habe ich festgestellt, dass D, Ada, VB, Perl, Python (C), PHP, Tcl und Lua etwas zu haben scheinen Art von Rückruf außerhalb des Bereichs. Meine spontane Reaktion, dass vielleicht D, Python und ADA für eine Control-App geeignet sein könnten. D und ADA sind meine Favoriten.
Also meine Frage ist: Haben Sie irgendwelche Empfehlungen zu diesem Thema? Ist Java eine praktikable Option, und wenn Sie irgendeine Sprache wählen könnten, was wäre es?
@disown: Der GC ist nicht dein einziger Feind. Das JIT-Kick-in kann auch eine Latenz-Spitze mit sich bringen (was in einem Google I/O 2010 zu sehen war, wo das neue Android JIT-Gerät zuerst langsamer als das Nicht-JIT-Gerät war, dann schneller). Ich denke, dass Sie an http://javolution.org interessiert sein können, wo es ziemlich viele interessante Artikel verbindet. – SyntaxT3rr0r
@Webinator: Danke für den Link, schauen Sie es sich jetzt an ... –