PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java 5 - Performance und Vergleich zu C++



miketech
03.07.2004, 03:42
Hi zusammen,

wie sicher einige gelesen haben hat Sun Java in der Version 1.5 angekündigt, neuerdings als Java 5 bezeichnet. In den Artikeln heißt es, dass Java teilweise um das 30-fache an Performance zugelegt hat und offensichtlich steht auch der Desktop nun etwas mehr im Blickfeld. Mittels verschiedener Projekte soll es nun möglich sein Anwendungen z.B. in den SysTray verstecken zu können und auch der Standard E-Mail Client und der Standard Webbrowser soll direkt von Java-Anwendungen heraus aufgerufen werden können.

Desweiteren gab es auch sonst einiges von Sun und Java zu hören: So plant Sun sowohl einen verstärkten Einsatz von Java auf Handies (Handyspiele usw.) und auch im Automobilsektor soll Java seinen Einsatz finden. Ebenso ist von Echtzeit-Java die Rede, um zeitkritische Applikationen schreiben zu können.

Im Großen und Ganzen lassen die News der letzten Tage Java in einem sehr guten Licht erscheinen, auch wenn sich Sun bisher immer noch nicht bereiterklärt hat Java Open Source zu stellen. Hierauf möchte ich aber in diesem Thread nicht weiter eingehen.

Hat denn einer von Euch mal Java 5 getestet? Ist eine Performanceverbesserung spürbar?

Kommen wir zum Linux/Unix - Desktop: Große DEs wie z.B. Gnome oder KDE sind hauptsächlich in C/C++ geschrieben. Auch die Anwendungen, die auf GTK oder Qt setzen werden größtenteils mit C/C++ programmiert, obwohl es auch Bindings für Java, Python usw. gibt. Wird Java nun zu einem ernstzunehmenden Konkurrenten für C/C++ für Desktop-Applications? Wäre es vorstellbar, dass man unter KDE oder Gnome in Zukunft wesentlich mehr Java-Anwendungen findet?

Oder glaubt Ihr, dass sich Java auf dem Desktop in absehbarer Zeit nicht gut genug in die jeweilige Desktopumgebung integrieren wird und weiterhin GTK unter Gnome und Qt unter KDE mit C/C++ die Hauptrolle spielen werden?

Für plattformunabhängige Anwendungen gilt Java bekanntlich immer als erste Wahl, da Java grundsätzlich mit Plattformunabhängigkeit assoziiert wird. Jedoch ist es auch mit wxWidget oder Qt möglich, plattformunabhängig zu programmieren. Java bietet eine Möglichkeit Closed-Source kostenlos zu programmieren (auch wenn der Code sehr gut decompiled werden kann), während Qt nur für GPL-Software kostenlos zur Verfügung steht.

Sollte Java tatsächlich an Geschwindigkeit zugelegt haben, wird Java eventuell noch zusätzlich in zeitaufwändigen Bereichen interessant. Früher war immer die langsame Ausführungsgeschwindigkeit von Java ein Argument gegen Java. Schon in den letzten Versionen hat sich hier jedoch einiges getan, Swing ist jedoch bekanntlich immer noch sehr träge.

Was meint Ihr, wie die Chancen für Java stehen? Sind hier C/C++ Entwickler, die sich überlegen auf Java umzusteigen? Wenn ja, wieso? Oder gibt es insbesondere C/C++ Entwickler, die mit Qt plattformunabhängig programmieren, jedoch in Zukunft mit Java programmieren oder umgekehrt?

Würde mich über ein paar Meinungen zu diesem Thema freuen

Gruß

Mike

hehejo
03.07.2004, 10:44
Hm ich weiß nicht. Mich hat die "Lahmheit" noch nie gestört. Gut die Programme starten etwas langsamer, aber meine Güte, diese 2 Sekunden!
In der Arbeit arbeite ich mit MFC und C++ aber privat hatte ich Java auch schon in den Finger. Java gefällt mir sehr gut und wenn ich mal selbst was größeres Programmieren werde, dann ohne Frage mit Java.
Warum? In Java ist schon alles schön im Grundsprachschatz dabei. Strings, Grafik, Netz ....
Außerdem "zwingt" mich Java ordentlich zu programmieren. Viele "try...catch"s und so.
UND es läuft auch auf dem Windowsrechner von meinem Freund :-)

Gut das alles würde ich auch mit .net hinkriegen - aber das ist von MS...

Lord Kefir
03.07.2004, 10:49
Mich reizt vor allem die Plattformunabhängigkeit bei Java - allerdings (wie bereits erwähnt) gibt es ja bei C/C++ auch Qt und Co.. zur Zeit sehe ich bei mir einfach keinen Bedarf, Java zu lernen, weil ich mit C/C++ sehr gut bedient bin. Ich wüsste keinen Grund, warum ich jetzt noch umsteigen sollte. Wozu Java lernen, wenn man C/C++ kann?

Mfg, Lord Kefir

HangLoose
03.07.2004, 10:49
moin moin

ich mache zur zeit meine ersten gehversuche mit QT und bin ziemlich begeistert. wobei mir java auch gefällt. die neue version habe ich allerdings noch nicht getestet.


Gruß HL

miketech
03.07.2004, 10:50
Hi,

@hehejo: Und was spricht gegen C++ in Verbindung mit Qt? Da hast Du auch alles: Strings, Sockets, usw. Und die Anwendungen lassen sich auch unter Windows in Verbindung mit einem C++ Compiler für Win und den entsprechenden Qt-Libs für Win kompilieren.

Gruß

Mike

miketech
03.07.2004, 10:55
Derzeit sind Java-Anwendungen mit Swing unter z.B. KDE nicht sonderlich hübsch (ok, mit JGoodies lässt sich da was drehen) und unter Linux generell etwas langsam. Außerdem lassen sich die Anwendungen einfach schlecht in ein Desktop Environment wie KDE oder Gnome integrieren. (Anderes Look and Feel, Drag & Drop, SysTray, usw). Meint Ihr das wird sich irgendwann so ändern, dass man integrierte KDE Anwendungen mit Java schreiben kann? Oder sollte man, wenn man wirklich als Ziel hat eine KDE Anwendung zu schreiben lieber auf Qt zurückgreifen? Gilt das auch für die Zukunft?

Gruß

Mike

daniel.h
03.07.2004, 11:00
Also... Ich habe vor einiger Zeit ein wenig mit Java gespielt, ich war von der festen, großen Standard Library begeistert!
Eigentlich habe ich ja bis dato nur C++ programmiert, ich fande Java auch ein Stück weit leichter als C++ und die Möglichkeiten damit Objekt Orientiert zu programmieren sind auch sehr gut!
Aber ich habe wieder zu C++ zurück gefunden, bis heute, ich überlege mir jetzt wieder ein bisschen was mit Java zu machen.

miketech
03.07.2004, 11:05
Und wieso? Wenn Du Java doch so super fandest? Was hat Dir dann an C besser gefallen? Nutzt Du auch Qt oder programmierst Du mit der STL?

Gruß

Mike

thorus
03.07.2004, 11:23
Java ist eine tolle Programmiersprache, keine Frage. Aber irgendwann wird dieser Hype vorbei sein.

Und dann sehe ich Python als den Successor von Java.
Warum? Extrem leichte und einpräsame Syntax, schnelle Entwicklungszeit (man schreibt fast seine Gedanken direkt auf), große Standard-Library, plattformunabhängigkeit und nicht zu vergessen schon eine relativ große Community (Google setzt z.B. auch Python ein).
Python ist zur Zeit noch viel langsamer als Java, aber durch neue Entwicklungen, wie etwa Parrot oder Psyco, könnte es bald anders aussehen.

daniel.h
03.07.2004, 11:31
Und wieso? Wenn Du Java doch so super fandest? Was hat Dir dann an C besser gefallen? Nutzt Du auch Qt oder programmierst Du mit der STL?

Gruß

Mike
Ich hab mit GUI programmierung noch nix am Hut ;)
Warum ich dahmals wieder zu C++ bin weiß ich auch nicht mehr so recht :)



Java ist eine tolle Programmiersprache, keine Frage. Aber irgendwann wird dieser Hype vorbei sein.

Und dann sehe ich Python als den Successor von Java.
Warum? Extrem leichte und einpräsame Syntax, schnelle Entwicklungszeit (man schreibt fast seine Gedanken direkt auf), große Standard-Library, plattformunabhängigkeit und nicht zu vergessen schon eine relativ große Community (Google setzt z.B. auch Python ein).
Python ist zur Zeit noch viel langsamer als Java, aber durch neue Entwicklungen, wie etwa Parrot oder Psyco, könnte es bald anders aussehen.


Kann man mit Python auch Objekt Orientiert programmieren ?
Wenn ja, hättest du ein paar gute links das ich mir das ein wenig genauer angucken kann? :)

sphreak
03.07.2004, 11:32
Einen guten Programmierer zeichnet meine Meinung nach aus, dass er nicht nur eine Sprache beherrscht. Wieso sollten nicht beide nebeneinander leben wie es zurzeit der Fall ist?
Vorteil von C/C++ ist auf jedenfall, dass in der Vergangenheit damit programmiert wurde und somit sowieso erstmal nicht so schnell los wird.

hehejo
03.07.2004, 11:57
Kann man mit Python auch Objekt Orientiert programmieren ?
Wenn ja, hättest du ein paar gute links das ich mir das ein wenig genauer angucken kann? :)
Python ist put objektorientiert!
Hier http://www.hehejo.de/python/ findest du mein Referat über Python.

Ich selbst wollte viel mit Python anstellen, aber ich wusste dann nicht, was ich damit machen sollte? Im Moment schau ich mir grad Perl an..

Ich bin so unentschlossen. Von allem ein bisschen aber nichts richtig!

Links: www.python.org
www.pythonmania.de

miketech
03.07.2004, 11:58
Hi

@ogbgroup: Qt hat nicht zwingend etwas mit GUI zu tun. Ab Qt 4 wird man eine Trennung zwischen den Standard-Libs und den GUI-Libs vorfinden. D.h. Du kannst mit Qt auch Serveranwendungen oder simple Konsolenanwendungen schreiben. Du benutzt eben nur die Libs von Qt für Sockets, Strings, SQL usw. Ähnlich wie die STL.

Python unterstützt auch objektorientiertes Programmieren. Google spuckt eine ganze Menge zu Python aus

z.B.: http://www.kubieziel.de/moin.cgi/DeutschePythonFAQ

