Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Benutzeravatar
Krishty
Establishment
Beiträge: 8421
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Krishty »

Chromanoid hat geschrieben:Bei Java gehört das dazu und wird sozusagen nativ unterstützt. Genauso wie Exceptions, Logging, usw.
:shock: Falls du dich damit auf die Bibliotheken beziehst: Die C++-Standardbibliothek arbeitet genauso mit Exceptions und standardisierten Logging-Verfahren.
Chromanoid hat geschrieben:In C++ empfinde ich das nicht so...
Ja, das stimmt allerdings. Um sich auf das Beispiel zu beziehen: vor allem Schnittstellen wie OpenGL und DirectX sind meilenweit von sicherem Stil entfernt  … und wenn man gegen Funktionen coded, die ihre Parameter noch auf C-Level entgegennehmen, bringen einem die höheren Sprachfeatures auch nichts mehr.

Das ist aber wieder Framework, nicht die Sprache selbst. Der Beispielcode ist gegen ein C-Interface geschrieben und wenn du selbiges in Java füttern müsstest, würde das mangels Zeigern noch weniger funktionieren ;) Ein Lichtblick ist allerdings in Sicht: Direct2D arbeitet – so habe ich gehört – mit Namespaces, Referenzen, const-Correctness, RAII und Templates … also „echtem“ C++. Ich hoffe, dass MS es endlich kapiert hat.

Btw: Wie sieht es generell mit DirectX-Support unter Java aus?

@Stephan Theisgen & Offtopic: Danke, höre ich gern :)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4321
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Chromanoid »

Krishty hat geschrieben:Btw: Wie sieht es generell mit DirectX-Support unter Java aus?
In java kann man dank bibliotheken wie JNA ohne Probleme jede DLL einbinden. Es ist die Frage ob das jemand mit DirectX schon getan hat.
Krishty hat geschrieben:Das ist aber wieder Framework, nicht die Sprache selbst. Der Beispielcode ist gegen ein C-Interface geschrieben und wenn du selbiges in Java füttern müsstest, würde das mangels Zeigern noch weniger funktionieren Ein Lichtblick ist allerdings in Sicht: Direct2D arbeitet – so habe ich gehört – mit Namespaces, Referenzen, const-Correctness, RAII und Templates … also „echtem“ C++. Ich hoffe, dass MS es endlich kapiert hat.
Naja in einer guten Java OGL Implementation ist sowas ja dann eh gekapselt. In Java bekommt man von sowas einfach nichts mit...
Benutzeravatar
Krishty
Establishment
Beiträge: 8421
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Krishty »

Chromanoid hat geschrieben:In java kann man dank bibliotheken wie JNA ohne Probleme jede DLL einbinden. Es ist die Frage ob das jemand mit DirectX schon getan hat.
Okay, klingt gut. Kam mir eben in den Sinn, weil ich in Verbindung mit Java bisher nie D3D gesehen habe.
Krishty hat geschrieben:Naja in einer guten Java OGL Implementation ist sowas ja dann eh gekapselt. In Java bekommt man von sowas einfach nichts mit...
Ja, für C++ müsste es theoretisch auch gewrappt, gekapselt und schick verpackt werden. Praktisch tut das aber scheinbar kaum jemand, weil es mit der C-Abwärtskompatibilität ja schon irgendwie geht … da kommt dann auch der schlechte Ruf her.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4321
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Chromanoid »

Alexander Kornrumpf hat geschrieben:Pakete/Dateien: Ich hab (durch langes nicht benutzen von Java) vergessen was Pakete können was Namespaces nicht können. Ich finde es jedoch eher nervig dass in jeder Datei nur eine Klasse sein darf die genau so heißt wie die Datei und dass Pakete umgedrehte URLs als Namenskonvention haben. Auch die Trennung von Definition und Deklaration (und die dadurch recht übersichtlichen Header) spricht eher für C++. C# hat z.B. noch partial classes, in erster Linie wohl um Designer Code zu verstecken. Wie ist das bei Java?
Wie du schon sagst: Alle klassen ordnet man in eine Ordner-Struktur an. Per Namenskonvention sind die ersten Ordner i.d.r. Domains der Entwickler, dann folgt der Projektname:
z.B. info.zfx.zfxce
siehe auch http://en.wikipedia.org/wiki/Java_package
Das ganze hat im grunde den gleichen Effekt wie namespaces. Nur dass jeder Entwickler die auch tatsächlich benutzt, weil es in java einfach dazu gehört. Man geht so Namenskollisionen aus dem weg. gerade durch den Domainnamen kann man sich nicht ins gehege kommen. In Java haben packages auch "physikalische" auswirkungen, da sie auch eine ordnerstruktur vorgeben. Das sorgt für zusätzlichen (erzwungenen) Überblick und Kollisionsfreiheit. Mit protected versehene Methoden und Variablen sind nur von Kindklassen und Klassen im selben Paket aufrufbar. Partial classes gibt es in Java nicht.

Die Trennung von Definition und Deklaration halte ich für unsinnig. Ich glaube in C++ ist das nur dabei damit man Präprozessor-Direktiven benutzen und sich um doppelte Includes sorgen muss ;).
Nein mal im Ernst auch in Obejctive-C nützt mir die trennung von Definition und Deklaration wenig. Es sorgt höchstens dafür, dass ich doppelt so viele Dateien hab und immer nachschauen muss was ich jetzt eigentlich alles so definiert habe... Dass das ganze nicht gerade praktisch ist oder mehr Übersicht spendet, ist doch spätestens durch die Abschaffung in C# bewiesen :).

Pro Datei eine public Klasse sorgt übrigens tatsächlich für mehr Überblick (im gegensatz zur Trennung von Definition und Deklaration :D). Man kann den Dateibaum ja dann praktisch schon als Typ/Klassen-Überblick benutzen und braucht so noch nicht mal eine IDE um einen Überblick zu bekommen - ganz im gegenteil zum teils heftigen Definitions- und Deklarationssalat in C++. <edit>hab gerade gesehen dass ich in einem post vorher teilweise schon darauf geantwortet hatte und mich hier also wiederhole... sorry :)</edit>[/size]
Krishty hat geschrieben:Ja, für C++ müsste es theoretisch auch gewrappt, gekapselt und schick verpackt werden. Praktisch tut das aber scheinbar kaum jemand, weil es mit der C-Abwärtskompatibilität ja schon irgendwie geht … da kommt dann auch der schlechte Ruf her.
Und das ist das große Problem, dass ich mit C++ habe: Die tückische Nähe zu C, die Formlosigkeit mit der man programmieren kann und die meist dementsprechend nervig programmierten Bibliotheken. In Java ist das alles viel einheitlicher und ordentlicher. Vielleicht steckt dann hinter dieser formalen einheitlichen Ordnung semantisch großes Chaos, aber das ist in jeder Programmiersprache so.
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 635
Registriert: 05.07.2003, 11:17

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Lord Delvin »

Stephan Theisgen hat geschrieben: Mein Problem mit dem Garbage-Collector der VM war eher ein anderes. Ich hätte gerne mehr Speicher freigegeben, da ich gemerkt habe das mein Arbeitsrechner sehr langsam wurde, der Garbage-Collector schien aber der Meinung zu sein, dass das noch nicht nötig ist (Ich habe lange danach gesucht, ob das Objekt auch wirklich frei gegeben wurde, oder irgendwo noch versteckt referenziert wurde, habe aber nichts finden können.)
Ich glaub du hast noch nicht verstanden, wie Speicher wirklich funktioniert, sonst würde dich das nicht wundern. Der Java GC dürfte wohl der beste sein, dens atm gibt. Wenn der bei nem gc Aufruf, der im übrigen eigentlich immer nutzlos sein sollte, irgendwas nicht einsammelt, dann nur, weil es nicht möglich ist, d.h. es gibt noch ne Referenz auf das Objekt. Wenn du garantierst, dass es keine null-Pointer Exception gibt, wenn du auf eine Referenz zugreifst, auf die die schonmal erfolgreich zugreifen kannst, dann kannst du ein Objekt auch erst wegräumen, wenn es keine Referenz mehr auf das Objekt gibt.
Wenn du erlauben würdest Objekte manuell zu löschen würde das einfach schief gehen. Sieht man ja an schlechtem C(++) code.
Chromanoid hat geschrieben:Das ganze war dann ein typischer (C++ Anfänger) Fehler, der mir schnell vor Augen geführt hat was ich an Sprachen wie Java so mag:

Code: Alles auswählen

//In der Header-Datei:
GLushort *indices;
//im constructor in der Header-Datei:
indices=new GLushort[numIndices];
//in der Funktion loadVBO in der cpp datei:
glGenBuffers(1, &vboIndicesName);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIndicesName);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices*sizeof(GLuint), &indices[0], GL_STATIC_DRAW);
Der Code besteht nur aus C. Wenn du in C++ sizeof schreiben musst, hast du eigentlich immer was falsch gemacht. Btw würde dir das n memorychecker ziemlich schnell verraten, dass das böse ist. Und meistens sagt dir der memorychecker, wenn du n bug oder n memoryleak hast(was eigentlich auch n bug ist), warum bzw. welche Zeilen Code man sich nochmal ansehen möchte.

Im übrigen find ichs echt interessant, wie schnell hier gepostet wird.
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Stephan Theisgen
Beiträge: 94
Registriert: 29.07.2003, 11:13

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Stephan Theisgen »

@Lord Delvin:
Ich glaub du hast noch nicht verstanden, wie Speicher wirklich funktioniert, sonst würde dich das nicht wundern.
Danke für die Blumen 8-) Das lass ich jetzt mal unkommentiert, ich habe definitiv keine Lust meine Kentnisse über Speichermanagment darzustellen...

Auch wenn's nicht mehr ganz hier her gehört und ich definitiv zu wenig über die interne Implementierung des GC in Java kenne, so vermute ich das der Grund war, das ich den Speicher immer wieder genau in der Größe gebraucht habe und er sich dann vielleicht als interne Optimierung überlegt, hey wieso freigeben, da ist noch genug da im System und der braucht den gleich ja sowieso wieder... Das ist in fast 100% der Fälle auf fast jedem PC richtig, nur bei mir auf der Arbeit eben nicht, mein Rechner zuhause konnte das ohne Probleme ab.
Im übrigen find ichs echt interessant, wie schnell hier gepostet wird.
Ich auch, und die Resonanz überwältigt mich, aber so langsam wiederholen sich die Argumente, teilweise wirds persönlich. Ich denke ich werde den Thread bald schließen "lassen". Bevor noch ein Unglück in dieser Forumsgemeinde passiert :mrgreen: Es hat mir jedenfalls mal ein paar Argumente für und gegen Java und C++ gebracht und erstaunlicher weise sogar begründete... Außer das andere Sprachen kaum erwähnt wurden, als ob nur die Welt Java vs. C++ existiert...
Benutzeravatar
Ingrater
Establishment
Beiträge: 103
Registriert: 18.04.2007, 21:52

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Ingrater »

Ich denke ein großes Faktor ist auch, dass man mit C++ einfach besser angeben kann. Wenn man ein bisschen template-meta programming code rumzeigt halten einen die Meisten gleich für einen Halbgott ^^
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4321
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Chromanoid »

Stephan Theisgen hat geschrieben:Ich auch, und die Resonanz überwältigt mich, aber so langsam wiederholen sich die Argumente, teilweise wirds persönlich. Ich denke ich werde den Thread bald schließen "lassen". Bevor noch ein Unglück in dieser Forumsgemeinde passiert Es hat mir jedenfalls mal ein paar Argumente für und gegen Java und C++ gebracht und erstaunlicher weise sogar begründete... Außer das andere Sprachen kaum erwähnt wurden, als ob nur die Welt Java vs. C++ existiert...
Hehehe naja hoffen wir mal, dass es nicht soweit kommt ^^.... Ich denke würde man noch mehr Sprachen ins Spiel bringen, würde es schnell ziemlich unübersichtlich.... Ich persönlich sehe das ganze auch eher als Gegenüberstellung der Konzepte: Sprachen inkl. Plattformen wie Java und C# vs. C++. Wobei C++ da in seiner Komplexität recht alleine darsteht, oder?

