AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL systemunabhängig?

Ein Thema von Angel4585 · begonnen am 14. Aug 2007 · letzter Beitrag vom 23. Aug 2007
Antwort Antwort
Seite 3 von 3     123   
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#21

Re: DLL systemunabhängig?

  Alt 14. Aug 2007, 15:28
Und in welchen Bereichen ist Java jetzt genausoschnell oder gar schneller und wo ist es langsamer?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#22

Re: DLL systemunabhängig?

  Alt 14. Aug 2007, 15:42
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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#23

Re: DLL systemunabhängig?

  Alt 14. Aug 2007, 15:53
Zitat von Angel4585:
Und in welchen Bereichen ist Java jetzt genausoschnell oder gar schneller und wo ist es langsamer?
Kann mich nur wiederholen, kann man nicht pauschal sagen, kommt auf den Code an. An sich ist Java (bei wirklich gleichwertigen Datenstrukturen und Algorithmen) immer etwas langsamer als ein gleichwertiges natives Programm. Häufig wird hier einfach gesagt, dass das daran liegt, dass Java-Code in einer virtuellen Maschine ausgeführt wird. Der Java Compiler (javac) erstellt nur Objektcode, der eben auf dieser virtuellen Maschine ausgeführt wird. Überall, wo es eine Implementierung der virtuellen Maschine gibt, ist dann der Code auch lauffähig (genau das macht die Plattformunabhängigkeit aus). .net verwendet das gleiche Prinzip. Anders als bei einem Interpreter ist der Code dabei schon in einen assembler übersetzt, die Korrektheit schon geprüft, die Anweisungen sind schon kodiert.
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 von OregonGhost:
Zumindest anschauen solltest du es dir als Alternative zu Java auf jeden Fall.
Oder wie bereits erwähnt auch als Ergänzung!
[/add]
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#24

Re: DLL systemunabhängig?

  Alt 23. Aug 2007, 09:21
Weitere Funktion des Programms: ein Programm soll als Dienst/Daemon laufen. Gibts da Vor-/Nachteile bei Java/C++?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#25

Re: DLL systemunabhängig?

  Alt 23. Aug 2007, 10:45
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?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#26

Re: DLL systemunabhängig?

  Alt 23. Aug 2007, 10:51
Ja es gibt einen Wrapper mit der man die als Dienst starten kann
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#27

Re: DLL systemunabhängig?

  Alt 23. Aug 2007, 11:19
Zitat von OregonGhost:
Kann ein Javaprogramm überhaupt als Dienst gestartet werden?
Ein Java-Programm kann auch für das Zielsystem gelinkt werden, geht zwar nicht mit dem SUN-JDK und macht das Kompilat plattformabhängig, aber das gilt nicht für den Source!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz