Re: wie Array für statische Methoden



Hallo Jochen Theodorou,

ich hab ein kleines Utility-Package und darin sind
ungefähr ein Drittel aller Methoden static z.B.
'public static final InetAddress[] getAllLocalIPs()'.
Warum sollte ich so eine Methode nicht static machen?

.... schon wenn die Methode "getAllHostIPs()" heissen würde fände ich es sinnvoll das nicht mehr static zu machen. Denn die IP kann durch Portforwarding zustande gekommen sein.

Die von mir genannte Methode liefert alle IP-Adressen vom Computer auf dem sie aufgerufen wird, natürlich kann sich das während der Programmlaufzeit ändern aber darauf hat das Java-Programm normalerweise keinen Einfluss also warum nicht static? Was anderes wäre es wenn sich das Programm benachrichtigen lassen könnte dann würd ich diese Information auch nicht einfach in einem Array zurückgeben sondern ein Objekt abliefern das diese Info über ein Interface anbietet so das der eigentliche Programcode immer aktuelle Informationen hat. Das mit dem Portforwarding verstehe ich nicht ganz, dadurch bekommt der Host doch keine weitere IP-Adresse sondern ist von außen nur durch eine weitere erreichbar und wenn das Protforwarding in einem NAT-Router erledigt wird merkt der Host ja noch nicht einmal was davon, der NAT-Router ändert ja schließlich die Zieladresse von entsprechend eingehenden Paketen auf eine vom gewünschten Host um.



ich bin mit static wohl etwas großzüger als
Du aber deswegen bestimmt nicht fixiert

sagst du, aber dann kommt sowas:

Wenn Du die Methoden meinst die vom Dispatcher-switch
aufgerufen werden dann nein. Aber welcher Vorteil
entsteht wenn sie nicht static sind?

Trotzdem bin ich nicht auf static "fixiert". Wenn die entsprechenden Kriterien, über die wir uns wohl einigermaßen einig sind, zutreffen dann benutze ich diesen Modifier eben auch, sonst nicht.


>> Aber welcher Vorteil entsteht wenn sie nicht static sind?

bis jetzt konnte ich noch keinen Erkennen


Für mich klingt das nach einer Fixierung.

Aha, ich will ja hier nicht unhöflich oder undankbar sein aber diese absoluten Ferndiagnosen mag ich nicht.


welcher Nachteil entsteht denn wenn
du die Methoden *nicht* static machst?

Man benötigt für nicht statische Methoden eine Instance von der entsprechenden Klasse und die Kostet auf jeden Fall Speicher selbst wenn es keine lokalen Variablen gibt. Die Referenz, die der Aufrufer braucht, kostet auch Speicher, klar ist das alles sehr wenig aber die Menge machts, vor allem bei mehreren Aufrufern, und wenn man, so wie ich, es gewohnt ist jedes einzelne Byte zu zählen dann kennt man die meisten dieser Verschwender und versucht diese von Anfang an zu vermeiden. Gerade wenn es mehrere Aufrufer gibt und die immer wieder eine Instace von der Klasse erstellen müssen nur um eine simple Utility-Methode aufzurufen dann belastet das bei Java ja auch noch den GC.
Beim großen Dispatcher-switch käme noch ein Problem: wenn ich die eigentlichen Arbeitsmethoden, als nicht static, über etwa 30 Klassen verteile (wegen der Übersicht) dann braucht der Dispatcher von allen eine entsprechende Instance und genau da sehe ich eben nur Kosten (Speicher und CPU) und keinen Vorteil also fällt mir die Entscheidung, static oder nicht static, ziemlich leicht.




Das sit jetzt aber der völlig falsche Weg.
Zu frühzeitige Performanceüberlegungen schaden nur.

Welchen Stellenwert Performanceüberlegungen haben hängt IMHO ganz von der Aufgabenstellung ab so das ich mich hier mit voreiligen Behauptungen eher zurückhalten würde.


Da wird dann oft ein anderer Algorithmus
(der  komplizierter ist) genommen oder
sonst  irgendwelche verschlimmbesserungen

das sowas vorkommt weis ich auch
Weil ich vor genau einer solchen Entscheidung stand habe ich diesen Thread eröffnet, schließlich wollte ich wissen was es noch für Möglichkeiten gibt, die mir selber noch nicht eingefallen sind, und was die jeweils für Vor- und Nachteile haben. Ich denke die Antworten in diesem Thread haben mir alle nötigen Informationen gegeben und momentan tendiere ich eindeutig in die Richtung welche ich gestern Abend beschrieben hab.



Zum Beispiel habe ich gerade folgendes getestet:

    private long addp(long a, long b) {
        return a+b;
    }

    private static long adds(long a, long b) {
        return a+b;
    }

Bei 'private' kann ich mir verschiedenes vorstellen da für den Methodenaufruf 'this' nicht extra behandelt werden muss aber wenn der Aufruf von einer anderen Klasse kommt dann muss die Referenz auf das Objekt mit 'addp' erst mal irgendwo her geholt werden und das ist ja das Szenario das ich hab.


bei anfänglichen Messungen war adds ca. 8% schneller
als addp, dann habe ich die Messung verlängert und
plötzlich ist addp 10% schneller als adds
(bei 10.000.000.000 Druchläufen).

auf Deinem Rechner, mit Deiner JVM, ...
Versteh mich bitte nicht falsch, ich finds gut das Du selber gemessen hast, aber es gibt eben noch mehr Randbedingungen.
Wie erklärst Du Dir eigentlich das Überholen von 'addp'?


ein Programm hat normalerweise grössere
Probleme als Performanceverlust bzw. -gewinn
durch  ändern einens Modifier!

Das weis ich auch, aber es ist auch nur selten so leicht was an der Performace zu ändern wenn man nur einen "geeigneteren" Modifier benutzen braucht.



Grüße Erik .



Relevant Pages

  • Was Ariel mit Umweltfreundlichkeit zu tun hat =?iso-8859-1?Q?und?= =?iso-8859-1?Q?_w
    ... Klasse ist. ... Aber wo wir gerade eben ein bißchen scheinheilig-elektrisch unterwegs ... Aprospos Reifen. ... ambulant des oberen Drittels der Windschutzscheibe zu entledigen. ...
    (de.rec.motorrad)
  • Re: Analoge EOS 20d
    ... Weder die EOS30noch die EOS5 bieten ... LOL - die 5 ist eine andere Klasse, ... Na hoffentlich doch hat die keinen Blitz. ... Ein richtiges Sahneteil eben. ...
    (de.rec.fotografie)
  • Re: Den Pfad zu einer "schema.ini" bestimmen können?
    ... > aufbereiten und dann in eine wie auch immer geartete Datenbank schreiben. ... dass ich die Datei in meinen Speicher hole? ... > reinen importieren der Daten nutzt. ... Eben, nur die Sache mit dem Textimport warf mich etwas aus der Bahn. ...
    (microsoft.public.de.vb)
  • Re: Unterschriftenaktion an Herrn Minister Tiefensee
    ... nur weil man selbst es eben in der Fahrschule ... Fahrlehrer mit, der sich damit vergnügt, einem "erfahrenen" ... Beispiele für Klasse drei LKR Fahrer. ... Aber eben auch nie irgendwelche Heizerambitionen hatten sondern ...
    (de.rec.motorrad)
  • Re: Navi - gieren
    ... knapp bemessenen Speicher wie z. ... gehen pro Kachel 10 MB drauf. ... von Speyer aus eine Tour in die Vogesen zu machen, ... Garmin eben. ...
    (de.rec.motorrad)

Loading