From 5223217121533fe34d811c33902d89f0f9564ea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=B6=E6=97=A0=E4=B8=A4=E4=B8=B6?= <442367943@qq.com> Date: Wed, 4 Dec 2019 20:53:11 +0800 Subject: [PATCH] Replace map with set. (#9833) Motivation: Replace Map with Set. `reportedLeaks` has better semantics as a Set, and if it is a Map, it seems that the value of this Map has no meaning to us. Modifications: Use Set. Result: Cleaner code --- .../main/java/io/netty/util/ResourceLeakDetector.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/io/netty/util/ResourceLeakDetector.java b/common/src/main/java/io/netty/util/ResourceLeakDetector.java index 0ada985f09..3d73b6af2f 100644 --- a/common/src/main/java/io/netty/util/ResourceLeakDetector.java +++ b/common/src/main/java/io/netty/util/ResourceLeakDetector.java @@ -25,10 +25,10 @@ import java.lang.ref.ReferenceQueue; import java.lang.ref.WeakReference; import java.lang.reflect.Method; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import java.util.concurrent.atomic.AtomicReference; @@ -147,8 +147,8 @@ public class ResourceLeakDetector { private final Set> allLeaks = ConcurrentHashMap.newKeySet(); private final ReferenceQueue refQueue = new ReferenceQueue<>(); - private final ConcurrentMap reportedLeaks = new ConcurrentHashMap<>(); - + private final Set reportedLeaks = + Collections.newSetFromMap(new ConcurrentHashMap<>()); private final String resourceType; private final int samplingInterval; @@ -248,7 +248,6 @@ public class ResourceLeakDetector { private void clearRefQueue() { for (;;) { - @SuppressWarnings("unchecked") DefaultResourceLeak ref = (DefaultResourceLeak) refQueue.poll(); if (ref == null) { break; @@ -265,7 +264,6 @@ public class ResourceLeakDetector { // Detect and report previous leaks. for (;;) { - @SuppressWarnings("unchecked") DefaultResourceLeak ref = (DefaultResourceLeak) refQueue.poll(); if (ref == null) { break; @@ -276,7 +274,7 @@ public class ResourceLeakDetector { } String records = ref.toString(); - if (reportedLeaks.putIfAbsent(records, Boolean.TRUE) == null) { + if (reportedLeaks.add(records)) { if (records.isEmpty()) { reportUntracedLeak(resourceType); } else {