1. Erstellen Sie eine Instanz einer Klasse, ohne das Schlüsselwort new zu verwenden
Wenn Sie eine Instanz einer Klasse mit dem Schlüsselwort new erstellen, werden alle Konstruktoren in der Konstruktorkette automatisch aufgerufen. Aber wenn ein Objekt die Cloneable-Schnittstelle implementiert, können wir seine clone()-Methode aufrufen. Die Methode clone() ruft keine Klassenkonstruktoren auf. Wenn Sie ein Objekt mit dem Factory-Muster erstellen, ist es sehr einfach, mit der clone()-Methode eine neue Objektinstanz zu erstellen.
2. Initialisieren Sie Variablen nicht wiederholt
Standardmäßig initialisiert Java Variablen auf bestimmte Werte, wenn der Konstruktor einer Klasse aufgerufen wird. Dies sollte insbesondere dann beachtet werden, wenn eine Klasse von einer anderen Klasse abgeleitet ist, da beim Erstellen eines Objekts mit dem Schlüsselwort new alle Konstruktoren in der Konstruktorkette automatisch aufgerufen werden.
3. Gehen Sie mit Ausnahmen vorsichtig um
Ausnahmen beeinträchtigen die Leistung. Durch das Auslösen einer Ausnahme wird zunächst ein neues Objekt erstellt. Der Konstruktor der Throwable-Schnittstelle ruft die native Methode namens fillInStackTrace() auf. Die Methode fillInStackTrace() überprüft den Stapel und sammelt Informationen zur Anrufverfolgung. Immer wenn eine Ausnahme ausgelöst wird, muss die jVM den Aufrufstapel anpassen, da während der Verarbeitung ein neues Objekt erstellt wird. Ausnahmen sollten nur zur Fehlerbehandlung und nicht zur Steuerung des Programmablaufs verwendet werden.
Beachten Sie die folgenden zwei Punkte. (1) Vermeiden Sie die Verwendung von Try/Catch für die Anwendungslogik, wenn sie mit logischen Anweisungen wie if und while verarbeitet werden kann. Versuchen Sie, Try/Catch-Anweisungen so oft wie möglich zu verwenden. , vorhandene Ausnahmeobjekte so weit wie möglich wiederverwenden. Denn bei der Ausnahmebehandlung nimmt das Generieren eines Ausnahmeobjekts die meiste Zeit in Anspruch.
4. Thread
Threads können die Systemressourcen voll ausnutzen. Während andere Threads auf Lese- und Schreibvorgänge auf der Festplatte oder im Netzwerk warten, kann das Programm die Verarbeitung und Ausführung fortsetzen. Allerdings beeinträchtigt die unsachgemäße Verwendung von Threads auch die Leistung des Programms. Beispiel: Verwenden Sie die Vector-Klasse richtig. Vektor wird hauptsächlich zum Speichern verschiedener Objekttypen verwendet (einschließlich Objekten desselben Typs und unterschiedlicher Typen). Vector bietet Thread-Sicherheitsschutzfunktionen. Obwohl viele Methoden in der Vector-Klasse synchronisiert sind. Wenn Sie jedoch bestätigt haben, dass Ihre Anwendung Single-Threaded ist, ist die Synchronisierung dieser Methoden völlig unnötig. Darüber hinaus dauert es bei der Suche nach verschiedenen in Vector gespeicherten Objekten oft viel Zeit, die Typen abzugleichen. Wenn diese Objekte alle vom gleichen Typ sind, sind diese Übereinstimmungen völlig unnötig. Daher ist es erforderlich, eine Single-Threaded-Klasse oder -Sammlung zu entwerfen, die Objekte eines bestimmten Typs speichert, um die Vector-Klasse zu ersetzen.
Beachten Sie bezüglich Thread-Operationen Folgendes: (1) Vermeiden Sie eine übermäßige Synchronisierung. Wenn das Programm ein Single-Thread-Programm ist, achten Sie darauf, keine Synchronisierung zu verwenden. (2) Synchronisieren Sie Methoden, anstatt das gesamte Codesegment zu synchronisieren. Das Synchronisieren einer Methode hat eine bessere Leistung als das Synchronisieren des gesamten Codesegments.
5. Versuchen Sie, lokale Variablen zu verwenden
Die beim Aufruf der Methode übergebenen Parameter und die beim Aufruf erstellten temporären Variablen werden im Stapel (Stack) gespeichert, was schneller ist.
6. Verwenden Sie so oft wie möglich statische Variablen
Lassen Sie alle Instanzen diese Variable gemeinsam nutzen.
7. Versuchen Sie, den endgültigen Modifikator der Klasse anzugeben
Klassen mit dem finalen Modifikator werden nicht abgeleitet. java.lang.String verhindert die Angabe von final für die String-Klasse, dass Benutzer die Methode length() überschreiben. Wenn eine Klasse außerdem als final gekennzeichnet ist, sind alle Methoden der Klasse final. Der Java-Compiler sucht nach Möglichkeiten, alle endgültigen Methoden zu integrieren, was die Leistung um durchschnittlich 50 % verbessern kann.
8. Objekterstellung und Zuweisung von angemessenem Platz und angemessener Größe
Bei der JAVA-Programmierung wird häufig eine große Anzahl von Objekten (oder Instanzen) generiert. Da das System nicht nur Zeit benötigt, um Objekte zu generieren, kann es auch Zeit in Anspruch nehmen, diese Objekte später im Garbage Collection zu sammeln und zu verarbeiten. Daher hat die Generierung zu vieler Objekte große Auswirkungen auf die Leistung des Programms. Darüber hinaus haben viele Klassen in JAVA ihre Standardspeicherplatzzuteilungsgrößen. Für die StringBuffer-Klasse beträgt die standardmäßig zugewiesene Speicherplatzgröße 16 Zeichen. Wenn die im Programm verwendete Speicherplatzgröße von StringBuffer nicht 16 Zeichen beträgt, muss eine korrekte Initialisierung durchgeführt werden.
9. Verwenden Sie nicht blockierende E/A
Niedrigere Versionen des JDK unterstützen keine nicht blockierende E/A-API. Um E/A-Blockierungen zu vermeiden, erstellen einige Anwendungen eine große Anzahl von Threads (in besseren Fällen wird ein Pufferpool verwendet). Diese Technik kommt in vielen Anwendungen zum Einsatz, die gleichzeitige E/A-Streams unterstützen müssen, beispielsweise bei Webservern. Mit JDK 1.4 wurde eine nicht blockierende I/O-Bibliothek (java.nio) eingeführt.
Dieser Artikel stammt aus dem CSDN-Blog. Bitte geben Sie beim Nachdruck die Quelle an: http://blog.csdn.net/Foxalien/archive/2009/12/18/5029659.aspx