Die Community zu .NET und Classic VB.
Menü

.NET oder Java? – Eine Entscheidungshilfe

 von 

Inhalt  

In dieser Ausgabe der Kolumne soll auf Basis eines aktuellen Tests analysiert werden, ob .NET oder doch Java 2 in Bezug auf die Performanz erstellter Lösungen „die Nase vorne hat“. Für viele Unternehmen wird die richtige Wahl zwischen .NET und Java in einiger Zeit wahrscheinlich von Relevanz sein. Dem vorgestellten Test zufolge ist die Entwicklung mit .NET vergleichbaren Java-Systemen weit überlegen. Der Artikel fasst den Test zusammen und soll keinesfalls ein genaues Studium des Testberichts ersetzen.

Zum Zeitpunkt, an dem dieser Artikel verfasst wurde, waren die Testergebnisse gerade einmal ein paar Stunden im Internet verfügbar, es gab noch keine Kritik an deren Inhalt. Bereits ein paar Tage später, wie war es auch anders zu erwarten, wurden erste Rufe laut, dass die Untersuchung von Microsoft manipuliert worden wäre. Wir können dazu nichts sagen, außer dass sich jeder ein eigenes Bild von der Angelegenheit machen soll. Zwei Artikel, die auch genauer auf die Thematik eingehen, sind auf der Website vom dot.net magazin und auf heise online erschienen. Auch seitens der Middleware Company, die die Tests durchführte, war man inzwischen zu einer Stellungnahme bereit. Die Middleware Company hat bereits eine zweite Testrunde angekündigt, bei der besser auf die Anforderungen der Java-Version eingegangen werden soll.

Einleitung  

Fast ein Jahr ist inzwischen seit der Einführung von .NET durch Microsoft vergangen, das auch gleich die neue Programmiersprachen Visual Basic .NET und C# mit sich brachte. Visual Basic .NET, kurz als VB.NET bezeichnet, soll die Nachfolge von VB6 antreten und gleichzeitig auch BASIC als syntaktisches Konzept in der Welt der zeitgemäßen Anwendungsentwicklung fest integrieren. Neben der neuen Programmiersprache C#, die anfänglich den Namen „Cool“ tragen sollte, stellt VB.NET eine der wichtigsten Programmiersprachen für .NET dar. C# war nicht wirklich eine Neuerung: Es handelt sich dabei um eine Programmiersprache, deren Stil eine Mischung aus C++ und Java ist, wobei versucht wurde, nicht die selben Fehler beim Entwurf der Programmiersprache zu machen, wie dies Sun Microsystems ungefähr zehn Jahren mit Java getan hatte. Die wirkliche Neuerung von .NET war die umfangreiche Klassenbibliothek, die Funktionalität für .NET-basierende Programmiersprachen bereitstellt. Anlass für die Wahl dieses Themas war ein Test, der die Performanz einer .NET-basierenden Lösung mit einer in J2EE entwickelten vergleicht. Der Test wurde von der Firma Middleware Company erstellt.

Die Vorgeschichte  

Als vor mehreren Jahren Microsoft Visual Basic 6 herausbrachte, waren viele Benutzer zwar erfreut, dass VB6 sehr performanten Code erzeugen konnte, jedoch waren die Einsatzbereiche von VB6 gegenüber anderen auf dem Markt befindlichen Programmiersprachen eingeschränkt. Die Programmiersprache Visual C++ von Microsoft erfreute sich großer Beliebtheit wegen noch besserer Performanz und wegen der weit über die von VB6 gebotenen hinausgehenden Möglichkeiten.

Der wohl wichtigste Gegenspieler am Programmiersprachensektor war zu dieser Zeit aber wohl das von Sun Microsystems entwickelte und auf den Markt gebrachte Java. Im Unterschied zu VB6 verfügte Java über ein für damalige Zeiten ausgereiftes und fortschrittliches Klassenframework, in dem zahlreiche Klassen und Methoden für den täglichen Programmieralltag enthalten waren. Vergleichbar ist dies etwa mit der Klassenbibliothek MFC, die man von Visual C++ aus nutzen konnte. Java war eine Programmiersprache, die als Gegenspieler zu VB gedacht war. Aus diesem Grund sind auch auf der Website von Sun Microsystems zahlreiche Artikel zu finden, in denen der Umstieg von VB6 auf Java nahe gelegt und schmackhaft gemacht werden soll.

Java hatte aber auch noch andere proklamierte Vorteile: Die damit entwickelten Anwendungen sollten unabhängig von verwendeter Hardware und Betriebssystem ausgeführt werden können. Um dieses Ziel zu erreichen, musste Sun beim Entwurf im Sachen Funktionalität und Performanz starke Abstriche machen. Zu unterschiedlich waren die verschiedenen Betriebssysteme. Das Resultat war ein Produkt, mit dem man zwar Anwendungen für verschiedenste Betriebssysteme entwickeln konnte; in der Praxis setzte sich Java allerdings nicht allgemein gegen andere Systeme durch; zu schlecht war etwa die Implementierung der Unterstützung für grafische Benutzerschnittstellen.

Microsoft versuchte nicht, eine Alternative zu Java als plattformunabhängige Programmiersprache zu schaffen, sondern stellte eine derzeit nur unter Windows voll laufende Programmierumgebung, bestehend aus einer Menge Klassen und Entwicklungswerkzeugen, zur Verfügung, die jederzeit auch von anderen Firmen oder Organisationen auf andere Plattformen portiert werden kann. Dadurch konnte vermieden werden, beim Entwurf zu große Kompromisse bezüglich der Funktionalität eingehen zu müssen.

Java war zwar vom Gedanken her eine gute Idee, jedoch ließ die Implementierung stark zu wünschen übrig. Mehrere Jahre nach Einführung von Java änderte Sun die Klassenbibliothek und schuf Java 2, das fast inkompatibel zu in Java entwickelten Anwendungen war. So mussten Unternehmen Aufwendungen machen, um den für Java geschriebenen Code auf Java 2 umzuschreiben. Neben der Instabilität des Systems ist der von Java erstellte Code, das ist ein Bytecode, in seiner Ausführung langsam, da er in einem plattformunabhängigen Format vorliegt und nur auf dem Zielrechner, auf dem er ausgeführt wird, interpretiert wird. Entsprechende Programme, die es erlaubten, Java-Anwendungen in echte EXE-Dateien für Windows zu kompilieren, konnten sich nicht durchsetzen.

Der Test  

Im Mai 2001 veröffentlichte Sun Microsystems eine Anwendung mit dem Namen Java Pet Store als Beispiel für eine auf J2EE basierende Webanwendung. Diese Anwendung ist als Technologiebeispiel zu sehen und sollte zeigen, was alles mit J2EE möglich ist. Die Anwendung sollte auch als als Entwurfsmuster für die Entwicklung ähnlicher Anwendungen dienen. Im darauf folgenden November veröffentlichte dann Microsoft eine von der Funktionalität her identische Implementierung des Pet Store mit dem Namen PetShop, die auf dem .NET Framework aufbaut und in C# geschrieben war. Diese Anwendung sollte die Vorteile von .NET gegenüber J2EE demonstrieren.

Zum Vergleich der beiden Systeme wurde ein Benchmarktest durchgeführt, bei dem .NET PetShop wesentlich besser abschnitt als die entsprechende Implementierung von Sun Microsystems. Die Auswertungen des Java Pet Store wurden dabei von Oracle erstellt. Bereits bald nach der Veröffentlichung der Ergebnisse teilten Sun Microsystems, IBM und Oracle mit, dass die im entsprechenden Blueprint angegebene Implementierung des Java Pet Store nicht optimiert sei. Dies ist eine interessante Aussage, sollte dieses Beispiel doch als Vorbild für die Umsetzung ähnlicher Projekte dienen.

Um einen objektiven Vergleich durchführen zu können, implementierte die Middleware Company den Java Pet Store neu. Microsoft stellte eine überarbeitete Version des .NET PetShop bereit. Die von der Middleware Company erstellte Implementierung wurde im höchsten Maße optimiert. Ähnliches wird wohl auch Microsoft mit ihrer Implementierung getan haben. Die Middleware Company überwachte, dass beide Implementierungen die gleichen Vorraussetzungen erfüllten und erstellte dann entsprechende Testskripte und Benchmarkanwendungen, die auf Serverside.com zu finden sind.

Die von der Middleware Company erstellte neue Version vom Java Pet Store war um ungefähr zehn Mal schneller als jene von Sun Microsystems. Als Gegenspieler dazu war die neue Implementierung des .NET PetShop 2.0 gedacht. Bei den Tests wurde festgestellt, dass die .NET-Version immer noch mehr als doppelt so schnell war, wie die entsprechende Implementierung auf Basis von J2EE. Der entsprechende Webdienst war in der .NET-Version sogar mehr als vier Mal so schnell wie die schnellste Java-Version. Während die beste Java-Version gerade einmal 2.400 Benutzer gleichzeitig bedienen konnte, waren es bei der .NET-Version ungefähr 12.000.

Aber nicht nur bessere Performanz und Skalierbarkeit der .NET-Version zeigten eindrucksvoll die Überlegenheit von .NET gegenüber J2EE. Auch der Codierungsaufwand war bei der .NET-Version wesentlich geringer – der gesamte Quellcode der .NET-Version bestand aus ungefähr 2.100 Zeilen Code, im Gegensatz dazu brachte es die Java-Implementierung auf ziemlich genau 14.000 Codezeilen. Es mag sich der Leser lebst ausrechnen, wie viel sich eine Softwarefirma an Kosten für Entwicklung und Wartung sparen kann, wenn der Codierungsaufwand nur ungefähr ein Siebentel beträgt. Auch die erforderliche Hard- und Software für den Server war beim .NET-System nur ungefähr halb so teuer wie bei einem System, das auf J2EE aufsetzte.

Zusammenfassung  

Das Programm .NET PetShop 2.0 wurde zwar in C# geschrieben, aber auch für VB.NET ist dieses Testergebnis erfreulich, setzt es doch auf der selben Technologie auf und ist doch die Konfiguration des Servers unabhängig von der verwendeten Programmiersprache. Ein Hauptteil der Implementierung liegt in der grafischen Benutzerschnittstelle, bei der auch VB.NET nicht langsamer wäre. Natürlich darf man in diesem Zusammenhang nicht vergessen, dass Microsoft etwas mehr Entwicklungsarbeit in den Compiler für C# investiert hat und dieser einige Optimierungen mehr bietet als der VB.NET-Compiler. Bei einem Leistungsunterschied zwischen Java und .NET von mehr als fünfzig Prozent werden jedoch diese geringen Unterschiede zwischen den Programmiersprachen VB.NET und C# den großen Unterschied zwischen den beiden Systemen Java und .NET sicher nicht aufheben.

Die Zeit wird es weisen, ob sich VB.NET nicht auch gegenüber C# durchsetzen wird. Viele Unternehmen bauen zwar derzeit auf C#, da sie damit Java- und C++-Entwickler leichter in die neuen Projekte übernehmen können, jedoch darf man auch nicht die große Menge an VB-Entwickler vergessen, die teilweise bereits sehr mehreren Jahrzehnten BASIC die Treue halten.

Weiterführende Informationen  

Der vollständige Bericht umfasst 58 Seiten und kann auf der Website der Middleware Company herunter geladen werden. Dazu muss man sich registrieren, was aber zum Zeitpunkt des Verfassens dieses Artikels kostenlos möglich war.

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 11 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von AB am 16.05.2006 um 14:44

Vergleicht doch mal Eclipse mit VS.NET, oder die Javadocs mit einer MSDN Hilfe... Das ist ein Unterschied wie Tag und Nacht!

Mit .NET läuft es mal schnell und einfach, egal welche Sprache, ob VB, C# oder J#.

Übrigens schon mal einen Webservice eingebunden? In .NET ist das in zwei Minuten angeklickt. Mit Struts hat mein Java Kollege drei Tage rum getan bis da mal was lief.

Kommentar von Nik am 15.05.2006 um 21:23

FYI: Nach einem Rechtsstreit (kA mehr was das genau war) von MS und Sun -nachdem MS die Java-Lizenzierung nicht erneuerte- durfte MS keine "Java" VM mehr rausbringen. Daraufhin hat MS eine eigene VM (-> .NET) entwickelt. MS war natürlich g'scheit und hat IMHO die besten Ideen & Konzepte von Java geklaut; konnte dabei auf etwaige Kompatiblitäten/Altlasten/etc... verzichten da ja alles "neu" war.

@Java 2: Deja'vu bei .NET 2.0 ?? - bei Java werden alte Methoden als "depricated" gekennzeichnet und nicht einfach gelöscht - abgesehen davon ist Java1.0 Code immer noch mit JRE5 ausführbar.

Aja, der Java-Bytecode wird bitteschön schon seit langem nicht mehr interpretiert (noch vor '98 AFAIR), es sei denn man wünscht es explizit - dafür wurden Just-In-Time-Compiler erfunden (.net arbeitet übrigens nicht viel anders). - und dank GNU Classpath ua. Projekten lässt sich auch dauerhaft nativer Code produzieren.

In der c't gabs mal einen Vergleich ob C++, C# oder Java schnelleren Maschinencode produziert - Fazit war, dass Java vs. C# Kopf-an-Kopf-Rennen lieferten und C++ beim de/konstruieren von Objekte um einiges langsamer war. - Aja, bitte zwischen Code und GUI unterscheiden; Swing ist subjektiv lahm, dafür ist es sauber programmiert!

Meine pers. Empfehlung:
- Wenn man bisher mit ClassicVB, C++/MFC oä. gearbeitet hat: C# (der Großteil von MS .NET-Framework ist trotz anderslautender Marketingsprüche platform-abhängig)
- Wenns platformunabhängig sein soll: Java
Letztlich ists eine reine Geschmacksfrage - momentan ist halt .NET "hip"

@Dennis: "offen ... - bezogen auf die verwendete Sprache." ist für die JVM genauso möglich, siehe http://www.robert-tolksdorf.de/vmlanguages.html

Kommentar von Johann Halmarius am 22.12.2005 um 10:11

Hallo,

ich bin der Meinung, dass es besser ist zum Schmid zu gehen als zum Schmidl.

halmarius

Kommentar von Guido am 29.07.2005 um 00:07

Mich interessiert eine Programmiersprache die sehr leicht auf verschiedenste Betriebssysteme zu portieren ist. Java ist dazu hervrragend geeignet leidet dabei jedoch nachweislich unter Performanceverlusten. Es ist mir wichtig auf möglichts einfache Art und Weise GUI's zu erstellen und das möchte ich visuell machen weil eine GUI ist nun mal etwas visuelles. Ein wirklicher Graus war für mich immer der Grid Bag Layout Manager in Java. Momentan suche ich nach einer zukunftsträchtigen Alternative mit der ich meine eh schon knappe Zeit nicht umsonst vertue. Also habe ich recherchiert und was .NET angeht herausgefunden das es ein Projekt namens "mono" gibt. Mit Mono läßt sich .NET auf Linux portieren, auch VB.Net. Mono ist Open Source und Open Source ist wichtig und gut. Linux ist eine wirkliche Leistung. Letzlich möchte ich flexibel und so einfach wie möglich leistungsfähige Anwendungen schreiben und .NET scheint mir dafür genau richtig. Ob Microsoft wohl geahnt hat das es Menschen gibt die .NET per "mono" so schnell auf Linux portieren??? Wie dem auch sei...;-)))

Kommentar von Dennis am 01.04.2005 um 16:23

.NET-Programme, kann ich auf Linux-Systemen laufen lassen.
Im Gegensatz zu Java ist das .NET-Framework nämlich in beide Richtungen offen, nach unten - bezogen auf die Plattform, und nach oben - bezogen auf die verwendete Sprache.

Kommentar von Norbert am 30.03.2005 um 10:23

der Satz

"
Visual Basic war seit seiner Erschaffung im Jahre 1991 die Programmiersprache, die den steilsten Aufstieg verzeichnete. Ein Hauptgrund dafür war sicher seine intuitiv und sehr leicht codierbare Syntax, die Einfachheit, jene Dinge in wenigen Zeilen zu erledigen, für die in anderen Programmiersprachen hunderte Zeilen Quellcode erforderlich gewesen wären. Auch wenn mit VB .NET etwas mehr Quellcode zum erzielen der selben Ergebnisse erforderlich ist, sollte man beim Vergleich nicht vergessen, dass VB .NET nun eine Programmiersprache ist, bei der man nicht auf den Vorteil eines Klassenframeworks, das bereits vorgefertigt zahlreiche brauchbare Klassen enthält, zurückgreifen kann. "

ist am Schluß etwas verwirrend. Muß es nicht heißen "...verzichten muß?"

Eine ganz andere Frage: Es gab mal Gerüchte, daß .NET auch auf Linux verfügbar sein soll. Ich glaube das nicht, ich denke, hier hat jemand etwas verwechselt.

Gruß Norbert

Kommentar von David Mertner am 19.08.2004 um 12:20

Seien wir uns mal ehrlich:
Java ist doch nur eine Art "Abklatsch" von C++ - jedoch
ohne die große dynamische Struktur von letzterem.
Stichwort: in C++ kann ich mir aussuchen, ob ich Klassen
verwende oder nicht. Wenn ich will, kann ich auch noch
Uralt C-Syntax verwenden.
Bei Java werde ich zwangsweise zur Verwendung von Klassen
genötigt.

VB hingegen stellt(e) einen völlig neuen Ansatz dar:
hohe Einfachheit bei ähnlicher Flexibilität.

Kommentar von Herfried K. Wagner [AVB] am 10.08.2004 um 13:14

Es ging, soweit mir bekannt ist, beim Vergleich um die Performance und Skalierbarkeit der Implementierung, nicht um gute/schlechte Architektur. Über die Architektur des Pet Store gibt es innerhalb der Architektur-Community unterschiedliche Ansichten. Der Artikel der Middleware Company gibt das Ergebnis des Vergleichs zweier von den Funktionen her sehr ähnlicher Implementierungen zu einem bestimmten Zeitpunkt wieder, dass hier die getestete Implementierung Suns nicht so gut abschnitt, war die Feststellung der Untersuchung. Dass eine Änderung der Architektur von Java Pet Store eventuell zu einem besseren Ergebnis führt, ist ein anderes Thema, denn darum ging es in der Untersuchung ja auch nicht.

Kommentar von Martin Krowald am 16.01.2004 um 17:45

Der Artikel ist sehr schlecht recherchiert:

Schon vor Veröffentlichung dieses Artikels hat die Middleware Company öffentlich eingestanden, daß der Test nicht fair war und Java unfair benachteiligt worden ist. Siehe beispielsweise http://heise.de/newsticker/data/kav-13.11.02-000/ In diesem Zusammenhang ist die Behauptung des Artikels, daß er bei neuen Erkenntnissen "natürlich ... entsprechend erweitert" wird, eine Frechheit.

Hinzu kommt, daß PetShop Performance auf Kosten von extrem schmutzigem Code gewinnt, welcher sehr schwer zu warten ist. Wenn Firmen bei echten größeren Projekten solchen Code schreiben würden wie in PetShop, würden sie sich damit ihr eigenes Grab schaufeln. Der Java Pet Store dagegen ist wirklich sauberer Beispielcode, wie er in realen Projekte vorkommt, die auch mittelfristig und langfristig wartbar bleiben sollen. Siehe beispielsweise http://www.ejbsig.com/docs/PetShopArchitecture.html

Kommentar von Michael Amplatz am 14.12.2003 um 00:46

Es ist durchaus möglich, dass Java 2 Geschwindigkeitsnachteile gegenüber .NET hat. Vielleicht sogar gravierende.

Der Vorteil ist trotzdem die Kompatibilität zu verschiedenen Betriebssystemen! Warum glauben Sie, dass Linux sich immer mehr durchsetzt - weil es schneller oder einfacher ist?

Nein, sondern weil es Open Source ist und man sich damit die Abhängigkeit von Microsoft erspart, welche alte Produkte nie günstiger verkaufen und neue Produkte jahrelang mit schweren Programmfehlern ausgeliefert haben.

Die Schwierigkeit ist der Umstieg - und dieser wird durch Programme wie Java erleichtert.

Weiters wäre noch hinzuzufügen, dass es egal ist, ob Programme, die aus Java-Programmen .exe-Dateien erzeugen, sich "durchgesetzt haben" oder nicht. Was zählt, ist, dass es diese Programme gibt und jeder Programmierer sie verwenden kann. Wenn davon nicht Gebrauch gemacht wird, wird es wohl daran liegen, dass es auch anders toll funktioniert.

Kommentar von Konrad Rudolph am 20.08.2003 um 13:33

Ja - da bleiben aus meiner Sicht keine Fragen offen. Guter, objektiver Artikel. Mehr ist nicht hinzuzufügen.
Allerdings funktioniert der Link zum .NET PetShop 2 nicht.