schnelles java prog
-
Gregor schrieb:
Dravere schrieb:
Zudem gäbe es ja noch die folgende Möglichkeit:
System.gc();
IMHO völlig überflüssig. Keine Ahnung, warum es das überhaupt gibt.
Das sehe ich nicht so. Ich war mal auf 60 MB in einem Java Programm begrenzt. Musste allerdings ein 40 MB Bitmap laden, später entladen und gleich danach ein neues reinladen. Ich konnte da drehen und machen was ich wollte, wenn zwischen dem entfernen der letzten Referenz auf das alte Bitmap und dem laden des neuen Bitmaps kein
System.gc()
Aufruf stattfand, gab es eineOutOfMemoryException
.
Obwohl es keine Referenz mehr auf das alte Bitmap gab und dringend mehr Speicher benötigt wurde, hat der GC es doch nicht begriffen, dass er eigentlich Speicher freimachen kann. Nur wenn ich ihn explizit angewiesen habe, dann ging es.Das war übrigens mit der JVM von Sun und dem SDK 1.6. Welches Update weiss ich nicht mehr.
@knivil,
So war das allerdings nicht gemeint. Das war die falsche Einsicht! Was du gemacht hast, ist die Sache mit dem Speicher so umgebogen, dass du immer noch mit dem alten Programmierstil programmieren kannst. Statt dass du dich eben umgestellt hast :pGrüssli
-
Um nochmal auf das Geschwindigkeitsproblem von Java zurückzukommen...
Es gibt natürlich sehr einfache Möglichkeiten, Java langsam zu machen. Zum Beispiel wenn man viele kleine Objekte nutzt. Man hat in Java für jedes Objekt einen Overhead von ein paar Byte, was den benötigten Speicher betrifft. Insofern steigt der Speicherverbrauch bei vielen kleinen Objekten sehr viel schneller an, als das bei C++ Programmen der Fall ist. ...und dann erreicht man selbstverstädlich viel schneller die Grenzen des Caches und muss auf wesentlich langsameren Speicher ausweichen. So kriegt man ein Javaprogramm sicherlich ganz schnell um einen Faktor ~10 langsamer als ein entsprechendes C++ Programm.
Aber das sind halt so Punkte, bei denen man aufpassen muss. Die gibt es in jeder Sprache. Auch in C++. Ich erinnere mich an einen kleinen Benchmark mit volkard, in dem es darum ging, viele Objekte auf dem Heap zu erzeugen und dann wieder zu löschen. Java war da zuerst wesentlich schneller als C++. Letztendlich hat volkard dann einen Small-Object-Allocator gebaut, mit dem er das C++ Programm deutlich beschleunigen konnte. Aber man muss halt erstmal wissen, wo die genutzte Sprache ihre Schwächen hat. Sonst nimmt man jede Performance-Falle mit, ohne es zu bemerken.
-
tfa schrieb:
Wie soll ich was lesen, was noch gar nicht geschrieben ist, als ich meine Antwort anfing?
Sie waren von Anfang an im Post, auf den du geantwortet hast. Gregor hat sie auch mitzitiert.
@Shade Of Mine: Ja, waehrend man in C oder so alles auf den Stack packen kann, hat man in Java nur den Heap. Deswegen programmiert man in Java anders. Aber wem erzaehle ich das eigentlich hier ...
Ich geniesse jetzt die Sonne!
-
knivil schrieb:
@Shade Of Mine: Ja, waehrend man in C oder so alles auf den Stack packen kann, hat man in Java nur den Heap. Deswegen programmiert man in Java anders. Aber wem erzaehle ich das eigentlich hier ...
Dir ist schon klar was boxing ist?
-
knivil schrieb:
Sie waren von Anfang an im Post, auf den du geantwortet hast. Gregor hat sie auch mitzitiert.
Falsch!
Ich geniesse jetzt die Sonne!
Und vergiss bloß deinen Sonnenhut nicht! :p
-
wen interessiert eigentlich geschwindigkeit, mal von Spielen & sonstigem Rechenintensiven Kram abgesehen?
Also ich persönlich sitze nicht mit einer Stopuhr ausgestattet vor jedem Programmstart um danach einen Flame über 2 nanosekunden mehr zu starten.
Wenn es startet, dann startet es halt.
-
volkard schrieb:
das liegt aber dann wohl nicht an der sprache java, sondern daran, daß java inzwischen ausschließlich von untalentierten programmierern benutzt wird.
Sorry, aber das ist doch elitärer Unsinn. Ich kenne jeweils talentierte und untalentierte C++ und Java-Programmierer. Das kann man nicht pauschalisieren.
-
JC++ schrieb:
volkard schrieb:
das liegt aber dann wohl nicht an der sprache java, sondern daran, daß java inzwischen ausschließlich von untalentierten programmierern benutzt wird.
Sorry, aber das ist doch elitärer Unsinn. Ich kenne jeweils talentierte und untalentierte C++ und Java-Programmierer. Das kann man nicht pauschalisieren.
Doch, es ist so.
Deshalb fragt man auch immer nach Python kenntnissen. Ist ein super Filter.Natürlich heisst das nicht dass jeder python programmierer besser ist als ein java programmierer, aber im schnitt stimmt es.
PS:
das liegt daran dass du sprachen wie python nur lernst wenn es dich interessiert, während java, php, etc. jeder depp lernt.
-
Shade Of Mine schrieb:
das liegt daran dass du sprachen wie python nur lernst wenn es dich interessiert, während java, php, etc. jeder depp lernt.
ich dachte immer, jeder depp will c++ lernen, weil er gehört hat, dass man damit tolle spiele programmieren kann.
-
Du hast das falsch verstanden: Jedes Kind will C++ lernen, weil er gehört hat, dass man damit tolle Spiele programmieren kann. Aber jeder Depp will Java lernen, weil der Markt voll von Java-Jobs ist.
-
byto schrieb:
Jedes Kind will C++ lernen, weil er gehört hat, dass man damit tolle Spiele programmieren kann.
dabei weiss er noch nicht, dass diese ansicht auch schon um jahre überholt ist. unter windoofs und xbox ist doch C# mit XNA der trend unter spielecodern. mit dem hausbackenen c++ muss heute wirklich keiner mehr rumstokeln.
-
+fricky schrieb:
Shade Of Mine schrieb:
das liegt daran dass du sprachen wie python nur lernst wenn es dich interessiert, während java, php, etc. jeder depp lernt.
ich dachte immer, jeder depp will c++ lernen, weil er gehört hat, dass man damit tolle spiele programmieren kann.
stimmt natuerlich, aber die kommen nicht weit genug um ernsthafte programme zu schreiben. und genau das ist der punkt.
in java kann jeder depp ein programm schreiben. das ist natuerlich auf der einen seite super, weil man mit wenig aufwand viel erreichen kann - auf der anderen seite sinkt dadurch die software qualitaet weil die schwelle um als programmierer zu gelten niedriger liegt.
und das ist eben der grund warum ein grossteil der java software lahm ist. uebrigens ist das auch der selbe grund warum die meisten php anwendungen voller sicherheitsluecken sind.
-
Shade Of Mine schrieb:
stimmt natuerlich, aber die kommen nicht weit genug um ernsthafte programme zu schreiben. und genau das ist der punkt.
soll das heissen, dass nur wer durch die harte c++ schule ging, fähig ist, ernsthafte programme zu schreiben?
Shade Of Mine schrieb:
in java kann jeder depp ein programm schreiben. das ist natuerlich auf der einen seite super, weil man mit wenig aufwand viel erreichen kann - auf der anderen seite sinkt dadurch die software qualitaet weil die schwelle um als programmierer zu gelten niedriger liegt.
das sehe ich nicht so. java ermöglicht viele trivialfehler erst gar nicht, aber auch in java kann man haarsträubende fehler machen: http://www.manning.com/tate/ nur auf einem anderen niveau. möglicherweise wird dieses level vom durchschnittlichen c++ coder nie erreicht. und sollte er dennoch dort hinkommen (wenn er alle stolperfallen von c++ lange hinter sich gelassen hat), dann steht ihm ähnliches bevor. man lernt niemals aus, aber der c++ user muss besonders lange lernen.
-
+fricky schrieb:
Shade Of Mine schrieb:
stimmt natuerlich, aber die kommen nicht weit genug um ernsthafte programme zu schreiben. und genau das ist der punkt.
soll das heissen, dass nur wer durch die harte c++ schule ging, fähig ist, ernsthafte programme zu schreiben?
Les dir doch die vorherige Seite nochmals durch, genauer Shade's Postings.
-
Jetzt hab ich mir den rest den ihr geschrieben habt noch durchgelesen und es wurde oft behauptet, dass man mit Java auch schnelle progs machen kann, aber es wurde bis jetzt kein Java prog genannt, dass schnell ist. Außer Eclipse mit ner nicht Java GUI. Gibts eigentlich ne JVM die in Java ... ne
-
volkard schrieb:
generpft schrieb:
Wen interessieren irgendwelche unrealistischen Benachmarks. Wir haben z.B. 2 kleinere gekaufte Programme in der Firma die umgefähr das gleiche machen, auf DBs zugreifen und schrieben. Das eine in Java braucht sicher 30 Sekunden zum starten und ist in der Bedienung lahm (speichern von ein paar einfachen änderungen braucht ca. 5 Sek.). Das andere ist wahrscheinlich in C++ geschrieben, startet in 1-2 Sekunden, speichern brauch praktisch keine Zeit, klick und fertig. Und das schnellere nicht Java Programm hat auch noch mehr DB einträge.
das liegt aber dann wohl nicht an der sprache java, sondern daran, daß java inzwischen ausschließlich von untalentierten programmierern benutzt wird.
ist sowas wie die häufung von abstürzprogrammen in freeware und shareware bei der sprache delphi. oder das häufige programmsterben wegen übersichtsverlust in basic.Das ist sicherlich richtig, genau so wie man nicht C++ benutzt, um ernsthafte Anwendungen oder Linux-kernel zu schreiben. Ich meine, Korrelation != Kausalität, C++ macht die Leute nicht dumm -- nur dass die schlauen Ratten das Schiff schon vorher verlassen.
-
generpft schrieb:
Jetzt hab ich mir den rest den ihr geschrieben habt noch durchgelesen und es wurde oft behauptet, dass man mit Java auch schnelle progs machen kann, aber es wurde bis jetzt kein Java prog genannt, dass schnell ist. Außer Eclipse mit ner nicht Java GUI. Gibts eigentlich ne JVM die in Java ... ne
Tomcat, Glassfish, JBoss AS, Derby, ... alle schnell.
Eclipse, Netbeans, IntelliJ IDEA, Elsterformular, ... alle schnell.
Ein in Java geschriebenes Hello World ... schnell.
Mein aktuelles Projekt (3-Schicht mit Swing Client) ... schnell.
Haufenweise in Java geschriebene Individualsoftware ... schnell.
Naja, aber wenn Du es nicht hinbekommst, schnelle Java Software zu schreiben, nichts für ungut. Man lernt ja nie aus. Insofern ist vielleicht noch nicht alles verloren.
-
...außerdem hinkt der ewige Vergleich zw. C++ und Java bezüglich Geschwindigkeit: C++ ist definitiv schneller als Java, schön. Aber dafür hat Java auch Vorteile.
Wäre es besser z.B. ein Web-Framework ala Spring in C++ zu implementieren, weil es schneller ist?
Wieviele Abstürze in C/C++-Applikationen basieren eigentlich auf Memory Leaks? Sind da nicht recht viele untalentierte C++ Programmierer am Werk? Ok, die müssen wohl alle mit Java angefangen haben
-
+fricky schrieb:
Shade Of Mine schrieb:
stimmt natuerlich, aber die kommen nicht weit genug um ernsthafte programme zu schreiben. und genau das ist der punkt.
soll das heissen, dass nur wer durch die harte c++ schule ging, fähig ist, ernsthafte programme zu schreiben?
Würde ich zwar nicht so pauschalisieren, aber im Prinzip könnte da was dran sein... Kenn viele Leute die einfach mal so mit Java angefangen haben, die einfach nur schlechte Programm entwickeln. Im Gegenzug kenn ich auch einige die vorher auch mal was anderes gemacht haben bzw. allgemeiner ein gutes Verständnis von dem haben was untenv drunter eigentlich abgeht. Das ist einfach ein Riesenunterschied...
Der Glaube, dass man in Java fast gar nichts falsch machen kann und es relativ einfach ist gute Programme zu entwickeln ist ja weit verbreitet. In Wirklichkeit gibt es da aber auch jede Menge Fallstricke, nur werden die nicht gleich sofort so hart wie in C++ bestraft, sondern man kriegt eben meist doch irgendwas hin was einigermaßen läuft.
-
nep schrieb:
+fricky schrieb:
Shade Of Mine schrieb:
stimmt natuerlich, aber die kommen nicht weit genug um ernsthafte programme zu schreiben. und genau das ist der punkt.
soll das heissen, dass nur wer durch die harte c++ schule ging, fähig ist, ernsthafte programme zu schreiben?
Würde ich zwar nicht so pauschalisieren, aber im Prinzip könnte da was dran sein... Kenn viele Leute die einfach mal so mit Java angefangen haben, die einfach nur schlechte Programm entwickeln. Im Gegenzug kenn ich auch einige die vorher auch mal was anderes gemacht haben bzw. allgemeiner ein gutes Verständnis von dem haben was untenv drunter eigentlich abgeht. Das ist einfach ein Riesenunterschied...
Der Glaube, dass man in Java fast gar nichts falsch machen kann und es relativ einfach ist gute Programme zu entwickeln ist ja weit verbreitet. In Wirklichkeit gibt es da aber auch jede Menge Fallstricke, nur werden die nicht gleich sofort so hart wie in C++ bestraft, sondern man kriegt eben meist doch irgendwas hin was einigermaßen läuft.Da hast du zu 100% den Nagel auf den Kopf getroffen. Denn es ist ein Irrglaube, dass man keine Ahnung haben muss/soll was unter der Haube abgeht. Hierbei meine ich keineswegs, dass man sämtliche Implementierungsdetails kennen muss, aber einen groben Überblick sollte man schon haben, das fördert das Verständnis ungemein. Und dieses Wissen kommt ganz von alleine, wenn man sich ernsthaft mit etwas auseinandersetzt. Also jetzt bitte nicht flamen, dass man ja gar nicht wissen müsse wie eine Sprache/Bibliothek aufgebaut/implementiert ist. Trollt einfach mal nicht, sondern benutzt euren gesunden Menschenverstand, dann versteht ihr auch was ich meine