Abo
  1. Foren
  2. Kommentare
  3. Software-Entwicklung
  4. Alle Kommentare zum Artikel
  5. › Lively Kernel…

Java ist langsam, und die Erde ist eine Scheibe

Anzeige
  1. Thema

Neues Thema Ansicht wechseln


  1. Java ist langsam, und die Erde ist eine Scheibe

    Autor: /mecki78 08.10.07 - 22:35

    War ja klar das wieder das alte "Java ist langsam" kommt. Oh man. Manche Gerüchte sterben nie, oder?

    Also, Java ist eine Sprache! Eine Sprache an sich kann weder langsam noch schnell sein. Erst ein Compiler oder Interpreter macht eine Sprache langsam oder schnell. Bau doch mal das gleiche C File, mal mit GCC, mal mit Visual-C und mal mit Intel's Compiler und dann schau ob die alle gleich schnell sind. Oh Wunder, sind sie nicht!

    Also, Java ist langsam... okay, im Vergleich zu WAS?

    Java ist schneller als PHP, z.B. Ca 50% des gesamten Web 2.0 baut doch auf PHP auf, da sagt keiner, was für ein langsamer Scheiss da auf den Servern läuft. Dabei ist eine JSP (Java Server Seite) viel schneller aufgebaut als eine PHP Seite im Schnitt (hängt natürlich davon ab, was genau der Code macht - wenn bei zu 90% SQL Anfragen machen hängt die Geschwindigkeit ja zu 90% von der SQL Datenbank ab z.B.)

    Java ist sogar schneller als Perl, mit der Ausnahme von der Stringverarbeitung und Regexen, ich glaube darin ist Perl weltmeister aller Sprachen (C Regexen sind vielleicht schneller, bin ich mir nicht sicher, aber viel hässlicher und unkonfortabler)

    Ich habe noch nie Java gegen Ruby antreten lassen, oder Phyton, aber ich kann mir nicht vorstellen, dass die deutlich schneller sind als Java, vielleicht gleich auf oder langsamer. Java ist definitiv schneller als Smalltalk.

    So, jetzt haben wir schon eine ganze Menge Sprachen durch und Java steht gar nicht so schlecht da. Deutlich schneller als JavaScript ist es auch, davon ab. Und schneller als Basic sowieso und tausende von Windows Apps sind in VisualBasic geschrieben, nur mal so nebenbei. Bisher konnte es auch immer C# mit .NET noch gut im Zaum halten (immer mehr Apps werden darin geschrieben, obwohl es nicht schneller ist als Java).

    Das liegt daran, dass Java einen verdammten guten JIT Compiler hat, aber genau das ist das Problem: Der hat eigentlich nichts mit Java zu tun. Ich kann den theoretisch auch für eine andere Sprache nutzen (solange sie OO ist und Type-Safe) und dann wird die auch so schnell. Genauso wie man den GCC ja auch für andere Sprachen nutzen kann (Fortran z.B.).

    Java ist sicherlich nicht so schnell wie C, warum? Weil C ein abstrahiertes Assembler ist und extrem maschienennah (C Code in Assembler umzuwandeln ist keine Magie - also per Hand und langsam, ich bewundere ja Leute, die einen Compiler schreiben, der das in Sekunden kann).

    Aber C++ ist nicht gleichzusetzen mit C. Wenn ich anfange Objekte zu erzeugen, mit Mehrfachvererbung, usw. dann ist das nicht mehr so leicht wie C, wo der Compiler einfach mal aus jedem Funktionsaufruf einen CALL machen kann. Da muss er zur Laufzeit arbeiten und so arbeitet auch Java. Java hat genauso einen Compiler wie GCC einer für C++ ist, nur Java macht eben (fast) alles erst zur Laufzeit, C++ macht vieles zur Compilezeit und nur manches zur Laufzeit. C macht aber in der Regel nichts zur Laufzeit und daher kann man C nicht so einfach schlagen.

    Wobei man kann schon. Manche mathematischen Formeln sind schneller, wenn man sie in Fortran schreibt. Warum? Fortran ist viel älter als C und Fortran Compiler haben eine Reifegrad erreicht, da muss C erstmal hin.

    Am schnellsten is Assembler, schneller als das kann man nicht sein. Aber während man bei C oder Java auf den (JIT) Compiler schimpfen kann, der nicht gescheit optimiert, ist da bei Assembler nichts zu machen. Man muss alles von Hand selber optimieren und kann nur auf sich selber schimpfen, denn die meisten Assembler Compiler sind recht dumm und setzen deine Befehle eins-zu-eins in Maschienencode um, so wie sie da stehen (vielleicht mit wenigen Ausnahmen).

    Doch gerade weil Java so viel zur Laufzeit macht, kann es manchmal schneller sein als C++. Bei C++ muss der Compiler nur anhand deines Codes abschätzen, wie dein Programm mal später laufen wird. Da optimiert er eine Funktion wie doof, die aber nur 2x aufgerufen wird beim Start und eine andere nur wenig, die aber einmal pro Millisekunde aufgerufen wird. So was kann er nicht wissen. Bei Java kann er sich es aber anschauen. Er sieht genau wie dein Programm läuft, wo er viel Zeit verbringt und wo wenig. Das ist ein unschätzbarer Vorteil. Das geht zwar mitlerweile bei C/C++ auch, erst mal bauen, dann mit einen Profiler starten, der sich gewisse Dinge merkt und dann nochmal bauen. Wird aber sehr wenig in der Praxis benutzt... soweit ich das als Programmierer erlebt habe.

    Und noch was, die Standartbibliothek von Java ist gigantisch gross, sie lässt C und C++ eher ärmlich da stehen (C noch viel ärmlicher als C++). Das heisst viel Komfort beim Programmieren und kurze Entwicklungszeit (mehr fertigen Code nehmen, weniger Code selber schreiben).

    Warum ist Java dann oft so langsam? Weil dein System nicht genug RAM hat. Anders als bei C/C++ wo du genau sagst wann du Speicher willst und wann du ihn nicht mehr brauchst, sagst du bei Java nur wann du welchen willst. Speicher, den du nicht mehr brauchst lässt du einfach liegen, die Umgebung räumt ihn für dich auf. Aber sie lässt sich dabei viel Zeit. Weil bei Aufräuhmen geht CPU Zeit drauf, die das System woanders besser gebrauchen kann, daher lässt sie lieber den Speicher liegen und das macht das ganze oft so langsam, zeitenweise fängt er dann sogar an auszulagern (was aber wieder eine Schwäche von Windows ist. Kein System lagert so früh schon so viel Zeugs aus, obwohl noch so viel Speicher vorhanden ist. Bei XP half es da ungemein wenn man sein System in den Server Modus versetzt hat, weil im Client Modus lagert er viel aggressiver aus - nur MS weiss warum). Andereseits, wenn du nur Java benutzen würdest (wenn dein ganzes System Java wäre), dann könnte man das ganze in das System tief integrieren und dann würde es auch viel besser laufen. Das ganze Verfahren heisst BTW Garbage Collection.

    Zu guter letzt noch: Java ist nicht gleich Java. Es hängt stark vom System darunter ab. Auf Linux Systemen finde ich es z.B. tatsächlich recht langsam, auch bei UI Sachen (die X11 Optimierung ist noch ausbaufähig und Linux ist halt ein stark C basiertes System, das meiste dort ist nunmal in C, abgesehen von einigen C++ Domänen, wie z.B. KDE - Java passt da nicht so gut rein irgendwie). Auf Windows startet es recht langsam, läuft dann aber sehr flott, auch die UI Sachen mitlerweile (Windows ist viel mehr C++ als Linux). Hin und wieder hat es kleine Hänger, das liegt glaube ich am Garbage Collector. Am besten gefällt es mir am Mac. Hier läuft es zwar etwas langsamer, aber sehr gleichmässig, fühlt sich fast wie Objective-C an (die Sprache in der mitlerweile fast alles geschrieben ist am Mac) und es läuft auch gleichmässig schnell. Vielleicht weil das System auf Obj-C ausgelegt ist (Obj-C ist *NICHT* C++ und es ist sehr Java ähnlich. Bekommt sogar gerade einen echten Garbage Collector).

    Und man darf auch nicht vergessen, nicht nur Sun hat eine Java Umgebung. Es gibt auch z.B. Java 1.4 von IBM, das im Schnitt deutlich schneller als das von Sun ist (Stringoperationen z.B. sind da hoch optimiert). Und GCC kann sogar Java Code in echten nativen Code umwandeln, nur UI Dinge gehen da nicht (oder fast nicht, AWT geht glaube ich). Hier steht es C++ in nichts nach, ausser eben die Sache mit dem Garbage Collector. Dafür spart ein GC unglaublich viel Entwicklungsarbeit (bei jedem grösseren Projekt dass ich hatte, musste ich gut 10% der Zeit für ein sauberes Speichermanagment und Memory Hole Debbugging, sowie Speicherfehlerdebugging aufbringen, bei Java entfällt das alles komplett, es *läuft* einfach). Das gleiche gilt natürlich für andere GC Sprachen auch.

    Und jetzt noch ein ultimatives Beispiel aus der Praxis. JavaScript wird ja interpretiert. Der JS Interpreter von Firefox ist in C oder C++ geschrieben. Der ist nicht schlecht, aber nicht einer der schnellsten. Es gibt aber ein Projekt, da ist der in Java geschrieben, das Projekt heisst Rhino (siehe Link):

    http://www.mozilla.org/rhino/

    Bei Benchmarks habe ich festgestellt, dass der teilweise JavaScript Code schneller ausführen kann, als der in C/C++ geschriebene. Ich weiss nicht warum, aber ich denke die JIT Optimierung kommt hierbei indirekt auch auf den JS Code zum tragen, während ein C++ Interpreter eben nur Compilezeit optimiert ist. Dafür braucht er eben ne ganze Ecke mehr Speicher. Java ist ein System für Rechner ab 2 GB RAM aufwärts (auf einen 4 GB System macht es richtig Spass riesige Java Projekte zu haben!) - aber gerade wie Java noch jung war haben es damals viele auf 256 MB RAM Systemen das erste mal erlebt und waren entsprechend enttäuscht.

  2. Re: Java ist langsam, und die Erde ist eine Scheibe

    Autor: max17 09.10.07 - 08:49

    Man war das umfassend. Ich habe nicht alles gelesen, aber ich denke ... ja ist soweit auch richtig.
    Trotzdem: Java benötigt eine Laufzeitumgebung, diese ist aktuelle ziemlich Ressourcenhungrig und daraus resultiert der subjektive Eindruck, dass Java langsam ist. Joo, PHP benötigt halt weniger Ressourcen, und deshalb kann ich Deine Annahme PHP ist langsamer als Java so nicht bestätigen...
    Kommt halt alles ein wenig auf die Umgebung an.
    Zu guter letzt: Java, PHP, PERL,... sind doch alles Interpreter, die in C geschrieben sind, oder!!!

  3. Re: Java ist langsam, und die Erde ist eine Scheibe

    Autor: lulli 09.10.07 - 11:01

    /mecki78 schrieb:
    -------------------------------------------------------
    > War ja klar das wieder das alte "Java ist langsam"
    > kommt. Oh man. Manche Gerüchte sterben nie, oder?
    >
    > Also, Java ist eine Sprache! Eine Sprache an sich
    > kann weder langsam noch schnell sein. Erst ein
    > Compiler oder Interpreter macht eine Sprache
    > langsam oder schnell. Bau doch mal das gleiche C
    > File, mal mit GCC, mal mit Visual-C und mal mit
    > Intel's Compiler und dann schau ob die alle gleich
    > schnell sind. Oh Wunder, sind sie nicht!
    >
    > Also, Java ist langsam... okay, im Vergleich zu
    > WAS?
    >
    > Java ist schneller als PHP, z.B. Ca 50% des
    > gesamten Web 2.0 baut doch auf PHP auf, da sagt
    > keiner, was für ein langsamer Scheiss da auf den
    > Servern läuft. Dabei ist eine JSP (Java Server
    > Seite) viel schneller aufgebaut als eine PHP Seite
    > im Schnitt (hängt natürlich davon ab, was genau
    > der Code macht - wenn bei zu 90% SQL Anfragen
    > machen hängt die Geschwindigkeit ja zu 90% von der
    > SQL Datenbank ab z.B.)
    >
    > Java ist sogar schneller als Perl, mit der
    > Ausnahme von der Stringverarbeitung und Regexen,
    > ich glaube darin ist Perl weltmeister aller
    > Sprachen (C Regexen sind vielleicht schneller, bin
    > ich mir nicht sicher, aber viel hässlicher und
    > unkonfortabler)
    >
    > Ich habe noch nie Java gegen Ruby antreten lassen,
    > oder Phyton, aber ich kann mir nicht vorstellen,
    > dass die deutlich schneller sind als Java,
    > vielleicht gleich auf oder langsamer. Java ist
    > definitiv schneller als Smalltalk.
    >
    > So, jetzt haben wir schon eine ganze Menge
    > Sprachen durch und Java steht gar nicht so
    > schlecht da. Deutlich schneller als JavaScript ist
    > es auch, davon ab. Und schneller als Basic sowieso
    > und tausende von Windows Apps sind in VisualBasic
    > geschrieben, nur mal so nebenbei. Bisher konnte es
    > auch immer C# mit .NET noch gut im Zaum halten
    > (immer mehr Apps werden darin geschrieben, obwohl
    > es nicht schneller ist als Java).
    >
    > Das liegt daran, dass Java einen verdammten guten
    > JIT Compiler hat, aber genau das ist das Problem:
    > Der hat eigentlich nichts mit Java zu tun. Ich
    > kann den theoretisch auch für eine andere Sprache
    > nutzen (solange sie OO ist und Type-Safe) und dann
    > wird die auch so schnell. Genauso wie man den GCC
    > ja auch für andere Sprachen nutzen kann (Fortran
    > z.B.).
    >
    > Java ist sicherlich nicht so schnell wie C, warum?
    > Weil C ein abstrahiertes Assembler ist und extrem
    > maschienennah (C Code in Assembler umzuwandeln ist
    > keine Magie - also per Hand und langsam, ich
    > bewundere ja Leute, die einen Compiler schreiben,
    > der das in Sekunden kann).
    >
    > Aber C++ ist nicht gleichzusetzen mit C. Wenn ich
    > anfange Objekte zu erzeugen, mit
    > Mehrfachvererbung, usw. dann ist das nicht mehr so
    > leicht wie C, wo der Compiler einfach mal aus
    > jedem Funktionsaufruf einen CALL machen kann. Da
    > muss er zur Laufzeit arbeiten und so arbeitet auch
    > Java. Java hat genauso einen Compiler wie GCC
    > einer für C++ ist, nur Java macht eben (fast)
    > alles erst zur Laufzeit, C++ macht vieles zur
    > Compilezeit und nur manches zur Laufzeit. C macht
    > aber in der Regel nichts zur Laufzeit und daher
    > kann man C nicht so einfach schlagen.
    >
    > Wobei man kann schon. Manche mathematischen
    > Formeln sind schneller, wenn man sie in Fortran
    > schreibt. Warum? Fortran ist viel älter als C und
    > Fortran Compiler haben eine Reifegrad erreicht, da
    > muss C erstmal hin.
    >
    > Am schnellsten is Assembler, schneller als das
    > kann man nicht sein. Aber während man bei C oder
    > Java auf den (JIT) Compiler schimpfen kann, der
    > nicht gescheit optimiert, ist da bei Assembler
    > nichts zu machen. Man muss alles von Hand selber
    > optimieren und kann nur auf sich selber schimpfen,
    > denn die meisten Assembler Compiler sind recht
    > dumm und setzen deine Befehle eins-zu-eins in
    > Maschienencode um, so wie sie da stehen
    > (vielleicht mit wenigen Ausnahmen).
    >
    > Doch gerade weil Java so viel zur Laufzeit macht,
    > kann es manchmal schneller sein als C++. Bei C++
    > muss der Compiler nur anhand deines Codes
    > abschätzen, wie dein Programm mal später laufen
    > wird. Da optimiert er eine Funktion wie doof, die
    > aber nur 2x aufgerufen wird beim Start und eine
    > andere nur wenig, die aber einmal pro Millisekunde
    > aufgerufen wird. So was kann er nicht wissen. Bei
    > Java kann er sich es aber anschauen. Er sieht
    > genau wie dein Programm läuft, wo er viel Zeit
    > verbringt und wo wenig. Das ist ein unschätzbarer
    > Vorteil. Das geht zwar mitlerweile bei C/C++ auch,
    > erst mal bauen, dann mit einen Profiler starten,
    > der sich gewisse Dinge merkt und dann nochmal
    > bauen. Wird aber sehr wenig in der Praxis
    > benutzt... soweit ich das als Programmierer erlebt
    > habe.
    >
    > Und noch was, die Standartbibliothek von Java ist
    > gigantisch gross, sie lässt C und C++ eher ärmlich
    > da stehen (C noch viel ärmlicher als C++). Das
    > heisst viel Komfort beim Programmieren und kurze
    > Entwicklungszeit (mehr fertigen Code nehmen,
    > weniger Code selber schreiben).
    >
    > Warum ist Java dann oft so langsam? Weil dein
    > System nicht genug RAM hat. Anders als bei C/C++
    > wo du genau sagst wann du Speicher willst und wann
    > du ihn nicht mehr brauchst, sagst du bei Java nur
    > wann du welchen willst. Speicher, den du nicht
    > mehr brauchst lässt du einfach liegen, die
    > Umgebung räumt ihn für dich auf. Aber sie lässt
    > sich dabei viel Zeit. Weil bei Aufräuhmen geht CPU
    > Zeit drauf, die das System woanders besser
    > gebrauchen kann, daher lässt sie lieber den
    > Speicher liegen und das macht das ganze oft so
    > langsam, zeitenweise fängt er dann sogar an
    > auszulagern (was aber wieder eine Schwäche von
    > Windows ist. Kein System lagert so früh schon so
    > viel Zeugs aus, obwohl noch so viel Speicher
    > vorhanden ist. Bei XP half es da ungemein wenn man
    > sein System in den Server Modus versetzt hat, weil
    > im Client Modus lagert er viel aggressiver aus -
    > nur MS weiss warum). Andereseits, wenn du nur Java
    > benutzen würdest (wenn dein ganzes System Java
    > wäre), dann könnte man das ganze in das System
    > tief integrieren und dann würde es auch viel
    > besser laufen. Das ganze Verfahren heisst BTW
    > Garbage Collection.
    >
    > Zu guter letzt noch: Java ist nicht gleich Java.
    > Es hängt stark vom System darunter ab. Auf Linux
    > Systemen finde ich es z.B. tatsächlich recht
    > langsam, auch bei UI Sachen (die X11 Optimierung
    > ist noch ausbaufähig und Linux ist halt ein stark
    > C basiertes System, das meiste dort ist nunmal in
    > C, abgesehen von einigen C++ Domänen, wie z.B. KDE
    > - Java passt da nicht so gut rein irgendwie). Auf
    > Windows startet es recht langsam, läuft dann aber
    > sehr flott, auch die UI Sachen mitlerweile
    > (Windows ist viel mehr C++ als Linux). Hin und
    > wieder hat es kleine Hänger, das liegt glaube ich
    > am Garbage Collector. Am besten gefällt es mir am
    > Mac. Hier läuft es zwar etwas langsamer, aber sehr
    > gleichmässig, fühlt sich fast wie Objective-C an
    > (die Sprache in der mitlerweile fast alles
    > geschrieben ist am Mac) und es läuft auch
    > gleichmässig schnell. Vielleicht weil das System
    > auf Obj-C ausgelegt ist (Obj-C ist *NICHT* C++ und
    > es ist sehr Java ähnlich. Bekommt sogar gerade
    > einen echten Garbage Collector).
    >
    > Und man darf auch nicht vergessen, nicht nur Sun
    > hat eine Java Umgebung. Es gibt auch z.B. Java 1.4
    > von IBM, das im Schnitt deutlich schneller als das
    > von Sun ist (Stringoperationen z.B. sind da hoch
    > optimiert). Und GCC kann sogar Java Code in echten
    > nativen Code umwandeln, nur UI Dinge gehen da
    > nicht (oder fast nicht, AWT geht glaube ich). Hier
    > steht es C++ in nichts nach, ausser eben die Sache
    > mit dem Garbage Collector. Dafür spart ein GC
    > unglaublich viel Entwicklungsarbeit (bei jedem
    > grösseren Projekt dass ich hatte, musste ich gut
    > 10% der Zeit für ein sauberes Speichermanagment
    > und Memory Hole Debbugging, sowie
    > Speicherfehlerdebugging aufbringen, bei Java
    > entfällt das alles komplett, es *läuft* einfach).
    > Das gleiche gilt natürlich für andere GC Sprachen
    > auch.
    >
    > Und jetzt noch ein ultimatives Beispiel aus der
    > Praxis. JavaScript wird ja interpretiert. Der JS
    > Interpreter von Firefox ist in C oder C++
    > geschrieben. Der ist nicht schlecht, aber nicht
    > einer der schnellsten. Es gibt aber ein Projekt,
    > da ist der in Java geschrieben, das Projekt heisst
    > Rhino (siehe Link):
    >
    > www.mozilla.org
    >
    > Bei Benchmarks habe ich festgestellt, dass der
    > teilweise JavaScript Code schneller ausführen
    > kann, als der in C/C++ geschriebene. Ich weiss
    > nicht warum, aber ich denke die JIT Optimierung
    > kommt hierbei indirekt auch auf den JS Code zum
    > tragen, während ein C++ Interpreter eben nur
    > Compilezeit optimiert ist. Dafür braucht er eben
    > ne ganze Ecke mehr Speicher. Java ist ein System
    > für Rechner ab 2 GB RAM aufwärts (auf einen 4 GB
    > System macht es richtig Spass riesige Java
    > Projekte zu haben!) - aber gerade wie Java noch
    > jung war haben es damals viele auf 256 MB RAM
    > Systemen das erste mal erlebt und waren
    > entsprechend enttäuscht.

    Es geht hier nicht um Java.

  4. Re: Java ist langsam, und die Erde ist eine Scheibe

    Autor: DaCroci 09.10.07 - 11:32

    Dummer Junge!

    JavaScript != Java

  5. Re: Java ist langsam, und die Erde ist eine Scheibe

    Autor: /mecki78 09.10.07 - 11:42

    max17 schrieb:
    -------------------------------------------------------

    > Trotzdem: Java benötigt eine Laufzeitumgebung,
    > diese ist aktuelle ziemlich Ressourcenhungrig und
    > daraus resultiert der subjektive Eindruck, dass
    > Java langsam ist.

    Perl, Python, PHP, Ruby, Smalltalk, etc. brauchen so was aber auch. Das Problem ist, dass die Laufzeitumgebung erst mit dem ersten Start einer Java App geladen wird (das Problem haben sie alle). Grosse Teile dieser Umgebung können sich mehrere Prozesse teilen (Shared Memory, liegt nur einmal im Speicher), d.h. die zweite Java App braucht viel weniger *echte* Resourcen als die erste (weil sich eben beide viele Resourcen teilen). Hier könnte Sun was machen. Einfach beim Start von Windows die Umgebung mitladen und immer im Speicher halten. Sie dürfte so zwischen 4 und 16 MB brauchen (beim Start 4, mit jeder neuen Java App wird sie etwas grösser, weil sie dynamisch Code nachlädt, dieser aber im Speicher verbleibt... mehr als 16 sollte sie nicht verbrauchen, auch nach Stunden langen betrieb und vielen Java Apps die gestartet/gestoppt wurden), die sind dann halt permanent weg, aber dafür würde Java so schnell starten wie eine native App.

    C/C++ Apps haben auch indirekt eine Laufzeitumgebung. Sie haben Libraries, die sie sich teilen. Auch die müssen erstmal in den Speicher. Nur weil MS die ja selber benutzt in Windows sind sie in 99,9% aller Fälle bereits im Speicher, müssen also für die nächste native App gar nicht erst geladen werden. Schau mal wie viele DLLs du in Windows permanent im Speicher hast, die permanent Speicher weg nehmen. Deutlich mehr als 32 MB! Nur sind die immer schon da, während die Java DLLs erst beim ersten Start von Java geladen werden und beim beenden der letzten Java App wieder aus dem Speicher geworfen werden.

    > Joo, PHP benötigt halt weniger
    > Ressourcen, und deshalb kann ich Deine Annahme PHP
    > ist langsamer als Java so nicht bestätigen...
    > Kommt halt alles ein wenig auf die Umgebung an.


    Umm.... kleiner Test. Sehr simples PHP Programm (habe ich hier extra kompakt geschrieben):

    function appendToString(&$string)
    {
    $string .= ".";
    }
    $startTime = time();
    echo "PHP started...\n";
    $string = "";
    $counter = 1;
    for ($i = 0; $i < 5000000; $i++) {
    $counter = $counter + 3;
    appendToString($string);
    }
    echo "String has length of ".strlen($string)." and counter is ".$counter."\n";
    echo "PHP Script took ".(time()-$startTime)." seconds to run.\n";
    ?>


    So, lassen wir das mal laufen:

    time php -q test.php

    time deswegen, weil es auch die Startzeit des Interpreters mit erfasst. Mein System ist komplett Idle zu dem Zeitpunkt:

    PHP started...
    String has length of 5000000 and counter is 15000001
    PHP Script took 7 seconds to run.

    real 0m7.327s
    user 0m7.288s
    sys 0m0.023s

    Also faktisch 7,327 Sekunden.

    Nun das ganze in Java (der Code macht exakt das Gleiche):

    public class test {
    public static void appendToString(StringBuffer str)
    {
    str.append(".");
    }
    public static void main(String[] args)
    {
    int i;
    StringBuffer string;
    int counter;
    long startTime;
    startTime = System.currentTimeMillis();
    System.out.println("Java started...");
    string = new StringBuffer();
    counter = 1;
    for (i = 0; i < 5000000; i++) {
    counter = counter + 3;
    appendToString(string);
    }
    System.out.println(
    "String has length of "+string.length()+" and counter is "+counter
    );
    System.out.println(
    "Java Code took "+((System.currentTimeMillis()-startTime)/1000)+
    " seconds to run"
    );
    }
    }


    Kompelieren und starten:

    javac test.java
    time java test

    Ergebnis:

    Java started...
    String has length of 5000000 and counter is 15000001
    Java Code took 0 seconds to run

    real 0m0.596s
    user 0m0.530s
    sys 0m0.059s


    Hmmm... na so was, fliegt schon raus aus meinem Wertebereich. Laut time brauchte das ganze, inkl. Start der JRE knapp über ne halbe Sekunde. Das ist mehr als 10x schneller!

    Aber sind wir fair, schalten wir mal den JIT ab und lassen Java *rein* interpretiert laufen (schliesslich habe ich auch keinen PHP JIT am laufen):

    time java -Xint test

    Und:

    Java started...
    String has length of 5000000 and counter is 15000001
    Java Code took 3 seconds to run

    real 0m3.548s
    user 0m3.449s
    sys 0m0.052s


    Na sowas, Java gewinnt immer noch deutlich, selbst rein interpretiert... hmmm.

    Okay, Speicherverbrauch. Also, laut meinen Speicher Profiler braucht das PHP Skript maximal ca 6,35 MB RAM. Java hingegen braucht ganze 36,8 MB, was wohl daran liegt, dass der GC kein einziges mal gelaufen ist. Naja, kein Wunder, lohnt sich ja wohl auch kaum innerhalb von nur ein paar ms.

    Aber mein Punkt war, Java ist schneller und es ist schneller und das sogar *deutlich*. Klar braucht es mehr RAM... aber du musst da so sehen. Wenn 100 Nutzer dein PHP Skript gleichzeitig aufrufen per HTTP, dann kostet dich das (wir vergessen mal shared resources für einen Moment)

    100 * 6,35 = 635 MB für ca 7 Sekunden

    Nun, wenn du 635 MB RAM hast und würdest Java nehmen, könntest du nur

    635 / 36,8 = ~17

    17 Nutzer gleichzeitig bedienen, dann wären deine 635 MB aufgebraucht. D.h. du musst die Anzahl der Java Prozesse beschränken (das geht; so kanst du den Speicherverbrauch im Zaum halten). Da die aber nach nur 596 ms bedient sind, dauert das ganze dann

    100 / 17 * 0,596 s = ~3,5 s

    D.h. du hättest 100 Nutzer in 3,5 s bedient mit Java und dabei auch nicht mehr als 635 MB gebraucht, während du bei PHP 7 s gebraucht hast, um die gleiche Anzahl Nutzer zu bedienen. Und bei PHP wären die 635 MB die vollen 7 Sekunden weg, bei Java wird nach 3,5 s der gesamte Speicher wieder frei (d.h. die könntest in den nächsten 3,5 s wieder 100 Leute bedienen, während du bei PHP dann schon doppelt so viel RAM bräuchtest wenn nochmal 100 Anfragen nach 3,5 s rein kommen).

    Java gewinnt :D

    > Zu guter letzt: Java, PHP, PERL,... sind doch
    > alles Interpreter, die in C geschrieben sind,
    > oder!!!

    Java ist teilweise in C++ geschrieben. PERL dürfte reines C sein. Weiss nicht wie es bei PHP ist.

    In Java sind aber einzelne Methoden in Assembler geschrieben. Das kann ich theoretisch auch in jeder anderen Sprache mache (ich kann das PHP "echo" in Assembler schreiben und der Interpreter springt dann in eine Assemblerroutine, die Zugriff auf die Echo Parameter hat und die Ausgabe macht, alles in rein Assembler), somit wäre das Echo in meinem interpretierten PHP Code dann wahrscheinlich deutlich schneller als ein printf() in meinem C Code (weil printf nicht in Assembler geschrieben ist und vielleicht deutlich schlechter optimiert ist als mein handgeschriebener Echo Code).

    Und das gilt vor allem dann nicht, wenn ein JIT zum Einsatz kommt. Ein einfaches Beispiel: Ich schreibe einen C Compiler in Java. Wenn ich damit dann C Code compiliere kann der ja 100x schneller sein als mein Java Compiler Code. Niemand hindert die PHP Entwickler daran einen JIT zu benutzen (ist halt deutlich mehr Arbeit als einen reinen Interpreter).

    /Mecki

  6. Re: Java ist langsam, und die Erde ist eine Scheibe

    Autor: /mecki78 09.10.07 - 11:47

    lulli schrieb:
    -------------------------------------------------------

    > Es geht hier nicht um Java.

    Das weiss ich ... und du wüstest auch, dass ich das weiss, wenn du meinen Post gelesen hättest, hast du aber nicht. Tja, dann unterlasse auch deine dummen Kommentare. Wenn du einen Post nicht liesst, dann kommentiere ihn bitte auch nicht (ich spreche doch wortwörtlich in meinem Post darüber, das Java viel schneller als JavaScript ist, oh mann, wie dumm kann man eigentlich sein???)

    Es ging mir darum auf das Posting

    "JAVA macht meinen PC immer so langsam!"

    einen Grundsatz Rant zu schreiben. Aber da das ein Trollposting ist (man soll nicht auf Trollpostings antworten! Usenet Lektion Nummer Eins, kommt noch aus den 80er Jahren), verseucht mit Trollposting-Flames (in denen meine durchaus sinnvolle Antwort, wie ich finde komplett untergeht), habe ich das als eigenen Thread gepostet. Das solltet ihr auch mal tun, statt immer die Trolle so zu füttern, weil deswegen gehen die auch nicht weg.



    /Mecki

  7. Re: Java ist langsam, und die Erde ist eine Scheibe

    Autor: DaCroci 09.10.07 - 11:48

    Das kauf ich Dir leider nicht ab, Junge.


    /mecki78 schrieb:
    -------------------------------------------------------
    > lulli schrieb:
    > --------------------------------------------------
    > -----
    >
    > > Es geht hier nicht um Java.
    >
    > Das weiss ich ... und du wüstest auch, dass ich
    > das weiss, wenn du meinen Post gelesen hättest,
    > hast du aber nicht. Tja, dann unterlasse auch
    > deine dummen Kommentare. Wenn du einen Post nicht
    > liesst, dann kommentiere ihn bitte auch nicht (ich
    > spreche doch wortwörtlich in meinem Post darüber,
    > das Java viel schneller als JavaScript ist, oh
    > mann, wie dumm kann man eigentlich sein???)
    >
    > Es ging mir darum auf das Posting
    >
    > "JAVA macht meinen PC immer so langsam!"
    >
    > einen Grundsatz Rant zu schreiben. Aber da das ein
    > Trollposting ist (man soll nicht auf Trollpostings
    > antworten! Usenet Lektion Nummer Eins, kommt noch
    > aus den 80er Jahren), verseucht mit
    > Trollposting-Flames (in denen meine durchaus
    > sinnvolle Antwort, wie ich finde komplett
    > untergeht), habe ich das als eigenen Thread
    > gepostet. Das solltet ihr auch mal tun, statt
    > immer die Trolle so zu füttern, weil deswegen
    > gehen die auch nicht weg.
    >
    > /Mecki


  8. Re: Java ist langsam, und die Erde ist eine Scheibe

    Autor: /mecki78 09.10.07 - 11:48

    DaCroci schrieb:
    -------------------------------------------------------
    > Dummer Junge!

    Sagt der, der zu dumm ist meinen Post zu lesen. Denn hättest du das getan, würdest du sehen, dass ich sehr wohl zwischen Java und JavaScript unterscheide. Aber gross die Klappe aufreisen und seine eigene Dummheit unter Beweis stellen... so was kotzt mich an. Wenn du einen Post nicht liesst, dann antworte bitte auch nicht drauf, weil dann kann deine Antwort nur nutzlos sein (eine Antwort bedingt nunmal, dass man das, worauf man antwortet auch gelesen hat!).

    Ansonsten gilt für dich das hier:

    https://forum.golem.de/read.php?20657,1102196,1102548#msg-1102548

    /Mecki

  9. Re: Java ist langsam, und die Erde ist eine Scheibe

    Autor: /mecki78 09.10.07 - 11:50

    DaCroci schrieb:
    -------------------------------------------------------
    > Das kauf ich Dir leider nicht ab, Junge.


    Hallo? Lies doch meinen Post, da unterscheide ich doch genau zwischen Java und JavaScript. Entweder bist du so schlau wie geschnitten Brot oder selber ein Troll.

    Ich werde mich mit deiner Dummheit auf jeden Fall nicht weiter auseinander setzen.

    *PLONK*


    /Mecki

  10. Re: Java ist langsam, und die Erde ist eine Scheibe

    Autor: Peterchen 09.10.07 - 13:16

    Äh - was genau kaufst Du ihm nicht ab?

    DaCroci schrieb:
    -------------------------------------------------------
    > Das kauf ich Dir leider nicht ab, Junge.
    >
    > /mecki78 schrieb:
    > --------------------------------------------------
    > -----
    > > lulli schrieb:
    >
    > --------------------------------------------------
    >
    > -----
    >
    > > Es geht hier nicht um
    > Java.
    >
    > Das weiss ich ... und du wüstest
    > auch, dass ich
    > das weiss, wenn du meinen Post
    > gelesen hättest,
    > hast du aber nicht. Tja,
    > dann unterlasse auch
    > deine dummen Kommentare.
    > Wenn du einen Post nicht
    > liesst, dann
    > kommentiere ihn bitte auch nicht (ich
    > spreche
    > doch wortwörtlich in meinem Post darüber,
    > das
    > Java viel schneller als JavaScript ist, oh
    >
    > mann, wie dumm kann man eigentlich sein???)
    >
    > Es ging mir darum auf das Posting
    >
    > "JAVA macht meinen PC immer so langsam!"
    >
    > einen Grundsatz Rant zu schreiben. Aber da
    > das ein
    > Trollposting ist (man soll nicht auf
    > Trollpostings
    > antworten! Usenet Lektion
    > Nummer Eins, kommt noch
    > aus den 80er Jahren),
    > verseucht mit
    > Trollposting-Flames (in denen
    > meine durchaus
    > sinnvolle Antwort, wie ich
    > finde komplett
    > untergeht), habe ich das als
    > eigenen Thread
    > gepostet. Das solltet ihr auch
    > mal tun, statt
    > immer die Trolle so zu
    > füttern, weil deswegen
    > gehen die auch nicht
    > weg.
    >
    > /Mecki
    >
    >


  11. Re: Java ist langsam, und die Erde ist eine Scheibe

    Autor: Peterchen 09.10.07 - 13:22

    Du hast
    ( ) den Post gelesen
    (x) den Post nicht gelesen

    Hm. Wenn Du das Wort "dumm" als das Gegenteil dessen definiert, was es früher mal geheissen hat (http://de.wikipedia.org/wiki/Dummheit), sind wohl die Leute, die hier versuchen, sich zivilisiert zu verhalten tatsächlich dumme Jungs. Ansonsten würde ich sagen, die Definition trifft auf Kommentare wie den Deinen sehr gut zu.


    DaCroci schrieb:
    -------------------------------------------------------
    > Dummer Junge!
    >
    > JavaScript != Java


  12. Re: Java ist langsam, und die Erde ist eine Scheibe

    Autor: DaCroci 10.10.07 - 11:28

    Dann drück dich nächstes Mal verständlicher aus und beziehe Dich auf das entsprechende Posting, dummer Junge!

    /mecki78 schrieb:
    -------------------------------------------------------
    > DaCroci schrieb:
    > --------------------------------------------------
    > -----
    > > Dummer Junge!
    >
    > Sagt der, der zu dumm ist meinen Post zu lesen.
    > Denn hättest du das getan, würdest du sehen, dass
    > ich sehr wohl zwischen Java und JavaScript
    > unterscheide. Aber gross die Klappe aufreisen und
    > seine eigene Dummheit unter Beweis stellen... so
    > was kotzt mich an. Wenn du einen Post nicht
    > liesst, dann antworte bitte auch nicht drauf, weil
    > dann kann deine Antwort nur nutzlos sein (eine
    > Antwort bedingt nunmal, dass man das, worauf man
    > antwortet auch gelesen hat!).
    >
    > Ansonsten gilt für dich das hier:
    >
    > forum.golem.de
    >
    > /Mecki


  13. Re: Java ist langsam, und die Erde ist eine Scheibe

    Autor: DaCroci 10.10.07 - 11:29

    Dein Heulen bringt hier keinen weiter. Bleib sachlich und gut is.

    /mecki78 schrieb:
    -------------------------------------------------------
    > DaCroci schrieb:
    > --------------------------------------------------
    > -----
    > > Das kauf ich Dir leider nicht ab, Junge.
    >
    > Hallo? Lies doch meinen Post, da unterscheide ich
    > doch genau zwischen Java und JavaScript. Entweder
    > bist du so schlau wie geschnitten Brot oder selber
    > ein Troll.
    >
    > Ich werde mich mit deiner Dummheit auf jeden Fall
    > nicht weiter auseinander setzen.
    >
    > *PLONK*
    >
    > /Mecki


  14. Danke!

    Autor: qp1d 10.10.07 - 14:36

    /mecki78 schrieb:
    -------------------------------------------------------
    > ... einen wirklich guten und seltenen Kommentar! ...

    Bemerkenswert, wieviel Zeit Du Dir genommen hast. Danke!

    mfg qpid

  15. Re: Java ist langsam, und die Erde ist eine Scheibe

    Autor: newsparadies 03.05.09 - 23:13

    moin,

    Java ist langsam, weil es sich um eine Sprache handelt, die bewusst auf Dinge wie optimierten Datenzugriff zu Gunsten angeblichen Komforts und angeblicher Sicherheit verzichtet.

    Insbesondere das fehlen von Möglichkeiten Daten in Java strukturiert als Daten zu betrachten (oder auch als verschiedene Strukturen solcher) macht Java zu einer Sprache, die als solche Langsam ist. Sicher, es gibt andere, die auf basis der selben oder auch anderer nicht vorhandener Möglichkeiten auch langsam sind.

    Man betrachte beispielsweise COBOL, eine sicherlich uralte Sprache, die die fehlende Fähigkeit zur dynamischen Allocation von Speicher langsam macht.

    Sprachen können also durchaus - durch fehlenden Syntax - langsam sein. Und Java gehört dazu.


    grats

    newsparadies
    http://newsparadies.de

Neues Thema Ansicht wechseln


Um zu kommentieren, loggen Sie sich bitte ein oder registrieren Sie sich. Zum Login

Anzeige
Stellenmarkt
  1. AGRAVIS Raiffeisen AG, Münster
  2. DFS Aviation Services GmbH, Langen
  3. Fraunhofer-Institut für Produktionstechnologie IPT, Aachen
  4. Landeshauptstadt München, München

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Top-Angebote
  1. (heute u. a. mit Soundbars und Heimkinosystemen, ASUS-Notebooks, Sony-Kopfhörern, Garmin...
  2. 149,99€ (Vergleichspreis 319€)
  3. 399€ (Vergleichspreis 449€)


Haben wir etwas übersehen?

E-Mail an news@golem.de


Banana Pi M2 Berry: Per SATA wird der Raspberry Pi attackiert
Banana Pi M2 Berry
Per SATA wird der Raspberry Pi attackiert
  1. Die Woche im Video Mäßige IT-Gehälter und lausige Wahlsoftware
  2. Orange Pi 2G IoT ausprobiert Wir bauen uns ein 20-Euro-Smartphone

Inspiron 5675 im Test: Dells Ryzen-Gaming-PC reicht mindestens bis 2020
Inspiron 5675 im Test
Dells Ryzen-Gaming-PC reicht mindestens bis 2020
  1. Android 8.0 im Test Fertig oder nicht fertig, das ist hier die Frage
  2. Logitech Powerplay im Test Die niemals leere Funk-Maus
  3. Polar vs. Fitbit Duell der Schlafexperten

Mini-Smartphone Jelly im Test: Winzig, gewöhnungsbedürftig, nutzbar
Mini-Smartphone Jelly im Test
Winzig, gewöhnungsbedürftig, nutzbar
  1. Leia RED verrät Details zum Holo-Display seines Smartphones
  2. Smartphones Absatz in Deutschland stagniert, Umsatz steigt leicht
  3. Wavy Klarna-App bietet kostenlose Überweisungen zwischen Freunden

  1. Apple iOS 11 im Test: Alte Apps weg, Daten weg, aber sonst alles gut
    Apple iOS 11 im Test
    Alte Apps weg, Daten weg, aber sonst alles gut

    Für langjährige iOS-Nutzer ist das Upgrade auf iOS 11 die bisher härteste Entscheidung. Apple zeigt Mut zur Lücke: Apps und Daten gehen reihenweise verloren. Der Upgrade-Pfad bringt aber auch viel Positives, wie das flexible Kontrollzentrum und eine viel bessere iPad-Steuerung.

  2. Bitkom: Ausbau mit Glasfaser kann noch 20 Jahre dauern
    Bitkom
    Ausbau mit Glasfaser kann noch 20 Jahre dauern

    Laut Bitkom ist der Tiefbau schuld, dass wir noch zwei Jahrzehnte auf FTTH im ganzen Land warten müssen. Doch es gibt Lösungen abseits reiner Rechenbeispiele.

  3. Elektroauto: Nikolas E-Trucks bekommen einen Antrieb von Bosch
    Elektroauto
    Nikolas E-Trucks bekommen einen Antrieb von Bosch

    Bosch-Antrieb für einen US-Elektro-Truck: Bosch wird die Laster von Nikola mit einem neuartigen Elektromotor ausstatten. Beide Unternehmen zusammen wollen eine Brennstoffzelle für die Fahrzeuge entwickeln.


  1. 19:04

  2. 18:51

  3. 18:41

  4. 17:01

  5. 16:46

  6. 16:41

  7. 16:28

  8. 16:11