You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2022/06/27 03:16:22 UTC

[dubbo] branch 3.0 updated: Optimization code (#10158)

This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 06cb5cdd3f Optimization code (#10158)
06cb5cdd3f is described below

commit 06cb5cdd3fbdfb0f729a14c061304820b410fdc2
Author: hdyztmdqd <hd...@gmail.com>
AuthorDate: Mon Jun 27 11:16:15 2022 +0800

    Optimization code (#10158)
    
    * Use StringBuilder#append(Char) to improve performance
    
    * replace with lambda
    
    * The original implementation calls the get method twice.Replace it with computeIfAbsent.
    
    Co-authored-by: huangdeyuan <29...@qq.com>
---
 .../rpc/cluster/router/RouterSnapshotNode.java     |  4 +--
 .../cluster/router/mesh/route/MeshRuleRouter.java  |  2 +-
 .../cluster/router/state/RouterGroupingState.java  |  2 +-
 .../src/main/java/org/apache/dubbo/common/URL.java |  6 ++--
 .../org/apache/dubbo/common/bytecode/Mixin.java    |  2 +-
 .../org/apache/dubbo/common/bytecode/Proxy.java    |  2 +-
 .../dubbo/common/extension/ExtensionLoader.java    | 39 +++++++++++-----------
 .../org/apache/dubbo/common/profiler/Profiler.java |  4 +--
 .../apache/dubbo/common/utils/ExecutorUtil.java    | 23 ++++++-------
 .../dubbo/common/io/UnsafeStringWriterTest.java    |  2 +-
 .../report/support/AbstractMetadataReport.java     | 27 +++++++--------
 .../AbstractServiceAnnotationProcessor.java        |  2 +-
 .../dubbo/qos/command/impl/ChangeTelnet.java       |  2 +-
 .../dubbo/qos/command/impl/GetRouterSnapshot.java  |  2 +-
 .../dubbo/qos/command/impl/InvokeTelnet.java       |  2 +-
 .../qos/server/handler/QosProcessHandler.java      | 13 +++-----
 .../listener/ServiceInstancesChangedListener.java  |  2 +-
 .../registry/multicast/MulticastRegistry.java      | 13 +++-----
 .../remoting/http/jetty/JettyLoggerAdapter.java    |  2 +-
 .../apache/dubbo/test/check/DubboTestChecker.java  |  2 +-
 20 files changed, 69 insertions(+), 84 deletions(-)

diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/RouterSnapshotNode.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/RouterSnapshotNode.java
index d8f21a9a3d..b0a09759b6 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/RouterSnapshotNode.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/RouterSnapshotNode.java
@@ -116,10 +116,10 @@ public class RouterSnapshotNode<T> {
         StringBuilder stringBuilder = new StringBuilder();
         stringBuilder.append("[ ")
             .append(name)
-            .append(" ")
+            .append(' ')
             .append("(Input: ").append(beforeSize).append(") ")
             .append("(Current Node Output: ").append(nodeOutputSize).append(") ")
-            .append("(Chain Node Output: ").append(chainOutputSize).append(")")
+            .append("(Chain Node Output: ").append(chainOutputSize).append(')')
             .append(routerMessage == null ? "" : " Router message: ")
             .append(routerMessage == null ? "" : routerMessage)
             .append(" ] ");
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouter.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouter.java
index de4ab18f3f..105332e9b7 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouter.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/mesh/route/MeshRuleRouter.java
@@ -103,7 +103,7 @@ public abstract class MeshRuleRouter<T> extends AbstractStateRouter<T> implement
                     BitList<Invoker<T>> destination = meshRuleCache.getSubsetInvokers(appName, subset);
                     result = result.or(destination);
                     if (stringBuilder != null) {
-                        stringBuilder.append("Match App: ").append(appName).append(" Subset: ").append(subset).append(" ");
+                        stringBuilder.append("Match App: ").append(appName).append(" Subset: ").append(subset).append(' ');
                     }
                 }
             }
diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/state/RouterGroupingState.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/state/RouterGroupingState.java
index 396efa1f1a..fed028b7e2 100644
--- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/state/RouterGroupingState.java
+++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/router/state/RouterGroupingState.java
@@ -49,7 +49,7 @@ public class RouterGroupingState<T> {
     public String toString() {
         StringBuilder stringBuilder = new StringBuilder();
         stringBuilder.append(routerName)
-            .append(" ")
+            .append(' ')
             .append(" Total: ")
             .append(total)
             .append("\n");
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
index fb9f1b65a5..2e1eb3a17a 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
@@ -378,11 +378,11 @@ class URL implements Serializable {
 
         if (StringUtils.isNotEmpty(getHost())) {
             if (StringUtils.isNotEmpty(getUsername()) || StringUtils.isNotEmpty(getPassword())) {
-                ret.append("@");
+                ret.append('@');
             }
             ret.append(getHost());
             if (getPort() != 0) {
-                ret.append(":");
+                ret.append(':');
                 ret.append(getPort());
             }
         }
@@ -406,7 +406,7 @@ class URL implements Serializable {
             ret.append(getUsername());
         }
 
-        ret.append(":");
+        ret.append(':');
 
         if (StringUtils.isNotEmpty(getPassword())) {
             ret.append(getPassword());
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Mixin.java b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Mixin.java
index 88f23be03e..86b819d0b6 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Mixin.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Mixin.java
@@ -108,7 +108,7 @@ public abstract class Mixin {
 
                 code.append('d').append(i).append(" = (").append(dcs[i].getName()).append(")$1[").append(i).append("];\n");
                 if (MixinAware.class.isAssignableFrom(dcs[i])) {
-                    code.append("d").append(i).append(".setMixinInstance(this);\n");
+                    code.append('d').append(i).append(".setMixinInstance(this);\n");
                 }
             }
             ccp.addConstructor(Modifier.PUBLIC, new Class<?>[]{Object[].class}, code.toString());
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Proxy.java b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Proxy.java
index 30617a2226..c3f14bee12 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Proxy.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/bytecode/Proxy.java
@@ -150,7 +150,7 @@ public class Proxy {
 
                     StringBuilder code = new StringBuilder("Object[] args = new Object[").append(pts.length).append("];");
                     for (int j = 0; j < pts.length; j++) {
-                        code.append(" args[").append(j).append("] = ($w)$").append(j + 1).append(";");
+                        code.append(" args[").append(j).append("] = ($w)$").append(j + 1).append(';');
                     }
                     code.append(" Object ret = handler.invoke(this, methods[").append(ix).append("], args);");
                     if (!Void.TYPE.equals(rt)) {
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
index a170f3684c..2c0d955b8c 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
@@ -1095,28 +1095,27 @@ public class ExtensionLoader<T> {
             }
         }
 
-        if (urlListMap.get(resourceURL) != null) {
-            return urlListMap.get(resourceURL);
-        }
-
-        List<String> newContentList = new ArrayList<>();
-
-        try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceURL.openStream(), StandardCharsets.UTF_8))) {
-            String line;
-            while ((line = reader.readLine()) != null) {
-                final int ci = line.indexOf('#');
-                if (ci >= 0) {
-                    line = line.substring(0, ci);
-                }
-                line = line.trim();
-                if (line.length() > 0) {
-                    newContentList.add(line);
+        List<String> contentList = urlListMap.computeIfAbsent(resourceURL,key->{
+            List<String> newContentList = new ArrayList<>();
+
+            try (BufferedReader reader = new BufferedReader(new InputStreamReader(resourceURL.openStream(), StandardCharsets.UTF_8))) {
+                String line;
+                while ((line = reader.readLine()) != null) {
+                    final int ci = line.indexOf('#');
+                    if (ci >= 0) {
+                        line = line.substring(0, ci);
+                    }
+                    line = line.trim();
+                    if (line.length() > 0) {
+                        newContentList.add(line);
+                    }
                 }
+            } catch (IOException e) {
+                throw new RuntimeException(e.getMessage(), e);
             }
-        }
-
-        urlListMap.put(resourceURL, newContentList);
-        return newContentList;
+            return newContentList;
+        });
+        return contentList;
     }
 
     private boolean isIncluded(String className, String... includedPackages) {
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/profiler/Profiler.java b/dubbo-common/src/main/java/org/apache/dubbo/common/profiler/Profiler.java
index 8bb1920e19..4fc50d90d0 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/profiler/Profiler.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/profiler/Profiler.java
@@ -79,9 +79,9 @@ public class Profiler {
         long offset = entry.getStartTime() - startTime;
         List<String> lines = new LinkedList<>();
         stringBuilder.append("+-[ Offset: ")
-            .append(offset / 1000_000).append(".").append(String.format("%06d", offset % 1000_000))
+            .append(offset / 1000_000).append('.').append(String.format("%06d", offset % 1000_000))
             .append("ms; Usage: ")
-            .append(usage / 1000_000).append(".").append(String.format("%06d", usage % 1000_000))
+            .append(usage / 1000_000).append('.').append(String.format("%06d", usage % 1000_000))
             .append("ms, ")
             .append(percent)
             .append("% ] ")
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ExecutorUtil.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ExecutorUtil.java
index 97f13a5f96..c462ac4d7d 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ExecutorUtil.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ExecutorUtil.java
@@ -99,21 +99,18 @@ public class ExecutorUtil {
 
     private static void newThreadToCloseExecutor(final ExecutorService es) {
         if (!isTerminated(es)) {
-            SHUTDOWN_EXECUTOR.execute(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        for (int i = 0; i < 1000; i++) {
-                            es.shutdownNow();
-                            if (es.awaitTermination(10, TimeUnit.MILLISECONDS)) {
-                                break;
-                            }
+            SHUTDOWN_EXECUTOR.execute(() -> {
+                try {
+                    for (int i = 0; i < 1000; i++) {
+                        es.shutdownNow();
+                        if (es.awaitTermination(10, TimeUnit.MILLISECONDS)) {
+                            break;
                         }
-                    } catch (InterruptedException ex) {
-                        Thread.currentThread().interrupt();
-                    } catch (Throwable e) {
-                        logger.warn(e.getMessage(), e);
                     }
+                } catch (InterruptedException ex) {
+                    Thread.currentThread().interrupt();
+                } catch (Throwable e) {
+                    logger.warn(e.getMessage(), e);
                 }
             });
         }
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/io/UnsafeStringWriterTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/io/UnsafeStringWriterTest.java
index dbe8d5ca16..3f4c0c81c2 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/io/UnsafeStringWriterTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/io/UnsafeStringWriterTest.java
@@ -45,7 +45,7 @@ public class UnsafeStringWriterTest {
     @Test
     public void testAppend() {
         UnsafeStringWriter writer = new UnsafeStringWriter();
-        writer.append("a");
+        writer.append('a');
         writer.append("abc", 1, 2);
         writer.append('c');
         writer.flush();
diff --git a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java
index 1e2d26c61e..e24e273739 100644
--- a/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java
+++ b/dubbo-metadata/dubbo-metadata-api/src/main/java/org/apache/dubbo/metadata/report/support/AbstractMetadataReport.java
@@ -453,22 +453,19 @@ public abstract class AbstractMetadataReport implements MetadataReport {
             if (retryScheduledFuture == null) {
                 synchronized (retryCounter) {
                     if (retryScheduledFuture == null) {
-                        retryScheduledFuture = retryExecutor.scheduleWithFixedDelay(new Runnable() {
-                            @Override
-                            public void run() {
-                                // Check and connect to the metadata
-                                try {
-                                    int times = retryCounter.incrementAndGet();
-                                    logger.info("start to retry task for metadata report. retry times:" + times);
-                                    if (retry() && times > retryTimesIfNonFail) {
-                                        cancelRetryTask();
-                                    }
-                                    if (times > retryLimit) {
-                                        cancelRetryTask();
-                                    }
-                                } catch (Throwable t) { // Defensive fault tolerance
-                                    logger.error("Unexpected error occur at failed retry, cause: " + t.getMessage(), t);
+                        retryScheduledFuture = retryExecutor.scheduleWithFixedDelay(() -> {
+                            // Check and connect to the metadata
+                            try {
+                                int times = retryCounter.incrementAndGet();
+                                logger.info("start to retry task for metadata report. retry times:" + times);
+                                if (retry() && times > retryTimesIfNonFail) {
+                                    cancelRetryTask();
                                 }
+                                if (times > retryLimit) {
+                                    cancelRetryTask();
+                                }
+                            } catch (Throwable t) { // Defensive fault tolerance
+                                logger.error("Unexpected error occur at failed retry, cause: " + t.getMessage(), t);
                             }
                         }, 500, retryPeriod, TimeUnit.MILLISECONDS);
                     }
diff --git a/dubbo-metadata/dubbo-metadata-processor/src/main/java/org/apache/dubbo/metadata/annotation/processing/AbstractServiceAnnotationProcessor.java b/dubbo-metadata/dubbo-metadata-processor/src/main/java/org/apache/dubbo/metadata/annotation/processing/AbstractServiceAnnotationProcessor.java
index 0eacd6ade5..d65c6ba7e8 100644
--- a/dubbo-metadata/dubbo-metadata-processor/src/main/java/org/apache/dubbo/metadata/annotation/processing/AbstractServiceAnnotationProcessor.java
+++ b/dubbo-metadata/dubbo-metadata-processor/src/main/java/org/apache/dubbo/metadata/annotation/processing/AbstractServiceAnnotationProcessor.java
@@ -82,7 +82,7 @@ public abstract class AbstractServiceAnnotationProcessor extends AbstractProcess
         });
 
         methodSignatureBuilder.append(method.getReturnType())
-                .append(" ")
+                .append(' ')
                 .append(method.toString());
 
         return methodSignatureBuilder.toString();
diff --git a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/ChangeTelnet.java b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/ChangeTelnet.java
index d0a9f2d999..96d6d3c5e2 100644
--- a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/ChangeTelnet.java
+++ b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/ChangeTelnet.java
@@ -51,7 +51,7 @@ public class ChangeTelnet implements BaseCommand {
         StringBuilder buf = new StringBuilder();
         if ("/".equals(message) || "..".equals(message)) {
             String service = channel.attr(SERVICE_KEY).getAndRemove();
-            buf.append("Cancelled default service ").append(service).append(".");
+            buf.append("Cancelled default service ").append(service).append('.');
         } else {
             boolean found = false;
             for (Exporter<?> exporter : dubboProtocol.getExporters()) {
diff --git a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/GetRouterSnapshot.java b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/GetRouterSnapshot.java
index b827da6748..0c34f18f9e 100644
--- a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/GetRouterSnapshot.java
+++ b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/GetRouterSnapshot.java
@@ -57,7 +57,7 @@ public class GetRouterSnapshot implements BaseCommand {
                         for (Map.Entry<Registry, MigrationInvoker<?>> invokerEntry : invokerMap.entrySet()) {
                             Directory<?> directory = invokerEntry.getValue().getDirectory();
                             StateRouter<?> headStateRouter = directory.getRouterChain().getHeadStateRouter();
-                            stringBuilder.append(metadata.getServiceKey()).append("@").append(Integer.toHexString(System.identityHashCode(metadata)))
+                            stringBuilder.append(metadata.getServiceKey()).append('@').append(Integer.toHexString(System.identityHashCode(metadata)))
                                 .append("\n")
                                 .append("[ All Invokers:").append(directory.getAllInvokers().size()).append(" ] ")
                                 .append("[ Valid Invokers: ").append(((AbstractDirectory<?>)directory).getValidInvokers().size()).append(" ]\n")
diff --git a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/InvokeTelnet.java b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/InvokeTelnet.java
index 6ac889ed80..507282160e 100644
--- a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/InvokeTelnet.java
+++ b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/command/impl/InvokeTelnet.java
@@ -133,7 +133,7 @@ public class InvokeTelnet implements BaseCommand {
 
 
         if (!StringUtils.isEmpty(service)) {
-            buf.append("Use default service ").append(service).append(".");
+            buf.append("Use default service ").append(service).append('.');
         }
         if (selectedProvider == null) {
             buf.append("\r\nNo such service ").append(service);
diff --git a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/server/handler/QosProcessHandler.java b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/server/handler/QosProcessHandler.java
index f1dc1eee77..4e5ef439f8 100644
--- a/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/server/handler/QosProcessHandler.java
+++ b/dubbo-plugin/dubbo-qos/src/main/java/org/apache/dubbo/qos/server/handler/QosProcessHandler.java
@@ -57,16 +57,11 @@ public class QosProcessHandler extends ByteToMessageDecoder {
 
     @Override
     public void channelActive(final ChannelHandlerContext ctx) throws Exception {
-        welcomeFuture = ctx.executor().schedule(new Runnable() {
-
-            @Override
-            public void run() {
-                if (welcome != null) {
-                    ctx.write(Unpooled.wrappedBuffer(welcome.getBytes()));
-                    ctx.writeAndFlush(Unpooled.wrappedBuffer(PROMPT.getBytes()));
-                }
+        welcomeFuture = ctx.executor().schedule(() -> {
+            if (welcome != null) {
+                ctx.write(Unpooled.wrappedBuffer(welcome.getBytes()));
+                ctx.writeAndFlush(Unpooled.wrappedBuffer(PROMPT.getBytes()));
             }
-
         }, 500, TimeUnit.MILLISECONDS);
     }
 
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
index 3142f5f202..486fd90868 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/event/listener/ServiceInstancesChangedListener.java
@@ -328,7 +328,7 @@ public class ServiceInstancesChangedListener {
             }
 
             builder.append(entry.getKey());
-            builder.append(" ");
+            builder.append(' ');
         }
 
         if (emptyMetadataNum > 0) {
diff --git a/dubbo-registry/dubbo-registry-multicast/src/main/java/org/apache/dubbo/registry/multicast/MulticastRegistry.java b/dubbo-registry/dubbo-registry-multicast/src/main/java/org/apache/dubbo/registry/multicast/MulticastRegistry.java
index 689d3c81d8..f9679153e1 100644
--- a/dubbo-registry/dubbo-registry-multicast/src/main/java/org/apache/dubbo/registry/multicast/MulticastRegistry.java
+++ b/dubbo-registry/dubbo-registry-multicast/src/main/java/org/apache/dubbo/registry/multicast/MulticastRegistry.java
@@ -134,14 +134,11 @@ public class MulticastRegistry extends FailbackRegistry {
         }
         this.cleanPeriod = url.getParameter(SESSION_TIMEOUT_KEY, DEFAULT_SESSION_TIMEOUT);
         if (url.getParameter("clean", true)) {
-            this.cleanFuture = cleanExecutor.scheduleWithFixedDelay(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                        clean(); // Remove the expired
-                    } catch (Throwable t) { // Defensive fault tolerance
-                        logger.error("Unexpected exception occur at clean expired provider, cause: " + t.getMessage(), t);
-                    }
+            this.cleanFuture = cleanExecutor.scheduleWithFixedDelay(() -> {
+                try {
+                    clean(); // Remove the expired
+                } catch (Throwable t) { // Defensive fault tolerance
+                    logger.error("Unexpected exception occur at clean expired provider, cause: " + t.getMessage(), t);
                 }
             }, cleanPeriod, cleanPeriod, TimeUnit.MILLISECONDS);
         } else {
diff --git a/dubbo-remoting/dubbo-remoting-http/src/main/java/org/apache/dubbo/remoting/http/jetty/JettyLoggerAdapter.java b/dubbo-remoting/dubbo-remoting-http/src/main/java/org/apache/dubbo/remoting/http/jetty/JettyLoggerAdapter.java
index cb9a84f35e..1b7f1aa85f 100644
--- a/dubbo-remoting/dubbo-remoting-http/src/main/java/org/apache/dubbo/remoting/http/jetty/JettyLoggerAdapter.java
+++ b/dubbo-remoting/dubbo-remoting-http/src/main/java/org/apache/dubbo/remoting/http/jetty/JettyLoggerAdapter.java
@@ -143,7 +143,7 @@ public class JettyLoggerAdapter extends AbstractLogger {
             int bracesIndex = msg.indexOf(braces, start);
             if (bracesIndex < 0) {
                 builder.append(msg.substring(start));
-                builder.append(" ");
+                builder.append(' ');
                 builder.append(arg);
                 start = msg.length();
             } else {
diff --git a/dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/DubboTestChecker.java b/dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/DubboTestChecker.java
index 5a065aac2b..846d01a8ad 100644
--- a/dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/DubboTestChecker.java
+++ b/dubbo-test/dubbo-test-check/src/main/java/org/apache/dubbo/test/check/DubboTestChecker.java
@@ -297,7 +297,7 @@ public class DubboTestChecker implements TestExecutionListener {
     public static String getFullStacktrace(Thread thread, StackTraceElement[] stackTrace) {
         StringBuilder sb = new StringBuilder("Thread: \"" + thread.getName() + "\"" + " Id="
             + thread.getId());
-        sb.append(" ").append(thread.getState());
+        sb.append(' ').append(thread.getState());
         sb.append('\n');
         if (stackTrace == null) {
             stackTrace = thread.getStackTrace();