@sphreak: Sicherlich sollte man mehr als nur eine Programmiersprache beherrschen. Allerdings haben Java und C++ teilweise ähnliche Einsatzbereiche, weshalb ich es interessant finde zu erfahren, wer bei diesen gemeinsamen Einsatzgebieten (Serverapps, GUI usw.) auf welche Sprache setzt und für weshalb. Beides hat selbstverständlich seine Daseinsberechtigung, das steht außer Frage. Jedoch werden die meisten einen Schwerpunkt haben und eine Sprache bevorzugen und wenn es nur ein rein persönliches "Finde ich schöner" ist. :)

Gruß

Mike

miketech
03.07.2004, 12:05
@hehejo: Ja diese Unentschlossenheit kenne nur zu gut. Dieser Thread spiegelt auch meine persönliche Unentschlossenheit zwischen C und Java wieder.

Zu Python: Vor ca. einer Woche habe ich mir auch überlegt, dass ich mal eine Scriptsprache, wie Python, Perl, Ruby oder sonstwas lernen könnte, da man hier doch die Möglichkeit hat mal schnell ein kleines Script zu schreiben, um ein paar kleine Verwaltungsarbeiten auf seinem System vorzunehmen. Schnell habe ich aber gemerkt, dass man mit Python, Perl und Co noch viel mehr machen kann :) Habe mir dann alles mal angeschaut und bin zu dem Schluss gekommen:

Perl ist mir zu strange. Die Syntax ist grauenvoll und einmal etwas damit programmiert, lässt man es lieber so, wie es ist und fasst es nie mehr an :)

Python war am Ende mein Favourit, obwohl mir alles nicht so sonderlich gut gefallen hat. Ich fand die Syntax teilweise sehr eigenartig. Klingt komisch, aber ich finde es sehr angenehm, mit {} und ; am Ende zu programmieren :)

Fazit war, dass ich die ganze Thematik erstmal wieder auf Eis gelegt habe. Sollte ich jedoch trotzdem mal eine Scriptsprache benötigen, die mir mehr als ein Bash-Script bieten soll, würde ich auf Python zurückgreifen.


Gruß

Mike

hehejo
03.07.2004, 12:13
Mit deinem Exkurs über die Skriptsprachen hast du mir fast aus die Worte aus dem Munde genommen.
Auch wenn Perl "strange" ist. Ein cooler Faktor ist das doch schon.
Und du musst bedenken, jemand der nicht von der C/C++/Java Linie kommt kennt diese "affigen" {} und ; Sachen gar nicht. Ich denke jetzt an Basic und VB (*würg*).
Für "Neulinge" ist es logischer Blöcke einzurücken als Klammern zu verwenden. Außerdem schreibt sich der Code "schneller"!

miketech
03.07.2004, 12:23
Richtig, für Neulinge vielleicht besser. Aber jetzt hab ich mich über die Jahre so mühselig an die Klammern gewöhnt, jetzt möchte ich sie auch behalten. :) Python hat eben diesen typischen VB Code Charakter. Alles, was in einer Zeile steht ist ein Anweisung. Semikolon braucht man nicht, wenn man nicht mehrere Anweisugen pro Zeile schreiben möchte. Irgendwie.. naja :)

Zu Perl: Ja ok, sicher hat es was, aber ich weiß nicht, ob das nicht zuviel Zeit und Nerven kostet. Man möchte ja schließlich auch produktiv arbeiten und eventuell später noch seine Programme erweitern und das ist mit Perl angeblich nicht so leicht. Und ich finde, dass Python im Coolness-Faktor nicht unter Perl liegt ;)

Mike

etuli
03.07.2004, 12:40
Python wird nicht Java abloesen. Python ist immerhin keine unbekannte Sprache, und die gibt es nicht erst seit gestern. Java hat durch den Boom gezeigt, dass Java in dieser Hinsicht mehr Potenzial hat als Python. Wobei man dazusagen muss, dass Python halt nicht von einem Unternehmen wie Sun vorangetrieben wird. Das wiederrum wird Java aber am Leben halten ueber laengeren Zeitraum.

Ruby wuerde vom Potenzial am ehesten mit Java mithalten koennen. Aber trotzdem wohl immer im Hintergrund stehen. Allein die Anzahl an CASE Werkzeugen fuer Java ist so enorm viel groesser, dass dies schon viele Entwickler zwingt in Java zu Entwickeln.

C++ und Java ... . Muss jeder selbst wissen. Jede Sprache hat seine Vorteile. Die von C++ wird sicher noch in unabsehbare Zeit der Performance bleiben.

C wird seine Position schon deshalb behalten, weil es die effiziente strukturiert, prozeduale Programmierung verkoerpert, welche nunmal schnelleren Code produziert als die Objektorientierte ... jedoch auch "schlechtere" Software.

Die Umfrage ist uebrigens ziemlich unsinnig. Ich hab auch schon Software unter Windows ueber die WinAPI und unter Linux ueber das GTK geschrieben. Ueber die libSDL OS Unabahaengig und ueber die GTK selbst ist das auch moeglich. Siehe etwas "Dia".

QT muss es in dieser Hinsicht wirklich nicht sein. Besonders Lizenztechnisch. Da gibt es bessere Alternativen!

mfg

