Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » Geschwindigkeit

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
25.09.2002, 10:57 Uhr
~0xdeadbeef
Gast


*SEUFZ* OK, ich hab in der CLangzahl.java alle int i's in int j's üebrsetzt, damit das Forum mit der Darstellung klarkommt:

C++:
//CLangzahl.java
class CLangzahl {
    private int iStellen;     // Anzahl der Stellen der Zahl
    private int iBasis;       // Basis des verwendeten Zahlsystems
    private int[] aiZiffern;  // Die Zahl im Speicher

    private static String sZeichen = "0123456789ABCDEF";

    public CLangzahl(int Basis, int Stellen) throws Exception {
        if(Basis<2 || Basis > 16)
            throw new Exception("CLangzahl.CLangzahl: Basis < 2 || Basis > 16");

        iStellen = Stellen;
        iBasis = Basis;
        aiZiffern = new int[Stellen];
        SetNull();
    }

    public void SetNull() {
        for(int j=0; j<iStellen; j++) aiZiffern[j] = 0;
    }

    public void SetStelle(int Stelle, int Value) throws Exception {
        if(Stelle>=iStellen) throw new Exception("CLangzahl.SetStelle: Indexfehler");
        if(Value>=iBasis) throw new Exception("CLangzahl.SetStelle: Basisfehler");

        aiZiffern[iStellen-1-Stelle] = Value;
    }

    private void ArrayAdd(int[] aiZiel, int[] aiS1,
                          int[] aiS2, int iS2Start) {

        int iTeilsumme, iUebertrag=0;
        int iAnzahlZiffern = Math.min(aiS1.length, Math.min(aiS2.length,
                                                            aiZiel.length));

        for(int j=0; j<iS2Start; j++)
            aiZiel[aiZiel.length-1-j] = aiS1[aiS1.length-1-j];

        for(int j=iS2Start; j<iAnzahlZiffern; j++) {
            iTeilsumme = aiS1[aiS1.length-1-j] + iUebertrag +
                aiS2[aiS2.length-1-j+iS2Start];
            iUebertrag = (iTeilsumme >= iBasis) ? 1 : 0;
            aiZiel[aiZiel.length-1-j] = (iUebertrag == 0) ? iTeilsumme :
                (iTeilsumme - iBasis);
        }
    }

