[Java] Write once, run anywhere.
-
Hallo zusammen
Funktioniert das Prinzip "Write once, run anywhere" in Java wirklich perfekt oder gibt es auch Situationen wo Programme auf verschiedenen Platformen unterschiedlich laufen?
-
Ja ... aber kein Ja ohne ein aber ...
GUI Oberflächen müssen sich nicht immer so verhalten wie man es aus dem GUI-System der entsprechenden Plattform gewohnt ist.
-
Es gibt einige, wenige Stellen, an denen das Prinzip gebrochen werden kann:
Beispiele:
- Platformabhängiger Code wird über JNI eingebunden. -> aber das ist dann ja eh kein 100%iges Java mehr.
- Für Pfadangaben etc. werden nicht die Mittel von Java genommen, sondern es wird ein Pfad wie "\\blah\\blah\\blab.bla" in den Code geschrieben.
Bei den meisten Programmen, die 100%iges Java nutzen, wirst du aber keine Probleme mit unterschiedlichem Verhalten haben. Es sei denn, du zählst ein "läuft da langsamer als da" oder so dazu.
[ Dieser Beitrag wurde am 11.07.2003 um 17:00 Uhr von Gregor editiert. ]
-
Aber muss auch dazu sagen: Jede Java VM hat (noch) verschiedene Bugs. (Letztens wurden glaube ich 2500 behoben ) Und da kann es schonmal zu Problemen kommen.
-
Original erstellt von <Felix>:
Aber muss auch dazu sagen: Jede Java VM hat (noch) verschiedene Bugs. (Letztens wurden glaube ich 2500 behoben ) Und da kann es schonmal zu Problemen kommen.Nicht jedes Bug von denen ist auch ein Bug in dem Sinne. Im Gegenteil: Die meisten sollen RFEs (Request For Enhancement) gewesen sein. Das kann z.B. das Ausbügeln einer Performanceschwachstelle sein oder ähnliches.
-
Original erstellt von Gregor:
**Bei den meisten Programmen, die 100%iges Java nutzen, wirst du aber keine Probleme mit unterschiedlichem Verhalten haben. Es sei denn, du zählst ein "läuft da langsamer als da" oder so dazu.
**Was sagst Du dazu, daß die VM unter Linux die Prioritäten von Threads ignoriert, dafür aber aufwachenden Threads gleich Rechenzeit gibt.
Unter Windows wird die Priorität beachtet und aufgewachte Threads werde normal in die Queue reingehängt.
-
Original erstellt von Jester:
Was sagst Du dazu, daß die VM unter Linux die Prioritäten von Threads ignoriert, dafür aber aufwachenden Threads gleich Rechenzeit gibt.
Unter Windows wird die Priorität beachtet und aufgewachte Threads werde normal in die Queue reingehängt.Mir sind da noch keine Unterschiede aufgefallen, obwohl ich Threads mit unterschiedlichen Prioritäten benutze. Das Programm verhält sich unter Linux genauso, wie unter Windows.
Zudem gibt es kein von Java garantiertes Verhalten von solchen Threads. Wenn du die eigenarten einer Platform bei der Programmierungs vorausssetzt, dann hat das erstmal nichts mit Java zu tun. Du kannst nur das voraussetzen, was Java dir bietet. Und das wird dann auch eingehalten.
Aber wie schon gesagt: Ich habe da noch keine Probleme bemerkt.
-
Ich hatte da letztes Semester massive Probleme. Es ging allerdings um relativ zeitkritische Sachen, mit einem Thread, der alle 100ms Ausgabe machen sollte und ein paar anderen, die reingefunkt haben. Unter Windows konnte man das mit Prioritäten gut ausgleichen, unter Linux ging das nicht so gut.
Im Endeffekt habe ich dann die Priorität des Kontrollthreads angehoben und wenn er gleich wieder drankommen sollte hab ich ihn minimal kurz schlafen gelegt. Damit hats dann auf beiden Plattformen einigermaßen funktioniert.MfG Jester
-
ab in das Java Forum