ExRevel
03.07.2004, 13:32
Also ich programmiere sowohl Java als auch C++ und ich denke das Java ganz eindeutig seine Berechtigung hat und das Python es sicher nicht so schnell, oder besser das Python es überhaupt einmal ablösen wird. Java ist Performancemaessig auf knapp 75% der C Geschwindig gerutscht und wie ihr vllt. gelesen habt auch im Echtzeiteinsatz zu finden. Das wird wohl bei Python noch eine sehr lange Zeit dauern.

Designtechnisch kann man sehr viel aus Java rauschholen, da kann C++ nicht ganz mithalten, daher denke ich das Java auch bald für C++ ein bisschen gefaehrlich werden kann.

@Mike... du hast noch nie Perl programmiert gell? Ich meine net mal n Script geschrieben, sondern echt Perl programmiert. Ich habe das 4 Jahre gemacht und ich sage dir das was du redest ist Brot. Entschuldige meine Ausdrucksweise, aber du stichelst hier in dem Thread ganz schön rum und wir wollen doch alle kein geflame sondern nur brav diskutieren gell.

ciao Exi

miketech
03.07.2004, 13:41
Hi ExRevel,

meine Erfahrungen mit Perl waren minimal, das stimmt. Ich gebe hier nur das wieder, was ich selbst erfahren, gehört oder gelesen habe. Es ist nicht meine Absicht gezielt Perl niederzumachen, es ist nur das, was ich über Perl kenne. Ich lasse mich aber natürlich gerne etwas Besseren belehren. Korrigiere mich also, wenn ich falsch liege, damit das Brot nicht noch weiter aufgeht ;)

Zum eigentlichen Java/C++ Thema: Im Bereich Serveranwendungen stimme ich Dir zu. Aber wie siehst Du Java im Linux-Desktopbereich?

@etuli:

Ja richtig, ich habe jetzt nicht alles aufgezählt, was es so gibt, sondern mich auf das Thema Qt beschränkt, da es meiner Meinung nach die meisten Möglichkeiten für plattformunabhängiges Programmieren liefert, da auch Libs für Socket, SQL usw. vorhanden sind, was z.B. bei GTK und wxWidget meiner Erfahrung nach nicht so ausgeprägt oder überhaupt nicht der Fall ist.

Gruß

Mike

daniel.h
03.07.2004, 13:51
Hmmm bei dieser ganzen Java | C++ diskussion wurde bis jetzt eines außer acht gelassen, C#.
C# wird wohl den Markt was Microsoft belangt von C++ ablösen.

h2owasser
03.07.2004, 13:58
Designtechnisch kann man sehr viel aus Java rauschholen, da kann C++ nicht ganz mithalten, daher denke ich das Java auch bald für C++ ein bisschen gefaehrlich werden kann.


Kannst du mir dafür mal ein Beispiel nennen ?

In sehe aktuell C(++) immernoch für die universellste Sprache, die nur nach unten durch Assembler und oben durch Java, Php, und was weis ich (web) begrenzt wird. Aber selbst da läßt sich C(++) zum Teil hinbringen.

miketech
03.07.2004, 13:59
Hi,

naja C# ist ja eher die Reaktion von Microsoft auf Java. Ich denke, dass C# auf Windowsplattformen eine echte Chance hat. Microsoft wird .NET von Haus aus mitliefern (keine zusätzliche Installation einer VM nötig, wie bei Java) und C# bietet alle Funktionen, die man für Windowsprogrammierung benötigt. Hier müssen auch keine Einschränkungen gemacht werden, da C# nicht als plattformunabhängige Sprache von Microsoft geplant war. Auf Linux/Unix sehe ich für C# jedoch einen noch schweren Weg, es seidenn die Windowsprogramme sollen auch unter Linux/Unix laufen.

Insgesamt bin ich jedoch der Meinung: Wenn schon sowas wie Java und C#, dann Java.

Gruß

Mike

Locke
03.07.2004, 13:59
Java dürfte zum teil C++ in Sachen performance schlagen. Die VM is recht gut optimiert und wird gut weiterentwickelt, des weiteren is das Objektmodell in Java wesentlich schlanker. Bin mal gespannt wie das mit 1.5 aussieht.

h2owasser
03.07.2004, 14:04
Java dürfte zum teil C++ in Sachen performance schlagen. Die VM is recht gut optimiert und wird gut weiterentwickelt, des weiteren is das Objektmodell in Java wesentlich schlanker. Bin mal gespannt wie das mit 1.5 aussieht.

Das kann ich irgendwie nicht glauben. Wie soll Code, die interpretiert wird, schneller sein als direkt compilierter Code. d.h. guter Code muss in C++ doch schneller sein, oder wo ist mein Denkfehler ?

miketech
03.07.2004, 14:12
Hi h2owasser,

die Java VM kompiliert den Code ja vor Ort (JIT) und passt Ihn optimal auf die darunterliegende Plattform an. Wenn also der C++ Code nicht auf die Plattform optimiert kompiliert wurde kann es sogar sein, dass das Java-Programm in der Ausführung etwas schneller ist.

Gruß

Mike

miketech
03.07.2004, 14:16
Ergänzung: Das würde natürlich bedeuten, dass man in Java lediglich bei GUIs in der Performance noch hinterherhängt (wer weiß, wie das bei Java 5 aussieht) und sonst nur in den Möglichkeiten, die eine Sprache, wie Java nicht bieten kann. Denn Java kann nicht alles bieten, was eine Sprache, wie C++ zur Verfügung stellt, wenn für eine Plattform entwickelt wird. Denn dann stehen mir außerdem Dinge wie Prozesssteuerung, Dateisystemoperationen (Rechteverwaltung usw.) zur Verfügung, die mit Java nicht möglich sind, da hier darauf geachtet werden muss, dass nur die Operationen implementiert werden, die auf allen unterstützten Plattformen zur Verfügung stehen.

Gruß

Mike

etuli
03.07.2004, 14:46
die Java VM kompiliert den Code ja vor Ort (JIT) und passt Ihn optimal auf die darunterliegende Plattform an. Wenn also der C++ Code nicht auf die Plattform optimiert kompiliert wurde kann es sogar sein, dass das Java-Programm in der Ausführung etwas schneller ist.

Die Java VM ist aber selbst nicht optimal an das System angepasst. Das heisst, egal wie gut der Java Code optimiert wurde, die VM wird ihn nicht besser ausfuehren, als sie selbst optimiert wurde.

Und mal angenommen die VM ompiliert den Code Just in Time vor Ort. Wie lange dauert es dann etwa OpenOffice zu starten? DIe kompilierung in C++ dauert auf schnellen System um die 8 Stunden.

Java ist nicht schneller als C++.

miketech
03.07.2004, 15:08
Der Start von Anwendungen dauert ja generell länger, da die VM erst gestartet werden muss. Aber sonst ergeben Deine Argumente natürlich schon Sinn, da das Kompilieren ja auch Zeit braucht. Demnach kann eine interpretierte Sprache ja nie schneller sein, als eine Binary oder?

Gruß

Mike

etuli
03.07.2004, 15:23
Demnach kann eine interpretierte Sprache ja nie schneller sein, als eine Binary oder?
Eine Binaerre Sprache wird direkt vom Prozessor abgearbeitet. Eine Interpretierte Sprache, ob in Byte-Code, oder nicht, wird selbst wieder von einem Programm abgearbeitet, welches wiederrum Binaer abgearbeitet wird.

Es kann sicher Beispiele geben, wo die VM anderen Code eventuell effizienter ausfuehrt, als Binaer optimierter Code. Aber stellen diese dann Ausnahmeerscheinungen dar.

mfg

ExRevel
03.07.2004, 15:28
@h2owasser... ich persoenlich finde das die oo syntax von java wesentlich ausgereifter ist, auch das ganze oo-model. Dadurch das Java so neu ist konnte es von den Fehlern die bei anderen OO-Sprachen evtl. gemacht wurden nur profitieren. Leute die Eiffel schreiben sagen das ueber die sprache nix ruebergeht, aber ich habe nie damit programmiert und so ist fuer mich Java schon das optimum an OOP. Sachen wie mehrfachvererbung die probleme buergen gibt es nicht, das wurde "geschickter" geregelt. Der ganze Klassenaufbau ist ganz nett, wenn er auch auf den einsteiger verwirrend wirkt, dennoch kann man eine klassenreferenz im internet anschaun, zu C++ gibt es nur sehr wenige kompetente homepages.

Ich muss ja nun auch gestehen das ich den Server meines Projekts in C++ und nicht in Java schreibe weil ich ein bissal sorge habe das ich aus dem Performanceloch von Perl sonst net rauskomme, wobei die Angst sicher unbegruendet ist, da ich nicht dauernd Stringhandling brauche, wo javas "schwaeche" liegt.

hehejo
03.07.2004, 15:29
Und mal angenommen die VM ompiliert den Code Just in Time vor Ort. Wie lange dauert es dann etwa OpenOffice zu starten? DIe kompilierung in C++ dauert auf schnellen System um die 8 Stunden.
ABER: Es wird ja nicht der Java-Sourcecode kompiliert sondern nur der Bytecode. Sonst wäre das wohl alles unzumutbar :)

Locke
03.07.2004, 15:31
ihr solltet mal mehr über compiler lesen beziehungsweise damit arbeiten.
die vm kann mies optimiert sein, solange sie maschinenspezifisch optimalen code aus dem bytecode umsetzt ist die optimierung der vm irrelevant.
des weiteren kann ein compiler nur statische informationen im compileprozess verwenden, er kann nicht anhand von laufzeitprofilen code optimieren, lediglich kleine profiles sind möglich. eine vm kann jederzeit den code umstrukturieren und damit einige branches besser auslasten.
code optimierung ist kein einfaches feld, lediglich den code in asm umzusetzen is es nicht, zb loop unrolling oder data prefetching sind felder in denen eine vm wesentlich besser optimieren kann.
natürlich kostet das profiling in runtime sowie das echtzeitübersetzen und ausführen zeit, aber durch gute optimierungen kann dies durch den optimierungsgewinn wieder aufgefangen werden.

h2owasser
03.07.2004, 15:46
@Locke. Cool, klingt einleuchtend. Den Faktor hab ich so nicht gesehen. Dann kann aber C/C++/C#(Mono) wirklich alles... haha *g*... Na, solange ich mich mit (einfachen) grafischen Simulationen befasse und diese noch schnell genug sind, bleib ich erstmal bei C++. - Bin ja kein Informatiker.

miketech
03.07.2004, 16:10
Also verstehe ich das richtig, dass der Vorteil der VM darin liegt, dass sie den Code "intelligent" verwalten kann?

Vielleicht eine blöde Frage, aber kann der Betriebssystemkern dann nicht ähnlich mit Binaries umgehen?

Wenn also eine VM den Code dadurch noch zusätzlich optimieren kann, sollte doch der Kernel auch in der Lage sein, dies mit Binaries zu tun oder?

Kann es möglich sein, dass eine VM immer schneller Byte-Code ausführt als der Kernel das Binary? Theoretisch müsste doch die Binary in allen Bereichen immer genauso schnell oder schneller sein können.

Gruß

Mike

miketech
03.07.2004, 16:12
@ExRevel:

Das hört sich so an, als ob Du Java immer C++ vorziehen würdest, wenn sich die Anwendungszwecke von Java und C++ decken?

Gruß

Mike

etuli
03.07.2004, 16:16
ihr solltet mal mehr über compiler lesen beziehungsweise damit arbeiten.
die vm kann mies optimiert sein, solange sie maschinenspezifisch optimalen code aus dem bytecode umsetzt ist die optimierung der vm irrelevant.
des weiteren kann ein compiler nur statische informationen im compileprozess verwenden, er kann nicht anhand von laufzeitprofilen code optimieren, lediglich kleine profiles sind möglich. eine vm kann jederzeit den code umstrukturieren und damit einige branches besser auslasten.
code optimierung ist kein einfaches feld, lediglich den code in asm umzusetzen is es nicht, zb loop unrolling oder data prefetching sind felder in denen eine vm wesentlich besser optimieren kann.
natürlich kostet das profiling in runtime sowie das echtzeitübersetzen und ausführen zeit, aber durch gute optimierungen kann dies durch den optimierungsgewinn wieder aufgefangen werden.

Stimmt ja (fast) alles, was du sagst. Aber die effizienz steht relativ zu interpretierten Ausfuehrung. Nicht einer Kompilierten. Die Kompilierung von Code wird in einer VM fuer gewoehnlich danach entschieden, ob es sich lohnt den Code interpretiert auszufuehren, oder ihn zu kompilieren. In diesem Kontext wird dann ueber den Grad der Optimierung entschieden.

Bei der kompilierung eines Programms in C++ spielen solche Ueberlegungen hingegen keine Rolle. Es wird vorausgesetzt, dass die Kompilierung des Gesamten den Nutzen des Aufwands spaeter in der Ausfuehrung abwiegt.

Optimierung einer VM fuer etwa Java kannst du demnach nicht mit einer voll-kompilierten Sprache wie C++ vergleichen. Das kannst du mit anderen Sprachen machen, wie etwa Perl, oder PHP, welche ebenfalls interpretiert werden.

Also: Die VM kompiliert, wenn sie auf Grund einer "Kosten-Nutzen-Rechnung" meint, dies wuerde effizienter sein, als eventuell mehrmals Byte-Code zu interpretieren. Da C++ aber immer kompiliert und optimiert wird, und sich die Frage nach interpretation nicht stellt, kann man eine VM nicht mit einer voll-kompilierten Sprache vergleichen.

mfg

Locke
03.07.2004, 16:27
klar hinkt der vergleich. aber compilieren heisst nicht automatisch den bestoptimierten code zu erhalten, da der compiler nicht weiss, wie das programm später genutzt wird, er kann nur anhand des codes entscheiden und heuristiken verwenden. zb is vektorisierung und parallelisierung recht schwierig im compiler optimal zu lösen, da liegen eher die stärken von vms. daten im cache zu halten anhand ihre nutzung is wesentlich effizienter als einfach mal alle kleinen funktionen in den cache zu kloppen und arrays zu prefetchen, genau das macht aber dein statischer compiler, er kanns auch net anders, er weiss ja nicht was davon wie oft und wann genutzt wird.
genausowenig kann er nicht alles was nur readonly zugegriffen wird als statisch annehmen sondern muss skalarisieren. sowas kostet performance. und ja die vm interpretiert meisst und entscheidet nur bei bestimmter last den jit anzuschmeissen, was aber nicht heisst dass diese methodik soviel lahmer sein muss. konzeptionell wird da noch einiges kommen. statische compiler haben ihre stärken in statischem code, mit möglichst wenig conditionals, während vms auf laufzeitverhalten wesentlich besser reagieren können. in der praxis tun sie das nicht immer, die jvm is auch nicht der weisheit letzter schluss, aber schon recht gutes stück code.

ma-games
05.07.2004, 13:45
Ich werd mir die Java-Version 5 mal holen wenn sie komplett fertig ist. Mal sehn ob ich dann einen Performnce-Vorteil zu den älteren Version festellen kann. Weil bis zu 30 mal schneller wie es angekündigt wurde? Das müsste man dann eigentlich merken!

etuli
05.07.2004, 18:50
konzeptionell wird da noch einiges kommen.

Ich bin weder ein VM Entwickler, noch ein Compiler Entwickler, weshalb ich als Nutzer nur den aktuellen Zahn der Zeit betrachte. Es wird noch vieles kommen. Streite ich auch nicht ab. Aber es ist noch nicht da und ob die heutigen Ansaetze dann spaeter noch eine Aehnlichkeit zu den dann aktuellen Umsetzungen kennen werden, wage ich zu bezweifeln. ;o)

mfg

ExRevel
05.07.2004, 19:10
@miketech, naja, Java ist die komfortablere Sprache und wenn ich nicht grad wie ein dummer meinen Source tunen muss (was meiner Meinung nach mit C++ natuerlich noch besser geht als mit Java), dann ziehe ich Java vor, ja!

avaurus
20.09.2004, 20:13
Java ist eine tolle Programmiersprache, keine Frage. Aber irgendwann wird dieser Hype vorbei sein.

Und dann sehe ich Python als den Successor von Java.
Warum? Extrem leichte und einpräsame Syntax, schnelle Entwicklungszeit (man schreibt fast seine Gedanken direkt auf), große Standard-Library, plattformunabhängigkeit und nicht zu vergessen schon eine relativ große Community (Google setzt z.B. auch Python ein).
Python ist zur Zeit noch viel langsamer als Java, aber durch neue Entwicklungen, wie etwa Parrot oder Psyco, könnte es bald anders aussehen.
hast du etwa dieses lächerliche Werbevideo von Python gesehen? Scheint ja fast so, denn da wurde genau das so erwähnt, nur viel übertriebener...
Ich für meinen Teil bin von Java auch begeistert...gute Sache, ohne einen Grund zu nennen.

pinky
21.09.2004, 00:14
dann will ich auch mal was dazu schreiben.

Also solange ich konsolen programme schreibe verwende ich ansi-C oder scheme (das ist beides auch Plattformunabhängig).
Wenn ich eine GUI brauche verwende ich C++ mit Qt.

Zu java:
Java war für mich nie eine alternative, erstens wegen der Lizenz und zweitens wegen dem Syntax(dem ich absolut nichts abgewinnen kann).
Bei der Plattformunabhängigkeit, halte ich es wie Stroustrup:
"Java isn't platform independent; it is a platform. Like Windows, it is a proprietary commercial platform. That is, you can write programs for Windows/Intel or Java/JVM, and in each case you are writing code for a platform owned by a single corporation and tweaked for the commercial benefit of that corporation."

Bei Java, läufst du derzeit um ein Minenfeld, wenn du willst das dein Programm später auch auf einem Freien System funktioniert.

Wenn man unbedingt eine Sprache braucht die auf einer VM läuft, dann denke ich wird C# die Zukunft gehören. Warum?
Wenn MS mit .NET und C# ernst macht ist es keine Frage das sich das in der windows Welt durchsetzen wird. Unter Freien Systemen wie GNU/Linux wird Mono sehr schnell und angagiert von Novell entwickelt. Ich denke Mono ist heute schon mind. eine so komplette .NET implementierung wie die Freien java-vms im vergleich zu sun-java. Und Mono wird sich da in Zukunft noch besser absetzen können, da einfach die Entwicklungspower einer Firma dahinter steht. Ich denke die Chancen stehen gut das .NET und Mono die Zukunft gehört und nicht Java.

avaurus
21.09.2004, 12:52
naja, haste denn die Meinungen zu Mono hier auf dem Board nicht gelesen? - Danach kannste dich gerne korrigieren :).

pinky
21.09.2004, 15:05
naja, haste denn die Meinungen zu Mono hier auf dem Board nicht gelesen? - Danach kannste dich gerne korrigieren :).

Meinst du das hier: http://www.unixboard.de/vb3/showthread.php?t=9104

Warum soll ich deswegen meine Meinung ändern?
Das Hauptargument ist dabei MS und dieses (leider oft typische) anti-MS Stimmung, dabei vergisst man das Java auch einer Firma gehört die nicht gerade offen mit java umgeht.
Wegen den Patenten usw. sollte man mal das lesen[1].
Ausserdem denke ich könnte java ganz schnell Mono das Wasser unter freien Systemen abgraben, wenn sie wollten. Sie müssten nur eine vollständige und freie Referenzimplementierung veröffentlichen. Man muß leider auch sagen dass die Politik von sun erst eine Entwicklung wie .NET und Mono nötig und indirekt auch voran getrieben hat.


[1] http://www.mono-project.com/about/licensing.html

oenone
21.09.2004, 18:32
@pinky: schon mitbekommen, dass java open source ist ?

auf bald
oenone

pinky
21.09.2004, 18:37
@pinky: schon mitbekommen, dass java open source ist ?



kaffe, gcj, sablevm,... ja. Aber nicht die Java Referenz für die 99% aller Java Programme geschrieben werden -> sun java.

avaurus
21.09.2004, 18:42
ja, genau und man wird sich an der Referenz orientieren. Ich zumindest würde das machen...damit ich auf der "sicheren" Seite stehe, aber bei dir ist Java ja anscheinend eine nicht sehr sichere Sache, wenn man die Zukunft betrachtet. Also ein bisschen paranoid bin ich ja auch, aber ich finde doch, dass man nicht zu weit gehen sollte.
Ok, deine Meinung ist ja auch gerechtfertigt. Wenn Java OpenSource wäre, hat man zwar die Sicherheit, dass man Java in einem bestimmtem Zustand immer so nutzen kann, aber auch OpenSource birgt Gefahren. Man möge nur daran denken, was passiert, wenn es auf einmal 2 Java Standards gibt...also das wäre nicht wirklich von Vorteil. Und indem Sun die Quellen von Java nicht offen legt, verhindern sie, dass ihr Standard von Fremden verändert wird. SUN hat die Hand über den Standard und ich persönlich finde das gut.

pinky
21.09.2004, 19:01
Man möge nur daran denken, was passiert, wenn es auf einmal 2 Java Standards gibt...also das wäre nicht wirklich von Vorteil.

Das ist so das typische sun Argument das man immer wieder hört, aber bei genauerer Betrachtung absolut haltlos ist.

1. Es gibt komplette C, C++, lisp, ada, scheme, perl,... Kompiler und Interpreten, hat das die Sprachen gespalten? Nein!
2. Ausserdem könnte man sich auch den Namen java schützen und ein Testsuite anbieten, jede VM von einem Drittanbieter muß diesen Test bestehen um sich java nennen zu dürfen, sowas gibt es z.B. für Ada95 Kompiler. Ein Ada95 Kompiler darf sich erst Ada95 Kompiler nennen wenn er den Test bestanden hat.
3. Macht es keinen Unterschied ob die Referenzimplementierung Frei ist oder nicht. Auch jetzt gibt es verschiedene java Kompiler und VMs die unterschiedlich gut den Standard abdecken.
4.Eine Freie Referenzimplementierung würde diese Splitter VMs und Kompiler auf einen Schlag unnötig machen oder zumindest dazu beitragen das sie keine 90% Umsetzung von Java sondern eine 100% Umsetzung sind.

avaurus
21.09.2004, 19:50
Das ist so das typische sun Argument das man immer wieder hört,
ja, genau, oft gelesen und gehört...
Punkt 2 ist aber eine gute Idee...

oenone
21.09.2004, 23:13
@pinky: nein, die offizielle sun version des SDK ist seit neuestem open source.

auf bald
oenone

miketech
21.09.2004, 23:22
Hi,

also das ist mir nun neu. Wo steht das? Ich weiß, dass Sun ein paar Ihrer Java-Ergänzungen Open Source gemacht hat, aber sie haben sich doch stets geweigert Java selbst freizugeben.

Mike

pinky
21.09.2004, 23:35
@pinky: nein, die offizielle sun version des SDK ist seit neuestem open source.


das wüsste ich doch gerne mal genauer, bzw. ein link der das bestätigt.

oenone
21.09.2004, 23:50
http://wwws.sun.com/software/communitysource/j2se/java2/index.html

auf bald
oenone

pinky
22.09.2004, 00:02
http://wwws.sun.com/software/communitysource/j2se/java2/index.html


Leider ist die SCSL weder eine Open Source Lizenz noch eine Freie Software Lizenz.

miketech
27.09.2004, 08:21
Ich dachte schon ich hätte was verpasst :) Hätte Sun sein Java wirklich unter eine Open Source Lizenz gestellt hätte man doch auf unixboard, prolinux, heise oder sonst wo davon lesen müssen :))

Mike

oenone
27.09.2004, 17:05
aber man bekommt doch den source? dann ist es doch open source.
ob es nun frei ist oder nicht, ist ein anderes thema.

auf bald
oenone

pinky
27.09.2004, 19:25
aber man bekommt doch den source? dann ist es doch open source.
ob es nun frei ist oder nicht, ist ein anderes thema.


das sind halt die typischen Verwirrungen durch den Begriff OpenSource, deswegen vermeide ich ihn eigentlich auch immer.

Aber ich denke wenn in einem GNU/Linux Forum von Open Source gesprochen wird können wir im allgemeinen davon ausgehen das man sich auch an die OpenSource Definition hält[1] (auch wenn sie ziemlich kompliziert ist)

[1] http://www.opensource.org/docs/definition.php

Locke
27.09.2004, 23:19
java ist schon seit ewigkeiten frei im source erhältlich, sun behält es sich doch vor, den source nicht von dritten verändern zu lassen und zu verbreiten. grund ist, dass java einheitlich bleiben soll und sich auf jedem system möglichst gleich verhalten soll. übrigens gehört java nicht sun alleine, sondern die entwicklungsrichtung von java wird durch ein gremium bestimmt, indem sun nur eine stimme hat, sowie jedes andere unternehmen, das dort sitzt (unter anderem ibm). deshalb gibt es unter anderem auch opensource fassungen der vm und des compilers. .NET hingegen ist überhaupt nicht beeinflussbar, da alle rechte sämtlich bei MS liegen. und Mono wird nie ganz .NET sein, da allein schon der gui kram sowie die kappselung von dll's nur bei windows so funktioniert, von directX .NET ganz zu schweigen. ein .NET das für alle systeme gleich ist, wirst du dein leben lang nicht finden. wer nur für MS schreibt dem kanns hupe sein, mir aber nicht. immerhin kommt MS mit .NET von dem alten winapi-gefrickel weg und merzt die schlechte codeportierbarkeit ihres alten sources für andere architekturen als x86 aus.

oenone
27.09.2004, 23:20
so ein schwachsinn...

ich sprach von 'open source' und nicht von 'OpenSource(tm)'.

open source bedeutet, dass der sourcecode verfuegbar ist. in welcher form auch immer und unter welchen bedingungen auch immer.

ausserdem ist dies hier _kein_ GNU/Linux Forum.

auf bald
oenone

Locke
28.09.2004, 10:27
sehe ich auch so oenone, open source heisst lediglich dass der source offen zugänglich für jeden ist und das ist er. von editierbar und kopierbar und co is dort nicht die rede.