    public void Mult(CLangzahl aZahl) throws Exception {
        if(aZahl.iBasis != iBasis) throw new Exception("CLangzahl.Mult: Unterschiedliche Zahlsysteme");
        if(aZahl.iStellen != iStellen) throw new Exception("CLangzahl.Mult: Unterschiedliche Stellenzahl");

        int[][] aiMultiplikation = new int[iBasis][];

        aiMultiplikation[0] = new int[iStellen+1];
        for(int j=1; j<iBasis; j++) {
            aiMultiplikation[j] = new int[iStellen+1];
            ArrayAdd(aiMultiplikation[j], aiMultiplikation[j-1],
                     aiZiffern, 0);
        }

        SetNull();
        for(int j=0; j<iStellen; j++)
            if(aZahl.aiZiffern[j] != 0)
                ArrayAdd(aiZiffern, aiZiffern,
                         aiMultiplikation[aZahl.aiZiffern[j]],
class CLangzahl {
    private int iStellen;     // Anzahl der Stellen der Zahl
    private int iBasis;       // Basis des verwendeten Zahlsystems
    private int[] aiZiffern;  // Die Zahl im Speicher

    private static String sZeichen = "0123456789ABCDEF";

    public CLangzahl(int Basis, int Stellen) throws Exception {
        if(Basis<2 || Basis > 16)
            throw new Exception("CLangzahl.CLangzahl: Basis < 2 || Basis > 16");

        iStellen = Stellen;
        iBasis = Basis;
        aiZiffern = new int[Stellen];
        SetNull();
    }

    public void SetNull() {
        for(int j=0; j<iStellen; j++) aiZiffern[j] = 0;
    }

    public void SetStelle(int Stelle, int Value) throws Exception {
        if(Stelle>=iStellen) throw new Exception("CLangzahl.SetStelle: Indexfehler");
        if(Value>=iBasis) throw new Exception("CLangzahl.SetStelle: Basisfehler");

        aiZiffern[iStellen-1-Stelle] = Value;
    }

    private void ArrayAdd(int[] aiZiel, int[] aiS1,
                          int[] aiS2, int iS2Start) {

        int iTeilsumme, iUebertrag=0;
        int iAnzahlZiffern = Math.min(aiS1.length, Math.min(aiS2.length,
                                                            aiZiel.length));

        for(int j=0; j<iS2Start; j++)
            aiZiel[aiZiel.length-1-j] = aiS1[aiS1.length-1-j];

        for(int j=iS2Start; j<iAnzahlZiffern; j++) {
            iTeilsumme = aiS1[aiS1.length-1-j] + iUebertrag +
                aiS2[aiS2.length-1-j+iS2Start];
            iUebertrag = (iTeilsumme >= iBasis) ? 1 : 0;
            aiZiel[aiZiel.length-1-j] = (iUebertrag == 0) ? iTeilsumme :
                (iTeilsumme - iBasis);
        }
    }

    public void Mult(CLangzahl aZahl) throws Exception {
        if(aZahl.iBasis != iBasis) throw new Exception("CLangzahl.Mult: Unterschiedliche Zahlsysteme");
        if(aZahl.iStellen != iStellen) throw new Exception("CLangzahl.Mult: Unterschiedliche Stellenzahl");

        int[][] aiMultiplikation = new int[iBasis][];

        aiMultiplikation[0] = new int[iStellen+1];
        for(int j=1; j<iBasis; j++) {
            aiMultiplikation[j] = new int[iStellen+1];
            ArrayAdd(aiMultiplikation[j], aiMultiplikation[j-1],
                     aiZiffern, 0);
        }

        SetNull();
        for(int j=0; j<iStellen; j++)
            if(aZahl.aiZiffern[j] != 0)
                ArrayAdd(aiZiffern, aiZiffern,
                         aiMultiplikation[aZahl.aiZiffern[j]],
                         iStellen-j-1);
    }
}


Grüße,

0xdeadbeef
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
25.09.2002, 11:00 Uhr
~0xdeadbeef
Gast


Das ist nicht mein Tag.

Also, denkt euch den Teil bis zum zweiten 'class CLangzahl' weg. Ich hab das Ding aus Versehen zweimal eingefügt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
25.09.2002, 11:06 Uhr
NemoEimi




Zitat:

Linpack ist in Java auf meinem Rechner knapp 2.5-mal langsamer als die Fortran-Version.


Ich habe mir jetzt nocheinmal den Java-Code angesehen und bin zu dem Schluss gekommen, daß es bei dieser Messung systematische Fehler gegeben hat. Nach entsprechenden Korrekturen ist die Java-VM nur noch knapp 25 Prozent langsamer als Fortran in diesem Test, was größenordnungsmäßig auch meinen übrigen Erfahrungen entspricht.

Grüße,
NemoEimi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
25.09.2002, 11:48 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

So, hab das mal ausprobiert. Hier die Ergebnisse (gerundet):

C++ (Borland-Compiler): 24 Sekunden
C++ (MS-Compiler): 25 Sekunden
C#: 26 Sekunden
Delphi: 26 Sekunden
Java (mit JIT): 32 Sekunden
Java (ohne JIT): 44 Sekunden

(@Uwe: Wie wärs mit einem Tabulator-Tag?)
Rechner ist ein Athlon XP 2200+ mit 512 MB RAM, W2k SP3

Hat mich wirklich überrascht, ich hatte Java wesentlich langsamer in Erinnerung! Liegt vielleicht an der neuen Version... komisch, normalerweise sind neuere Versionen doch immer langsamer vor lauter Featuritis?! Respekt!
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
12.10.2002, 22:56 Uhr
void*
Generic Pointer
(Operator)


Hallo!

Interessant wäre mal ein Bsp. mit vielen dynamischen Speicherreservierungen. Man müsste sich dabei überlegen, wie man die garbage collection ins Schwitzen bringen kann.

Gruß
void*

P.S.:
Was soll ich mir erst reinziehen Java oder C#? Was macht mehr spaß?
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
13.10.2002, 00:10 Uhr
Bruder Leif
dances with systems
(Operator)



Zitat:
Interessant wäre mal ein Bsp. mit vielen dynamischen Speicherreservierungen. Man müsste sich dabei überlegen, wie man die garbage collection ins Schwitzen bringen kann.


Hm... OK, ich arbeite dran ;-)



Zitat:
Was soll ich mir erst reinziehen Java oder C#? Was macht mehr spaß?


Frag zwei Freaks, und Du bekommst drei Antworten. Sorry, aber meiner Meinung nach ist C# besser. Nicht, weil es neuer und von Microsoft ist, sondern weil es mit einigen Unzulänglichkeiten von Java aufräumt. Und als C++-Progger war der Umstieg zu C# für mich wesentlich einfacher als zu Java. Langfristig werden beide nebeneinander existieren, in vielen Punkten sind sie sehr ähnlich, in einigen Punkten ist Java besser, in anderen C#. Was mich z.B. an Java stört, sind die stark begrenzten GUI-Fähigkeiten. Erst ein AWT, dann Swing-Klassen nachgeflickt, dann wieder eine neue Teilversion, die zur alten inkompatibel ist... mein Java-1.2-Buch kann ich wegschmeißen, hoffnungslos veraltet. Java steht 100% unter der Kontrolle von Sun, C# dagegen ist standardisiert, da kann Microsoft nix mehr groß dran rumfeilen.
Am besten, Du besorgst Dir sowohl das neue Java als auch das .NET-Framework, und experimentierst einfach mal ein wenig rum. Sooooo groß sind die Unterschiede gar nicht, aber soweit ich das mitbekommen hab, läuft bei Dir Win95, stimmts? Damit läuft das .NET-SDK nicht... Pluspunkt für Java..... viel Spaß beim rumprobieren ;-)
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
13.10.2002, 20:49 Uhr
~0xdeadbeef
Gast


Moin,

Da muss ich gleich mal dagegen halten. Nach meiner Erfahrung ist C# im Grunde ein Java, bei dem alle wirklich genialen Aspekte entfernt wurden, z.B. in der Eventbehandlung. Was bleibt, ist ein billiger Abklatsch, dem im Grunde ein Platz neben Malbolge und Brainf*** zusteht, der aber von MS soweit gehypt wurde, dass alle es ernst nehmen. Zugegeben, ich hab nicht sonderlich lange C# gecodet, weil es mich so sehr genervt hat, aber das war so mein erster Eindruck.
Das Swing-API ist neben dem Eventmodell die genialste Erfindung von Java. Außerdem ist es nicht als AWT 2.0, sondern als Ersatz für das AWT gedacht, weil es deutlich mächtiger und einfach anders ist. Das AWT existiert im Grunde nur noch aus Kompatibilitätsgründen. Dass du dein Buch dauernd auswechseln musst, ist bei Klassenbibliotheken normal. Zu den Sprachspezifikationen ist seit dem JDK 1.2 nur das assert-Statement dazugekommen. Übrigens: ein aktuelles Javabuch gibts auf www.javabuch.de für umsonst. Dazu kommt, dass Java offen liegt, im Gegensatz zu C#. Mit C# begibst du dich in die Abhängigkeit von Microsoft, und Microsoft ist nun nicht gerade die Firma meines Vertrauens. Ich würde mich auch gerade bei MS nicht drauf verlassen, dass die daran nicht mehr rumpatchen - dasselbe ist ja auch mit dem Windows-API, den MFC und COM/COM+ passiert.

Im Endeffekt ist es wahrscheinlich Geschmackssache, aber ich kann C# auf den Tod nicht ausstehen. Hass mich dafür. Das vernünftigste ist wohl, beides auszuprobieren, dann weisst du's aus erster Hand.

Grüße,

0xdeadbeef
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
13.10.2002, 20:59 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!


Zitat:
Dazu kommt, dass Java offen liegt, im Gegensatz zu C#.

Da muß ich jetzt wieder dagegenhalten *grins*: Genau andersrum wird ein Schuh draus. C# ist wie die .NET-CLI von der ECMA standardisiert (http://www.dotnetexperts.com/ecma/), die ISO überlegt noch. Java dagegen steht 100% unter der Knute von Sun, die haben sich bisher gegen jede Form der Standardisierung gewehrt, angeblich, weil sie der ISO/ANSI/ECMA nicht zutrauen, den Standard wirklich aufrechtzuerhalten(?!?). Ich mag Micro$oft auch nicht gerade, aber in DER Hinsicht ist man bei denen besser aufgehoben als bei Sun...

Ich will mich mit Dir nicht streiten, jeder hat seine "Lieblingssprache", für mich war es bisher C++, jetzt ist es C#, und für Dich ist eben Java besser. Nur void* haben wir jetzt endgültig durcheinandergebracht ;-) Viel Spaß beim rumprobieren *g*
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.

Dieser Post wurde am 13.10.2002 um 21:00 Uhr von Leif editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
14.10.2002, 12:19 Uhr
~0xdeadbeef
Gast


...und gleich wieder drauf (Das wird noch ein heiliger Krieg hier...): Ich hab die Sourcen hier rumliegen, ich denke, das geht als 'offen' durch. Die Begründung, dass Java (bisher) kein ISO-Standard ist, war die, dass der Entwicklungsprozess eines ISO-Standards streng reglementiert ist, und zwar in einer Art und Weise, die Sun nicht akzeptieren konnte/wollte, weil sie bei der Entwicklung von Java nicht auf die Mithilfe der Community verzichten wollten. Das kann man so oder so sehen, aber ich finde die Idee, die Programmierer an der Weiterentwicklung der Sprache zu beteiligen, ziemlich genial.

Aber mal abgesehen davon, dass ich die Sprache C# nicht mag, steckt zumindest für mich auch eine gewisse politische Dimension mit drin - ich vertraue Microsoft nicht. Ich sehe sowas in der Richtung kommen, dass sie versuchen .NET (und C#) als Standard durchzudrücken und dann, wenn es alle benutzen, dafür richtig dick Kohle zu verlangen. Das hat sich ja schon in den Äußerungen zum Mono-Projekt gezeigt - wenn es MS wirklich ernst wäre mit .NET als offenem Standard, sollten sie froh sein, dass der sogar von der Konkurrenz unterstützt wird. Ich denke, es geht ihnen dabei im wesentlichen darum, die Konkurrenz (insbesondere GNU/Linux, an die sie grosse Teile des Servermarktes verloren haben) aus dem Markt zu drängen.

Nennt mich paranoid, aber MS trau ich inzwischen einiges zu. Wie war das, Open Source behindert Innovation?

Grüße,

0xdeadbeef
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
14.10.2002, 17:53 Uhr
Bruder Leif
dances with systems
(Operator)


Ich beantrage, daß der Thread in "Glaubenskrieg" umbenannt wird *g*! Aber auf einen solchen laß ich mich nicht ein, ich glaub kaum, daß es einer von uns schaffen wird, den anderen zu "bekehren", will ich auch gar nicht. Jeder hat seine Lieblingssprache, und hält von den anderen mehr oder weniger... ich für meinen Teil hab mich eben für C# entschieden.
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: