Java-Code-Tipps

Sie können die Nachrichtenflussleistung mit Java™ verbessern, indem Sie einige Optimierungsverfahren verwenden.

Vorbereitungen

Informationen zu dieser Task

Ein erheblicher Anteil der Leistungsprobleme in Bezug auf Java wird durch Speicher-und Garbage-Collection-Probleme, durch die Interaktion mit externen Ressourcen und durch Java-Code verursacht, der von der Optimierung profitieren könnte. So können Sie diese Leistungsprobleme feststellen und beheben:

Der Java-Berechnung -Knoten ermöglicht Ihnen, jede gültige Java-Verarbeitung einzuschließen, und es ist üblich, vorhandene Java-Klassen für bestimmte Funktionen wiederzuverwenden. Allerdings beeinträchtigt dieser Code die Leistung des Nachrichtenflusses, stellen Sie daher sicher, dass der auf diese Weise verwendete Code auch effizient funktioniert.

Verwenden Sie nach Möglichkeit die bereitgestellten Knoten und Funktionen von IBM Integration Bus , um die Verarbeitung einer Nachricht durchzuführen, anstatt die bereits bereitgestellte Funktion erneut zu erstellen. Verwenden Sie beispielsweise keinen angepassten XML-Parser im Java-Berechnung -Knoten. Der XMLNSC-Parser, der mit IBM Integration Bus bereitgestellt wird, ist ein leistungsstarker Parser, der auch die Validierung anhand eines Schemas ermöglicht. Die von ihm generierte Nachrichtenbaumstruktur kann im gesamten Nachrichtenfluss verwendet werden. was bei einem benutzerdefinierten Parser mit eigenen Datenstrukturen nicht der Fall ist.

Vermeiden Sie es, neue Prozesse im Java-Berechnung -Knoten zu starten, um eine bestimmte Arbeitseinheit auszuführen. Dies wirkt sich nachteilig auf die Leistung aus und bedingt einen höheren CPU-Aufwand und eine erhöhte Systemauslastung, da bei der Ausführung viele kurzlebige Prozesse gestartet und beendet werden. Einer der Vorteile der IBM Integration Bus -Laufzeit besteht darin, dass Prozesse eine lange Lebensdauer haben und die Initialisierung minimiert wird. Der Verarbeitungsaufwand wird somit insgesamt reduziert, weil nicht bei jedem Aufruf des Nachrichtenflusses neue Prozesse gestartet werden.

Informationen zu Tools, mit denen Sie den aktuellen Status einer aktiven Java-Anwendung bewerten können, finden Sie unter developerWorks ® IBM Monitoring and Diagnostic Tools for Java - Health Center Version 2.1.

Baumstrukturverweise

Informationen zu dieser Task

Sie sollten keine Baumstrukturen erstellen und darin navigieren, ohne Zwischenverweise zu speichern. Beispiel: Der folgende Code navigiert wiederholt vonrootSo erstellen Sie die Baumstruktur:

MbMessage newEnv = new MbMessage(inAssembly.getMessage());
newEnv.getRootElement().createElementAsFirstChild(MbElement.TYPE_NAME, "Destination", null);
newEnv.getRootElement().getFirstChild().createElementAsFirstChild(MbElement.TYPE_NAME, "MQDestinationList", null);
newEnv.getRootElement().getFirstChild().getFirstChild().createElementAsFirstChild(MbElement.TYPE_NAME,"DestinationData", null);

Es ist effizienter, Verweise zu speichern, wie im folgenden Beispiel dargestellt:

MbMessage newEnv = new MbMessage(inAssembly.getMessage());
MbElement destination = newEnv.getRootElement().createElementAsFirstChild(MbElement.TYPE_NAME,"Destination", null);
MbElement mqDestinationList = destination.createElementAsFirstChild(MbElement.TYPE_NAME, "MQDestinationList",
    null);
mqDestinationList.createElementAsFirstChild(MbElement.TYPE_NAME,"DestinationData", null);

Verkettung von Java-Zeichenfolgen

Informationen zu dieser Task

Die+Operator hat negative Auswirkungen auf die Leistung, da er die Erstellung eines neuen Zeichenfolgeobjekts für jede Verkettung beinhaltet. Beispiel:

keyforCache = hostSystem + CommonFunctions.separator
+ sourceQueueValue + CommonFunctions.separator
+ smiKey + CommonFunctions.separator
+ newElement;

Um die Leistung zu verbessern, verwenden Sie die Klasse 'StringBuffer' und die Methode 'append', um java.lang.String-Objekte zu verketten, und nicht die+Operator, wie im folgenden Beispiel gezeigt:

StringBuffer keyforCacheBuf = new StringBuffer();
keyforCacheBuf.append(hostSystem);
keyforCacheBuf.append(CommonFunctions.separator);
keyforCacheBuf.append(sourceQueueValue);
keyforCacheBuf.append(CommonFunctions.separator);
keyforCacheBuf.append(smiKey);
keyforCacheBuf.append(CommonFunctions.separator);
keyforCacheBuf.append(newElement);
keyforCache = keyforCacheBuf.toString();

Java-BLOB-Verarbeitung

Informationen zu dieser Task

Wenn Sie ein BLOB (z. B. durch Ausschneiden in Blöcke oder durch Einfügen von Zeichen) verarbeiten möchten, ist es effizient, einen Java-Berechnung -Knoten mit seiner starken Verarbeitungsfunktionalität zu verwenden. Wenn Sie einen Java-Berechnung -Knoten verwenden, verwenden Sie ByteArrays und ByteArrayOutputStream, um das BLOB zu verarbeiten.

Manuelle Garbage-Collection für Java

Informationen zu dieser Task

Rufen Sie die Garbage-Collection nach Möglichkeit nicht manuell auf, da dadurch die Verarbeitung in der Java Virtual Machine ausgesetzt wird, was den Nachrichtendurchsatz erheblich einschränkt. Bei einem Java-basierten Transformationsnachrichtenfluss beispielsweise, der ohne manuelle Garbage-Collection 1300 Nachrichten pro Sekunde verarbeitete, sank die Verarbeitung auf 100 Nachrichten pro Sekunde, als zu jeder Nachricht, die verarbeitet wurde, ein manueller Aufruf der Garbage-Collection hinzugefügt wurde.