24 Stimmen

Wiederverwendung von Java-Objekten

Sollten Java-Objekte so oft wiederverwendet werden, wie es möglich ist? Oder sollten wir sie nur dann wiederverwenden, wenn sie "schwergewichtig" sind, d.h. Betriebssystem-Ressourcen mit sich bringen?

Alle alten Artikel im Internet sprechen über die Wiederverwendung von Objekten und das Pooling von Objekten so weit wie möglich, aber ich habe kürzlich Artikel gelesen, die besagen new Object() ist jetzt stark optimiert (10 Anweisungen) und die Wiederverwendung von Objekten ist nicht mehr so wichtig wie früher.

Was ist die derzeit beste Praxis und wie gehen Sie damit um?

3voto

billybob Punkte 806

Ich würde mir Sorgen über Leistungsprobleme machen, wenn sie auftreten. Tun Sie zunächst das, was sinnvoll ist (würden Sie dies mit Primaten tun). Wenn Sie dann ein Profiling-Tool ausführen und feststellen, dass es neue Probleme verursacht, sollten Sie über eine Vorabzuweisung nachdenken (d. h. wenn Ihr Programm nicht viel Arbeit macht).

Die Wiederverwendung von Gegenständen klingt übrigens wie eine Katastrophe, die auf sich warten lässt:

SomeClass someObject = new SomeClass();

someObject.doSomething();
someObject.changeState();
someObject.changeOtherState();
someObject.sendSignal();
// stuff

//re-use 
someObject.reset(); // urgh, had to put this in to support reuse
someObject.doSomethingElse(); // oh oh, this is wrong after calling changeOtherState, regardless of reset
someObject.changeState(); // crap, now this is wrong but it's not obvious yet
someObject.doImportantStuff(); // what's going on?

1voto

duffymo Punkte 298898

Die Erstellung von Objekten ist sicherlich schneller als früher. Die neuere Generations-GC in JDKs 5 und höher ist ebenfalls eine Verbesserung.

Ich glaube nicht, dass dies die übermäßige Erstellung von Objekten kostenlos macht, aber es reduziert die Bedeutung des Objektpoolings. Ich denke, dass Pooling für Datenbankverbindungen sinnvoll ist, aber ich versuche es nicht für meine eigenen Domänenobjekte.

Bei der Wiederverwendung steht die Sicherheit des Fadens im Vordergrund. Sie müssen sorgfältig überlegen, ob Sie Objekte sicher wiederverwenden können.

Wenn ich beschließen würde, dass die Wiederverwendung von Objekten wichtig ist, würde ich Produkte wie Terracotta, Tangersol, GridGain usw. verwenden und dafür sorgen, dass mein Server über jede Menge Speicherplatz verfügt.

1voto

Fortyrunner Punkte 12559

Ich schließe mich den obigen Ausführungen an.

Versuchen Sie nicht, den GC und den Hotspot in Frage zu stellen. Object Pooling mag einmal nützlich gewesen sein, aber heutzutage ist es nicht mehr so nützlich, es sei denn, es geht um Datenbankverbindungen oder einzigartige Systemressourcen.

Versuchen Sie einfach, sauberen und einfachen Code zu schreiben, und seien Sie erstaunt, was Hotspot alles kann.

Warum nicht VisualVM oder einen Profiler verwenden, um einen Blick auf Ihren Code zu werfen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X