schnelles java prog



  • knivil schrieb:

    bevor eine OutOfMemoryException fliegt

    Lesen, verstehen, antworten ...

    Deswegen steht "out of memory ..." ja auch in Anfuehrungszeichen

    Wie soll ich was lesen, was noch gar nicht geschrieben ist, als ich meine Antwort anfing? 😡

    Trotzdem netter Versuch, sich aus der Affäre zu ziehen.



  • 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.

    Höchstens während des Testens brauchbar. In fertiger Software sinnlos.



  • +fricky schrieb:

    nö, nicht wirklich. einer funktion sieht man beim aufruf schon an, dass sie eine funktion ist. zweitens ist die bedeutung von operatoren vorbelegt (ein - steht z.b. für subtrahieren), was sinnvolles überladen stark einschränkt, wenn die aussage: 'ziehe x von y ab' erhalten bleiben soll.
    🙂

    selbes gilt für eine funktion mit namen subtract oder divide oder add 😉
    ups.
    add ist ja garnicht so deutlich...

    @knivil:
    in den wind geraten -> du hattest zuviel boxing/unboxing im code.

    der gc ist nämlich der vorteil von java in der geschwindigkeit.



  • Lasst doch das arme Java in Ruhe, es wurde doch schon mit sich selber genug gestraft...



  • 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 anders. Es gibt durchaus Anwendungsfälle dafür. Siehe z.B. in der Eclipse IDE die Heap Size Anzeige in der Statusleiste. Da kannst Du über den Button den GC manuell triggern. Das ist durchaus manchmal nützlich.

    Auch in anderen Anwendungen fallen mir Usecases ein. Man könnte den GC manuell triggern zur Idletime, wenn man weiss, dass gleich Last kommt.



  • The-Kenny schrieb:

    +fricky schrieb:

    welch hartes urteil. die chance, schwer verständlichen code zu schreiben, ist hoch, wohingegen der nutzen überladener operatoren gering ist.
    schau auch mal hier: http://yosefk.com/c++fqa/operator.html
    🙂

    Das einzige angeführte Argument gegen das Überladen von operator[] ist, dass manche IDE's diesen Syntax nicht mit ihrem IntelliSense (Ich nenne es mal so) verstehen...

    na, eigentlich dass es oft nicht gut ist, wenn sich dinge als array ausgeben, die keine sind. und wenn's rumzickt, dann muss man suchen, was sich hinter dem [] eigentlich verbirgt.
    🙂


  • Administrator

    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 eine OutOfMemoryException .
    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 :p

    Grü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.


Anmelden zum Antworten