![]() |
Re: DLL systemunabhängig?
Und in welchen Bereichen ist Java jetzt genausoschnell oder gar schneller und wo ist es langsamer? :gruebel:
|
Re: DLL systemunabhängig?
Da es kaum Vergleichstests gibt, deren Vergleichsmethoden nicht irgendwie seltsam anmuten, wirst du wohl oder übel selbst testen müssen.
Was das "Objekterzeugen in Java ist schneller als in C++" angeht, das ist nur ein Teil der Wahrheit, jetzt mal ganz abgesehen davon, dass es unzählige C++-Compiler gibt. Objekte auf dem Heap zu erzeugen und zu zerstören ist in Java ebenso wie in C# und ähnlichen Sprachen schneller als in C++, wenn man sich nicht ums Speichermanagement kümmert. Aber in C++ kann man Objekte auch auf dem Stack erzeugen (das geht in Java überhaupt nicht, in C# nur, wenn die jeweilige "Klasse" dafür entworfen wurde), und man kann sein eigenes Speichermanagement zusammenbauen, wie z.B. einen MemoryPool (im Endeffekt ist das, was Java macht, auch nicht viel anders). Wenn du also ungefähr weißt, was du tust, kannst du nur durch deine eigenen Tests wirklich Performance-Unterschiede herausfinden und diese sind dann, mehr oder weniger, für dein Problem spezifisch. Von bestimmten Dingen abgesehen kann man kaum sagen, dass eine bestimmte Sprache schneller als eine andere ist. Was C++ angeht, die C++-Bibliothek bringt in der bisherigen Standardversion ungefähr nichts mit, außer einer Hand voll umständlich zu verwendender Container und Algorithmen und einer String-Klasse. Das Ganze nennt man dann STL, stuft es als Grundwissen ein und hofft, es nie benutzen zu müssen. Mit Boost wird dann aus C++ schon eine einigermaßen benutzbare Sprache, weil Boost viele Features hinzufügt, die andere Sprachen auch können (Delegaten, Threads, Smartpointer usw.) Wirklich viel Spaß mit C++ hat man in meinen Augen aber nur mit einer Bibliothek wie Qt, die so ziemlich alles, was man benötigt, mitbringt, in einer Form, die angenehm zu verwenden und plattformunabhängig ist. Qt ist unangenehmerweise für kommerzielle Anwendungen nicht kostenlos (aber ich finde, es ist das Geld wert ;)). Zumindest anschauen solltest du es dir als Alternative zu Java auf jeden Fall. |
Re: DLL systemunabhängig?
Zitat:
Java ist also schon mal schneller, als wenn Du wiederum exakt gleiche Algorithmen und Datenstrukturen in einem Interpreter ausführst. Da Du aber i.d.R. keine Architektur besitzt, die der der JVM entspricht, muss der Code noch in solche übersetzt werden, der von Deiner Maschine verstanden wird. Hier kommt ein Just In Time Compiler (JIT) zum Einsatz. Während dieser die Instruktionen einliest versucht der diese auf Dein System zu optimieren und übersetzt die für die Zielplattform, wo sie dann auch ausgeführt werden. Das kostet natürlich etwas Zeit und ist damit langsamer als ein gleichartiges Programm, dass schon komplett für diese Zielplattform gelinkt vorliegt. Letzteres kann eben direkt ausgeführt werden, die Übersetzung durch den JIT entfällt. Jetzt ist es aber nicht so, dass alle Sprachen exakt gleich arbeiten. So könnte ich immer behaupten, dass C Code schneller ist als solche in ObjektOrientierter C++ Code. Einfach weil C keine Objekte kennt und diese einen gewissen Overhead mit sich bringen. Auch kümmert sich C recht wenig um Typsicherheit, in C++ sieht das anders aus. Jedes try... except bedeutet eine Verlangsamung, Indirektionen durch die Verwendung von Objekten und insbesondere bei virtuellen Methoden kommen dann noch hinzu. Nichts desto trotz wird häufig auch Objekt Orientiert programmiert, da dies ganz andere Möglichkeiten und Vorteile als die rein imperative Programmierung bietet. Ein schönes Beispiel ist vielleicht gleich J2EE (Java 2 Enterprise Edition), deren Vorteile erst durch die OOP erreicht werden, z.B. die einfache Skalierung und die automatische Nebenläufigkeit. Aber es gibt noch weitere Unterschiede, so verwaltet Java seinen Speicher selbst, es gibt keine (expliziten) Destruktoren. Während Du in C/C++ einfach mal einen Destruktor-Aufruf vergessen kannst und Dir damit den Speicher zumüllst, wird in Java von Zeit zu Zeit (läuft asynchron) die Garbage Collection aufgerufen, die einfach allen Speicher, der nicht mehr benötigt wird, aufräumt. Hast Du einen solchen Destruktor an einer ungünstigen Stelle vergessen, dann dürfte ein voller Speicher Dein Programm ordentlicher ausbremsen als vieles anderes. Zudem sind natürlich die Bibliotheken in Java und C++ (oder anderen Sprachen) auch unterschiedliche aufgebaut. Je nach Implementierung (die muss auch nicht in jeder Version gleich sein, ein Vorteil von Abstraktion), kann dann die eine oder andere Sprache eine deutlich schnellere Implementierung verwenden. Die Unterschiede zwischen C++ und Java mögen hier für die meisten Programme noch gut messbar sein, aber nicht unbedingt spürbar! Da spielen andere Faktoren eine viel wichtigere Rolle. Jeder sich bewegende Fortschrittsbalken bzw. sein Fehlen macht psychologisch doch deutlich mehr aus (da ist der Gefühlte Unterschied immens!) [add] Kein roter Kasten, na toll. Zitat:
[/add] |
Re: DLL systemunabhängig?
Weitere Funktion des Programms: ein Programm soll als Dienst/Daemon laufen. Gibts da Vor-/Nachteile bei Java/C++?
|
Re: DLL systemunabhängig?
Sagen wir's so, es ist vielleicht unglücklich, wenn ein Dienst noch gleich eine VM mit sich rumschleppt. Kann ein Javaprogramm überhaupt als Dienst gestartet werden?
|
Re: DLL systemunabhängig?
Ja es gibt einen Wrapper mit der man die als Dienst starten kann
|
Re: DLL systemunabhängig?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz