JEnterprise Senior Java Workbench
Senior Java · Fachbereich

Java & JVM

Moderne Java-21-Praxis, Java-25-Migrationsspur und JVM-Diagnose für produktive Systeme. Nutze die Seite während Entwurf und Umsetzung: Arbeite an einem konkreten Codepfad und sichere Fachverhalten, Abhängigkeiten und Wartbarkeit mit passenden Tests.

Zur Übersicht

Arbeitsauftrag

Wann verwenden?

Bei Sprach-, Nebenläufigkeits-, Speicher- oder JVM-Diagnosefragen in produktivem Java-Code.

Nicht dafür verwenden

Nicht für Frameworkkonfiguration ohne Bezug zu Java- oder Laufzeitverhalten.

Definition of Done

Code ist idiomatisch und getestet; Laufzeitannahmen sind gemessen; Fehler- und Ressourcenverhalten sind geklärt.

Sprachfeatures fachlich sinnvoll einsetzen
Nebenläufigkeit und Thread-Sicherheit korrekt beurteilen
JVM-Verhalten in Produktion diagnostizieren
Wertorientierte Modellierung

Records eignen sich für unveränderliche Datenträger und Value Objects, wenn ihre Invarianten beim Erzeugen geschützt werden. Ein Record ersetzt jedoch nicht automatisch ein gutes Domänenmodell.

Sealed Types begrenzen bekannte Varianten und machen fachliche Fallunterscheidungen explizit. Pattern Matching kann danach die Fallbehandlung lesbarer machen.

JAVA
public record CustomerId(UUID value) {
    public CustomerId {
        Objects.requireNonNull(value, "value");
    }
}

public sealed interface PaymentResult
        permits PaymentAccepted, PaymentRejected {
}

public record PaymentAccepted(String transactionId)
        implements PaymentResult {
}

public record PaymentRejected(String reason)
        implements PaymentResult {
}
Nebenläufigkeit

Virtual Threads reduzieren die Kosten blockierender I/O-Workloads, lösen aber keine Probleme mit gemeinsamem mutablem Zustand, Datenbankgrenzen oder externen Kapazitätslimits.

Die Senior-Frage lautet nicht nur „Wie viele Threads?“, sondern „Welche Ressource begrenzt den Durchsatz und wie wird Rückstau kontrolliert?“

JAVA
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    var futures = requests.stream()
            .map(request -> executor.submit(() -> client.load(request)))
            .toList();

    return futures.stream()
            .map(Future::resultNow)
            .toList();
}
JVM-Diagnose

Für Produktionsprobleme werden Symptome zuerst klassifiziert: CPU, Heap, Native Memory, Threads, GC, I/O oder externe Abhängigkeit. Danach wird das passende Werkzeug gewählt.

Java Flight Recorder liefert zeitbezogene Ereignisse mit geringerem Diagnoseaufwand als eine unstrukturierte Sammlung einzelner Dumps.

BASH
# 60 Sekunden Flight Recording starten
jcmd <PID> JFR.start name=incident settings=profile duration=60s filename=incident.jfr

# Thread-Dump erzeugen
jcmd <PID> Thread.print > thread-dump.txt

# Heap-Übersicht
jcmd <PID> GC.heap_info

Praxisartefakt · JVM-Diagnose

Symptom
p99-Latenz steigt alle fünf Minuten für etwa acht Sekunden.
Evidenz
JFR zeigt Full GC gleichzeitig mit großem temporärem JSON-Buffer.
Ursache
Unbegrenzte Response-Aggregation im Exportpfad.
Korrektur
Streaming-Ausgabe mit begrenztem Buffer.
Nachweis
Gleiche Last ohne Full GC, stabiler Heap und p99 unter Budget.
⌂ Cockpit