Java-Leistungsoptimierung: Acht Anti-Patterns, die Ihren Code verlangsamen

✍️ OpenClawRadar📅 Veröffentlicht: 20. März 2026🔗 Source
Java-Leistungsoptimierung: Acht Anti-Patterns, die Ihren Code verlangsamen
Ad

Leistungsverbesserungen durch die Behebung von Anti-Patterns

Jonathan Vogel entwickelte eine Java-Bestellverarbeitungs-App, die anfangs eine Laufzeit von 1.198 ms hatte, 85.000 Bestellungen pro Sekunde verarbeitete, etwas mehr als 1 GB Heap verwendete und 19 GC-Pausen aufwies. Nach der Behebung von acht Anti-Patterns ohne Architekturänderungen oder JDK-Updates verbesserte sich die Leistung auf 239 ms Laufzeit, 419.000 Bestellungen pro Sekunde, 139 MB Heap und 4 GC-Pausen. Dies entspricht einer 5-fachen Durchsatzsteigerung, 87 % weniger Heap-Verbrauch und 79 % weniger GC-Pausen.

Acht Java-Leistungs-Anti-Patterns, die behoben werden sollten

  • String-Verkettung in Schleifen - O(n²) Kopiervorgänge aufgrund von Unveränderlichkeit
  • O(n²) Stream-Iteration innerhalb von Schleifen - Streamen der gesamten Liste pro Element
  • String.format() in Hot Paths - Langsamster String-Builder, parst Format bei jedem Aufruf
  • Autoboxing in Hot Paths - Millionen von Wegwerf-Wrapper-Objekten
  • Exceptions für Kontrollfluss - fillInStackTrace() durchläuft den gesamten Aufrufstack
  • Zu breite Synchronisierung - Eine Sperre wird zum Engpass
  • Wiederverwendbare Objekte neu erstellen - ObjectMapper, DateTimeFormatter, Gson pro Aufruf
  • Virtual Thread Pinning (JDK 21-23) - Synchronisiert + blockierende I/O blockiert Carrier
Ad

Detaillierte Beispiele und Lösungen

1. String-Verkettung in Schleifen

Problemcode:

String report = "";
for (String line : logLines) {
    report = report + line + "\n";
}

Dies erzeugt O(n²) Kopiervorgänge aufgrund der Unveränderlichkeit von Strings. BellSoft JMH Benchmarks zeigen, dass bei einer 4-fachen Vergrößerung von n die Schleifenverkettung um mehr als das 7-fache langsamer wird.

Lösung:

StringBuilder sb = new StringBuilder();
for (String line : logLines) {
    sb.append(line).append("\n");
}
String report = sb.toString();

Hinweis: Seit JDK 9 optimiert der Compiler Einzeilen-Verkettungen wie "Order: " + id + " total: " + amount, aber diese Optimierung gilt nicht für Schleifen.

2. Versehentliches O(n²) mit Streams in Schleifen

Problemcode:

for (Order order : orders) {
    int hour = order.timestamp().atZone(ZoneId.systemDefault()).getHour();
    long countForHour = orders.stream()
        .filter(o -> o.timestamp().atZone(ZoneId.systemDefault()).getHour() == hour)
        .count();
    ordersByHour.put(hour, countForHour);
}

Dieses Muster machte fast 71 % der CPU-Stack-Samples in der JFR-Aufzeichnung aus. Bei 10.000 Bestellungen führt es 100 Millionen Vergleiche anstelle eines einzigen Durchlaufs durch.

Lösung:

for (Order order : orders) {
    int hour = order.timestamp().atZone(ZoneId.systemDefault()).getHour();
    ordersByHour.merge(hour, 1L, Long::sum);
}

Dies bietet O(n)-Leistung mit einem Durchlauf. Man könnte auch Collectors.groupingBy(... Collectors.counting()) in einer einzigen Stream-Pipeline verwenden.

Der Artikel ist Teil 1 einer 3-teiligen Serie zur Java-Leistungsoptimierung, wobei die Teile 2 und 3 bald folgen. Teil 2 wird die Profiling-Daten hinter diesen Zahlen durchgehen, einschließlich Flame-Graphs und welche Methoden tatsächlich Hot waren.

📖 Read the full source: HN AI Agents

Ad

👀 Siehe auch

Claude vs GPT für die akademische Doktorarbeit: Bewahrung der fachlichen Bedeutung in Methodenabschnitten
Anleitungen

Claude vs GPT für die akademische Doktorarbeit: Bewahrung der fachlichen Bedeutung in Methodenabschnitten

Ein Doktorand vergleicht Claude und GPT für die Überarbeitung von Aufsätzen über Computer Vision / Hardware Co-Design und stellt fest, dass Claude zuverlässiger die technische Bedeutung und die Argumentationsstruktur bewahrt, während GPT manchmal Aussagen vereinfacht.

OpenClawRadar
OpenClaw-Kostenoptimierung: Fünf Einstellungen für den kontinuierlichen Agentenbetrieb
Anleitungen

OpenClaw-Kostenoptimierung: Fünf Einstellungen für den kontinuierlichen Agentenbetrieb

Ein Entwickler, der OpenClaw kontinuierlich auf einem Raspberry Pi betreibt, identifizierte fünf Konfigurationseinstellungen, die die Agentenkosten durch Optimierung auf Kosten statt auf Standardfähigkeiten erheblich reduzierten.

OpenClawRadar
OpenClaws Gateway und Fähigkeiten: Über Chat hinaus zu automatisierter Ausführung
Anleitungen

OpenClaws Gateway und Fähigkeiten: Über Chat hinaus zu automatisierter Ausführung

OpenClaws Gateway verbindet Kanäle wie Telegram und WhatsApp mit Skills, die reale Aktionen wie das Ausführen von Tests, das Aufrufen von APIs und das Verwalten von Dateien ausführen, wobei Cron-Jobs geplante Hintergrundautomatisierung ermöglichen.

OpenClawRadar
Qwen3.6 27B und 35B auf 6GB VRAM mit ik_llama ausführen: Praktische Konfigurationen und Benchmarks
Anleitungen

Qwen3.6 27B und 35B auf 6GB VRAM mit ik_llama ausführen: Praktische Konfigurationen und Benchmarks

Ein Nutzer teilt detaillierte ik_llama-Konfigurationen und Leistungszahlen zum Ausführen der Qwen3.6 27B- und 35B-A3B-Modelle auf einem RTX2060 Mobile (6 GB VRAM, 32 GB RAM) mit Prefill-Geschwindigkeiten von 40–100 t/s und Generation bis zu 11 t/s.

OpenClawRadar