Letztendlich könnten wir uns doch alle darauf einigen, dass Java nicht wirklich so schlecht ist :), oder? Java hat im Grunde vor allem eine andere Zielgruppe als C++ und ist für diese Zielgruppe wahrscheinlich auch besser geeignet. C++ bedient seine eigene Zielgruppe von OS-Entwicklern, High-End-Spiele- und Hardcore-Programmierern... :)

PS: Witziger Weise gibt es einiges zu dem Thema Java vs. C++ und Java Kritik auch bei Wikipedia :D -->
Criticism of Java
Comparison of Java and C++
Comparison of Java and C Sharp
Comparison of the Java and .NET platforms
Alexander Kornrumpf
Moderator
Beiträge: 2198
Registriert: 25.02.2009, 13:37

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Alexander Kornrumpf »

Als Moderator bin ich eigentlich recht froh, dass es hier mal wieder eine rege Diskussion gibt, wenn auch über ein recht ausgelutschtes Thema. Schließen halte ich für den falschen Weg. Ich bin sicher wir sind alle in der Lage persönliche Angriffe auf ein Minimum zu reduzieren und über die wenigen, die dennoch stattfinden hinwegzusehen.

Die Standardantwort auf deine Frage ist bekanntlich dass es keine beste Sprache gibt sondern nur LISP und eben alle anderen diejenige Sprache die beste ist, mit der Du das aktuelle Problem am schnellsten (wahlweise nachhaltigsten) lösen kannst. Da wir diese Antwort schon kennen sehe ich hier eher eine Austausch über persönliche Vorlieben von Programmiersprachen. Und über Geschmack lässt sich bekanntlich trefflich streiten.

Zur Not könnten wir ja auch gemeinsam über Perl ablästern. Oder mag jemand Perl? :)
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4321
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Chromanoid »

Alexander Kornrumpf hat geschrieben:Zur Not könnten wir ja auch gemeinsam über Perl ablästern. Oder mag jemand Perl?
gute idee :D wobei perl ja schneller als php ist (oder? :?: )... mmh aber der quelltext ist einfach grausig...
EyDu
Establishment
Beiträge: 102
Registriert: 24.08.2002, 18:52
Wohnort: Berlin

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von EyDu »

Lord Delvin hat geschrieben:Ich glaub du hast noch nicht verstanden, wie Speicher wirklich funktioniert, sonst würde dich das nicht wundern. Der Java GC dürfte wohl der beste sein, dens atm gibt. Wenn der bei nem gc Aufruf, der im übrigen eigentlich immer nutzlos sein sollte, irgendwas nicht einsammelt, dann nur, weil es nicht möglich ist, d.h. es gibt noch ne Referenz auf das Objekt.
Doch, den GC manuell anwerfen kann schon etwas bringen und zwar wenn man zyklische Referenzen hat:

x->y->a->b->c->a

Wenn du gerade mit dem Objekt x arbeitest und y freigibst, dann bleibt der Ring a->b->c->a übrig,da jedes Objekt einmal referenziert ist. Der Fall ist natürlich relativ selten, kann aber natürlich nicht ignoriert werden.

Was mich an Java stört ist vorallem die Unterscheidung zwischen Objekten und Basistypen wie int oder float. Man kann zwar Integer und Float verwenden, aber für eine objektorientierte Sprache finde ich diese Differenzierung schon sehr schwach. Noch gravierender finde ich nur die Mentalität, dass der Programmierer vor sich selbst geschützt werden soll. Ich mag ja schon kein public/private/protected in C++, aber mit Java habe ich immer das Gefühl, dass man an allen Ecken und Enden noch weiter beschränkt wird. Ich sage nur "Mehrfachvererbung", Getter- und Setter-Methoden, keine Überladung von Operatoren oder keinerlei Metaprogrammierung. Wobei man letzteres durch Reflection und Annotations doch noch halbwegs gut nachbauen kann.

Ich kenne auch niemanden, der in Java nun besseren Code schreiben würde. Wer in C++ schlechten Code zusammenschreibt, der wird das sicher auch in Java tun. Es hängt am Ende immerhin vom Programmierer ab, sauberen Code zu erzeugen. Und das kann man in C++ genau so gut/schlecht. Wenn ich mich zwischen Pest und Cholera, also Java und C++, entscheiden müsste, dann würde ich wohl immer C++ nehmen. Ok, als Cholera würde ich jetzt C++ nicht bezeichnen, aber es bringt einfach weniger Spaß als andere Sprachen ^^ Also ganz subjektiv ausgedrückt ;-)

Sebastian
Benutzeravatar
Krishty
Establishment
Beiträge: 8421
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Krishty »

Stephan Theisgen hat geschrieben:Auch wenn's nicht mehr ganz hier her gehört und ich definitiv zu wenig über die interne Implementierung des GC in Java kenne, so vermute ich das der Grund war, das ich den Speicher immer wieder genau in der Größe gebraucht habe und er sich dann vielleicht als interne Optimierung überlegt, hey wieso freigeben, da ist noch genug da im System und der braucht den gleich ja sowieso wieder... Das ist in fast 100% der Fälle auf fast jedem PC richtig, nur bei mir auf der Arbeit eben nicht, mein Rechner zuhause konnte das ohne Probleme ab.
Ja, so arbeitet der GC tatsächlich. Mich überrascht nur ein wenig, dass man die Gesamtgröße nicht steuern kann … dass die VM z.B. nur die Hälfte des Speichers benutzt, wenn man der Meinung ist, dass man nicht mehr braucht?

Wie sieht das eig mit dem Adressraum in Java aus? Wieviel steht zur Verfügung?

Erinnert mich übrigens ein bisschen an den guten alten Schwächen-von-C++-Thread … :)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Aramis »

Erinnert mich übrigens ein bisschen an den guten alten Schwächen-von-C++-Thread …
Verdammt, wo sind (Einzigartiger-Smalltalk'er) und (Gelöschter-Benutzer) wenn man sie mal dringend bräuchte um diesen Thread über die 10-Seiten Marke zu heben?

Zum Thema zurück ... wie geht der Java GC nun eigentlich mit zyklischen Referenzen um? Ich weiß dass beispielsweise Python's GC eine spezielle Zusatzlogik integriert um zyklische Referenzen aufzulösen.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4321
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Chromanoid »

Krishty hat geschrieben:Ja, so arbeitet der GC tatsächlich. Mich überrascht nur ein wenig, dass man die Gesamtgröße nicht steuern kann … dass die VM z.B. nur die Hälfte des Speichers benutzt, wenn man der Meinung ist, dass man nicht mehr braucht?
z.B. mit -Xmx256m als parameter für java(.exe) kannst du festlegen, dass die java vm für das programm einen arbeitsspeicher von 256m hat...
Jörg
Establishment
Beiträge: 296
Registriert: 03.12.2005, 13:06
Wohnort: Trondheim
Kontaktdaten:

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Jörg »

Aramis hat geschrieben:wie geht der Java GC nun eigentlich mit zyklischen Referenzen um?
Es gibt nicht "den" JAVA GC. Alleine die VM von SUN bietet einige Moeglichkeiten zur Algorithmenauswahl. Wenn man soweit ist, dass man daran schrauben muss, ist es mit der "Platformunabhaengigkeit" eh vorbei, jede VM braucht dann ihr eigenes Tuning.

http://java.sun.com/javase/technologies ... ing_6.html
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4321
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Chromanoid »

Krishty hat geschrieben:Wie sieht das eig mit dem Adressraum in Java aus? Wieviel steht zur Verfügung?
http://docs.sun.com/app/docs/doc/819-3681/abeij?a=view ist aber glaube ich etwas älter...
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 635
Registriert: 05.07.2003, 11:17

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Lord Delvin »

Chromanoid hat geschrieben:
Krishty hat geschrieben:Wie sieht das eig mit dem Adressraum in Java aus? Wieviel steht zur Verfügung?
http://docs.sun.com/app/docs/doc/819-3681/abeij?a=view ist aber glaube ich etwas älter...
Stimmt auch glaub nicht mehr, zumindest hatte ich heute (auf Ubuntu Linux 64bit) n Programm mit 4GB Heap laufen.

@Zyklische Referenzen: Das ist afaik mitlerweile gefixt. Ich glaub n fullgc lauf kann das rausfinden. Aber wie der Mann in dem JavaGC Vortrag gesagt hat: Man will eigentlich immer so viel Speicher allokieren wie man bekommen kann und nix zurückgeben. Das fand ich im ersten moment überraschend, aber es hilft:D
Ein weiterer Ramriegel kostet halt einfach nix.
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
Krishty
Establishment
Beiträge: 8421
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Krishty »

Lord Delvin hat geschrieben:Stimmt auch glaub nicht mehr, zumindest hatte ich heute (auf Ubuntu Linux 64bit) n Programm mit 4GB Heap laufen.
Schon okay. Wenn mittlerweile sogar mehr als in den Tabellen gelistet zur Verfügung steht, ist das ja gut.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
dronus
Establishment
Beiträge: 114
Registriert: 11.01.2010, 01:53

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von dronus »

Der GC vollbringt unglaubliche Dinge, dass hab ich grad die Tage gemerkt...

Ich erzeuge Hunderttausend Objekte pro Sekunde, die stark in mehreren Richtungen referenziert sind ( Eltern, Kindobjekteliste, Nachbarobjekte ). Davon sind ca. 2/3 Müll im Laufe des Prozesses... die sind aber immernoch fast komplett untereinander referenziert. Da wird der GC langsam, das ganze Programm bekommt so 1s Pausen. Trotzdem unlgaublich dass er den Kram rauspulen kann.

Letztendlich sollte er besser meinen Algorithmus entsorgen :-]
Helmut
Establishment
Beiträge: 237
Registriert: 11.07.2002, 15:49
Wohnort: Bonn
Kontaktdaten:

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Helmut »

@Zyklische Referenzen
Hab ich jetzt irgendwas falsch verstanden? Das ganze Konzept eines GC in einem eigenen Thread beruht doch darauf, dass es zyklische Referenzen überhaupt geben kann. Wenn nicht, könnten wir einfach jedem Objekt nen Referenzzähler verpassen und gegebenenfalls sofort löschen. Das wäre wesentlich effizienter und es gäbe auch keine Probleme mit den Destruktoren, wie sie ja in Java und .NET vorhanden sind.

Ich fand den Problemthread C++ übrigens viel interessaner :) Java vs C++ ist doch langweilig.
EyDu
Establishment
Beiträge: 102
Registriert: 24.08.2002, 18:52
Wohnort: Berlin

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von EyDu »

Helmut hat geschrieben:@Zyklische Referenzen
Hab ich jetzt irgendwas falsch verstanden? Das ganze Konzept eines GC in einem eigenen Thread beruht doch darauf, dass es zyklische Referenzen überhaupt geben kann. Wenn nicht, könnten wir einfach jedem Objekt nen Referenzzähler verpassen und gegebenenfalls sofort löschen. Das wäre wesentlich effizienter und es gäbe auch keine Probleme mit den Destruktoren, wie sie ja in Java und .NET vorhanden sind.
In der Realität treten einfach zyklische Referenzen auf, die kannst du nicht einfach wegdefinieren ;-) Es ist ja nicht so, dass Java und .NET sich das ausgedacht hätten, sondern diese beim alltäglichen Programmieren entstehen.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4321
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Chromanoid »

@EyDu:
Helmut hat geschrieben:@Zyklische Referenzen
Hab ich jetzt irgendwas falsch verstanden? Das ganze Konzept eines GC in einem eigenen Thread beruht doch darauf, dass es zyklische Referenzen überhaupt geben kann. Wenn nicht, könnten wir einfach jedem Objekt nen Referenzzähler verpassen und gegebenenfalls sofort löschen. Das wäre wesentlich effizienter und es gäbe auch keine Probleme mit den Destruktoren, wie sie ja in Java und .NET vorhanden sind.
@Zyklische Referenzen
jo ein gc wurde in java genau für sowas eingebaut. der gc macht mehr als nur referenzen zählen. Bei Objective-C (für iphone) wird genau das übrigens benutzt... zyklische referenzen werden in java eigentlich immer erkannt und weggehauen. siehe auch http://de.wikipedia.org/wiki/Garbage_Collection :)

Man muss bei Java eigentlich nur bei der GUI Programmierung aufpassen... Da baut man nämlich manchmal aus versehen durch listener usw. speicherlecks...
dronus
Establishment
Beiträge: 114
Registriert: 11.01.2010, 01:53

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von dronus »

Stephan Theisgen hat geschrieben: Auch wenn ich vorher noch nie etwas in Java programmiert hatte, so habe ich doch in atemberaubender Zeit das Programm fertig bekommen.
Das kann ich nur bestätigen.. nach jahrelangem Programmieren, in dem ich unzählige Spiele in unzähligen Sprachen angefangen hab, hatte ich mit Java zum ersten und einzigen mal eines fertiggestellt ( http://www.hirnsohle.de/xap.htm ). Hat grad zwei Wochen gedauert, incl. GFX + Sound (excl. Idee, es ist ein Amiga-Clone). Ich war erstaunt wie "spieltauglich" das JRE war, so sind die Knochen-Schriften im Spiel mit wenigen Codezeilen durch die Font- und Splineengine aus dem JRE erstellt.
Benutzeravatar
Krishty
Establishment
Beiträge: 8421
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Krishty »

Können wir uns zwischendurch auf sowas (exemplarisch) einigen? Nur, damit wir nach vielen Beiträgen nicht wieder am Anfang … anfangen.
Lernkurve.png
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Alexander Kornrumpf
Moderator
Beiträge: 2198
Registriert: 25.02.2009, 13:37

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Alexander Kornrumpf »

:D

Apropos Betriebssysteme wir haben hier SunRays stehen, auf dem Server lauft Solaris und das Frontend ist auf irgendeine Weise die ich bis jetzt immer zu faiul war zu ergruenden mit Java gebuendelt. Weiss jemand da Details?

Und koenntest du denselben Plot bitte auch mit "Komplexitaet" als Ordinate machen und im anderen Thread posten? Dann waere das auch abgehakt.
Virus
Beiträge: 38
Registriert: 20.09.2002, 17:28
Kontaktdaten:

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Virus »

Krishty hat geschrieben:Können wir uns zwischendurch auf sowas (exemplarisch) einigen? Nur, damit wir nach vielen Beiträgen nicht wieder am Anfang … anfangen.
Lernkurve.png
Sorry, aber das ist doch einfach mal lächerlich.
Ich verstehe echt nicht, warum sich nicht einige abfinden können damit, dass es auch noch was anderes brauchbares gibt neben C++, mit dem man ebenso gut arbieten kann?
Sicher gibt es Dinge, für die Java schlechter (eventuell auch gar nicht) geeignet ist als C++. Genauso allerdings auch andersrum. Um einfache Tools zu schreiben die nicht viel drumherum brauchen finde ich halt angenehmer, man ist einfach schneller.
Toll ich auch Eclipse: Schickes Framework, um komplexe (RCP-)Applikationen zu entwickeln (gibt es überhaupt etwas vergleichbares für C++)?

Java ist schlecht noch irgendwas. Genauso C++. Für viele Dinge kommt man (denke ich) mit Java schneller zum Ziel (vorrausgesetzt man ist in beiden Sprachen fit). Aber dennoch ist es nicht "besser", noch "schlechter" oder weniger effizent...
dronus
Establishment
Beiträge: 114
Registriert: 11.01.2010, 01:53

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von dronus »

Krishty hat geschrieben:Können wir uns zwischendurch auf sowas (exemplarisch) einigen?
Vielleicht auf sowas: Bild

Virus hat geschrieben: Für viele Dinge kommt man (denke ich) mit Java schneller zum Ziel (vorrausgesetzt man ist in beiden Sprachen fit).
Hängt vom Ziel ab.. ohne Wrapper wird man mit Java natürlich nie einen Graka-Treiber schreiben können..
Allerdings greift der Programmierer dann ja oft auch auf Assembler zurück, den sich C schlauerweise meist einverleibt hat :-)
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Aramis »

Danke für die Antworten zum Java GC und die Links- war äußerst interessant zu lesen.
Virus hat geschrieben: Ich verstehe echt nicht, warum sich nicht einige abfinden können damit, dass es auch noch was anderes brauchbares gibt neben C++, mit dem man ebenso gut arbieten kann?
Sehe ich ähnlich, wir kleben hier am Tellerrandproblem fest.
Krishty hat geschrieben: Können wir uns zwischendurch auf sowas (exemplarisch) einigen? Nur, damit wir nach vielen Beiträgen nicht wieder am Anfang … anfangen.
Das nächste Mal bei Diagrammen bitte objektiv bewertbare Größen als Achsen nehmen :-)
PS: Vielleicht sollte man es aber tatsächlich dabei belassen. Neue Erkenntnisse werden wir nicht mehr gewinnen.
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 635
Registriert: 05.07.2003, 11:17

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Lord Delvin »

Virus hat geschrieben:Ich verstehe echt nicht, warum sich nicht ...
Weil du nicht verstehst, dass die Gedanken anderer nicht in deinem Kopf sondern auch in den entsprechenden Köpfen gedacht werden. Ziemlich simples Konzept - macht jeder falsch. Ich auch; viel zu oft.

Außerdem sind die meisten Annahmen die hier gemacht werden nicht besonders sinnvoll. Warum redet ihr überhaupt drüber? Vor allem so. Ich war zwischendurch auch mal geneigt C++ den Rücken zu kehren, aber schreib einfach mal ", public Singleton<KlassenName>" in Java:)

@Lernkurve: Seh ich so ähnlich, allerdings würd ich gegen die Projektlebensdauer und nicht gegen die Projektgröße auftragen. Is aber trotzdem n Flamerbild:D
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
Krishty
Establishment
Beiträge: 8421
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ist Java wirklich so schlecht? (siehe Thema Komplexität)

Beitrag von Krishty »

dronus hat geschrieben:Allerdings greift der Programmierer dann ja oft auch auf Assembler zurück, den sich C schlauerweise meist einverleibt hat :-)
Immer wieder Assembler :roll:
Microsofts 64-Bit-Compiler unterstützt garkein Inline-Assembly mehr (stattdessen Intrinsics, die theoretisch auch in jeder anderen Sprache funktionieren könnten). Auf 32-Bits ist der Inline-Assembler weder portabel noch wird er vom Compiler optimiert. Assembler in C++ zu benutzen ist heutzutage nicht schwerer und nicht leichter als in jeder anderen Sprache, die Fremd-Code linken kann. Assembler ist kein C++-Feature, sondern nur eine offen gelassene Tür. (Du hast natürlich nur von C geschrieben, aber ich gehe mal davon aus, dass du C nicht mit Java vergleichen willst)
Aramis hat geschrieben:Das nächste Mal bei Diagrammen bitte objektiv bewertbare Größen als Achsen nehmen :)
Lord Delvin hat geschrieben:Is aber trotzdem n Flamerbild:D
Ja, mir wurde es hier gestern einfach zu ruhig. Ich wollte ja noch mehr Projekte als nur „Hello world!“ und OS eintragen, aber dann wäre ich hier mit Fackeln rausgejagt worden :)
Lord Delvin hat geschrieben:… aber schreib einfach mal ", public Singleton<KlassenName>" in Java:)
Dito.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten