---
title: 'Thema der Woche: Performant gedacht?'
url: 'https://tutego.de/blog/javainsel/2013/09/thema-der-woche-performant-gedacht'
markdown: 'https://tutego.de/blog/javainsel/2013/09/thema-der-woche-performant-gedacht.md'
date: '2013-09-30'
description: 'Diskutiere folgende Fragen: Frage richtig falsch Native Compiler können viel kompakteren Maschinencode erstellen. n+n ist schneller als 2*n. Anweisungen wie n/2, n/4, n*2 sollte man immer durch Verschieben nachbilden. Für eine switch-Anweisung kennt der Compiler zwei unterschiedliche Umsetzungen in…'
taxonomy:
  category:
    - 'Die wöchentliche Dosis Java'
---

# Thema der Woche: Performant gedacht?

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## Thema der Woche: Performant gedacht?

30.09.2013 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

Diskutiere folgende Fragen:

**Frage**

**richtig**

**falsch**

Native Compiler können viel kompakteren Maschinencode erstellen.

n+n ist schneller als 2\*n.

Anweisungen wie n/2, n/4, n\*2 sollte man immer durch Verschieben nachbilden.

Für eine **switch**-Anweisung kennt der Compiler zwei unterschiedliche Umsetzungen in Bytecode.

Schleifen soll man immer runterzählen. Das ist viel schneller.

Über Weak-Reference verwaltet Objekte werden früher freigegeben, als über Soft-Reference verwaltete Objekte.

Synchronisierte Methoden sind nicht viel langsamer im Aufruf als nicht-synchronisierte Methoden.

Wenn man schnellen Zugriff auf ein Attribut haben muss, dann würde man auf die **`get()`**-Funktion verzichten und das Attribut zum Lesen freigeben. Das ist zwar kein Gutes Design, aber im Zugriff viel schneller.

Je tiefer die Vererbungshierarchie ist, desto langsamer ist eine Objekterzeugung.

Statische Eigenschaften sind im Zugriff immer viel schneller als Objekteigenschaften.

Wenn man intern eine Liste als Datenstruktur benutzt, man möchte diese aber sicher nach außen weitergeben (etwa durch **`getListe()`**), dann muss man die Liste immer kopieren.

Felder beliebiger Größe zu kopieren ist mit **`System.arraycopy()`** immer am schnellsten.

Ein **`String`**-Objekt aus einem **`StringBuffer`** zu erstellen kostet noch einmal Speicher für die gesamte Zeichenkette.

**""+ganzzahl** ist in nettes Idiom zur Konvertierung von Ganzzahlen in Strings, was auch in der Performance nicht schlecht ist.

**`intern()`** ist eine nützliche Funktion, die mehr Vorteile als Nachteile mit sich bringt.

**`charAt()`** von **`String`** ist schneller als **`charAt()`** von **`StringBuffer`**.

**`substring()`** erzeugt ein neues Zeichenfeld-Objekt, das genau den ausgeschnittenen Teil speichert.

Liest eine Schleife Zeilen aus einer Datei aus, so kann ein **StringTokenizer** gut benutzt werden, um die Zeilen zu untersuchen.

**`StringBuffer`** ist von der Performance ausgezeichnet.

Es spielt keine große Rolle, ob man einer **`HashMap`** eine Initialgröße gibt oder nicht.

Eine Menge von Wahrheitswerten sind in einem **boolean**-Array gut aufgehoben.

Ein **BufferedOutputStream** um einen beliebigen `Stream` bringt in jedem Fall einen Geschwindigkeitsvorteil.

Eine **`ArrayList`** kann viel kompakter serialisiert werden als eine **`LinkedList`**.

Mit **`java.nio`** kann man Dateien viel schneller kopieren als ohne.

Ein Server sollte eine Anfrage immer mit einem neuen `Thread` beantworten.

**SELECT \* FROM Tabelle** ist unproblematisch.

Es ist egal, ob ich einen **ResultSet** mit **`getXXX(String Spaltenname)`** oder **`getXXX(int Spaltennummer)`** abfrage.

Für mehrere Anfragen an eine Datenbank ist immer ein **PreparedStatement** einzusetzen.

Eine **JTable** holt sich beim Scrollen jedes Element neu aus dem Model.

Wenn man SwingWorker durch [FoxTrot](http://foxtrot.sourceforge.net/) ersetzt, gewinnt man noch einmal Geschwindigkeit bei Swing-Programmen.

Ein Obfuscator führt bei Applets zu einer Minimierung der Übertragungszeit.

Kategorien: [Die wöchentliche Dosis Java](https://tutego.de/blog/javainsel/category/die-woechentliche-dosis-java/)

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Klausuraufgabe: JavaServer Pages und verwandte Technologien](https://tutego.de/blog/javainsel/2013/09/klausuraufgabe-javaserver-pages-und-verwandte-technologien.md)
- Next: [Algorithmen für Rastergrafik, 2. Einfache Füllalgorithmen](https://tutego.de/blog/javainsel/2013/09/algorithmen-fr-rastergrafik-2-einfache-fllalgorithmen.md)
