Entwurfsmuster und fachliche Grenzen
Die Muster im Lab dienen nicht der Dekoration. Jedes löst ein konkretes Diagnose- oder Retentionsproblem. Gleichzeitig nennt diese Seite die Grenze des jeweiligen Ansatzes, damit aus einem Lehrbeispiel keine falsche Produktionsregel wird.
| Muster | Einsatzort | Nutzen | Grenze |
|---|---|---|---|
| Immutable Snapshot | JvmDiagnosticSnapshot | Korreliert Werte eines Zeitpunkts und verhindert nachträgliche Mutation. | Ein Snapshot zeigt keinen Trend; Produktion braucht Zeitreihen. |
| Decision Table | JvmIncidentClassifier | Macht Schwellen, Evidenz und nächste Schritte überprüfbar. | Die erste passende Regel ist eine Hypothese, keine Root Cause. |
| Scenario Object | DiagnosticScenarioFactory | Erzeugt reproduzierbare Vorher-/Nachher-Daten. | Synthetische Daten ersetzen keinen realistischen Lasttest. |
| Bounded LRU Cache | RetainedCache | Begrenzt Retention und entfernt wenig genutzte Einträge. | Ein Eintragslimit ignoriert unterschiedliche Objektgrößen und verteilte Konsistenz. |
| Static Registry Anti-Pattern | LeakProneStaticRegistry | Macht einen starken GC-Root-Pfad sichtbar. | Reale Leaks entstehen oft indirekt über Listener, ThreadLocals oder Classloader. |
| Weak Reference Registry | WeakSessionRegistry | Vermeidet starke Ownership, wenn Daten jederzeit neu erzeugbar sind. | Weak References sind kein allgemeiner Cache und bieten keine Verfügbarkeitsgarantie. |
| Parser | GcLogParser | Trennt Logsyntax von Diagnoseentscheidungen. | Das Lab unterstützt bewusst nur einen Ausschnitt realer Unified Logs. |
| Scope Timer / Aggregator | ProfilingTimer, HotPathAnalyzer | Erklärt lokale Instrumentierung, Median und p95. | Kein Ersatz für JMH, JFR oder Sampling Profiler. |
Warum keine automatische „Optimierung“?
Eine Diagnosekomponente sollte nicht selbständig Heapgrößen, GC oder Threadzahlen verändern. Sie kennt weder SLOs noch Lastprofil, Kostenrahmen und Rollback-Risiko. Deshalb liefert IncidentAssessment Evidenz und nächste Messschritte. Die betriebliche Entscheidung bleibt explizit.
Erweiterungsaufgaben
- Ergänze mehrere gleichzeitig aktive Verdachtsbilder statt nur einer Primärdiagnose.
- Berechne Deltas zwischen zwei Snapshots, besonders GC-Zeit und Classloading.
- Importiere ein echtes GC-Log als Test-Fixture.
- Ersetze die Lehrmessung durch ein separates JMH-Modul.
- Modelliere Direct-Buffer- und Thread-Stack-Budgets aus realen Prozessdaten.