Wir haben eine Situation mit Spring-Cloud-Netflix-Core-Bibliothek, die here beschrieben wird. Ich denke, das Problem ist mit der Art und Weise CachingSpringLoadBalancerFactory
ist ConcurrentReferenceHashMap
, die here berichtet wird.
Und auch aus der Dokumentation von ConcurrentReferenceHashMap
(die Soft-Referenzen verwendet):Wie funktioniert ConcurrentReferenceHashMap?
Die Verwendung von Referenzen bedeutet, dass es keine Garantie dafür gibt, die in die Karte abgestellte Gegenstände anschließend zur Verfügung stehen werden. Der Garbage Collector kann jederzeit Verweise verwerfen, sodass der Eindruck entsteht, dass ein unbekannter Thread unbemerkt Einträge löscht.
Nun meine Fragen sind:
1. mein Verständnis in der folgenden richtig?
// Original code is in CachingSpringLoadBalancerFactory in spring-cloud-netflix-core
// cache is a field of type ConcurrentReferenceHashMap
if (this.cache.containsKey(clientName)) {
return this.cache.get(clientName); // This can be null, right?
}
2. Gibt es trotzdem einen Testfall dafür zu schreiben. Wir haben es geschafft, es einmal in einer eigenständigen Anwendung mit begrenztem Speicher (-Xmx50m
) zu reproduzieren. Aber wie können wir einen Komponententest schreiben, um ein solches Szenario abzudecken?