You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2020/04/07 02:42:40 UTC
[dubbo] branch master updated: perf: Reuse Hessian2Output and
Hessian2Input instance to reduce memory allocation. (#5889)
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new 78d5277 perf: Reuse Hessian2Output and Hessian2Input instance to reduce memory allocation. (#5889)
78d5277 is described below
commit 78d527788d6fdc2d27e33261299f20db65f74139
Author: LinShunKang <li...@gmail.com>
AuthorDate: Tue Apr 7 10:42:21 2020 +0800
perf: Reuse Hessian2Output and Hessian2Input instance to reduce memory allocation. (#5889)
fixes #5892
---
.../dubbo/common/serialize/hessian2/Hessian2ObjectInput.java | 12 ++++++++++--
.../common/serialize/hessian2/Hessian2ObjectOutput.java | 12 ++++++++++--
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/Hessian2ObjectInput.java b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/Hessian2ObjectInput.java
index 08c758d..d38b5c0 100644
--- a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/Hessian2ObjectInput.java
+++ b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/Hessian2ObjectInput.java
@@ -28,11 +28,19 @@ import java.lang.reflect.Type;
* Hessian2 object input implementation
*/
public class Hessian2ObjectInput implements ObjectInput {
+
+ private static ThreadLocal<Hessian2Input> INPUT_TL = ThreadLocal.withInitial(() -> {
+ Hessian2Input h2i = new Hessian2Input(null);
+ h2i.setSerializerFactory(Hessian2SerializerFactory.SERIALIZER_FACTORY);
+ h2i.setCloseStreamOnClose(true);
+ return h2i;
+ });
+
private final Hessian2Input mH2i;
public Hessian2ObjectInput(InputStream is) {
- mH2i = new Hessian2Input(is);
- mH2i.setSerializerFactory(Hessian2SerializerFactory.SERIALIZER_FACTORY);
+ mH2i = INPUT_TL.get();
+ mH2i.init(is);
}
@Override
diff --git a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/Hessian2ObjectOutput.java b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/Hessian2ObjectOutput.java
index 61e38c0..a878593 100644
--- a/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/Hessian2ObjectOutput.java
+++ b/dubbo-serialization/dubbo-serialization-hessian2/src/main/java/org/apache/dubbo/common/serialize/hessian2/Hessian2ObjectOutput.java
@@ -27,11 +27,19 @@ import java.io.OutputStream;
* Hessian2 object output implementation
*/
public class Hessian2ObjectOutput implements ObjectOutput {
+
+ private static ThreadLocal<Hessian2Output> OUTPUT_TL = ThreadLocal.withInitial(() -> {
+ Hessian2Output h2o = new Hessian2Output(null);
+ h2o.setSerializerFactory(Hessian2SerializerFactory.SERIALIZER_FACTORY);
+ h2o.setCloseStreamOnClose(true);
+ return h2o;
+ });
+
private final Hessian2Output mH2o;
public Hessian2ObjectOutput(OutputStream os) {
- mH2o = new Hessian2Output(os);
- mH2o.setSerializerFactory(Hessian2SerializerFactory.SERIALIZER_FACTORY);
+ mH2o = OUTPUT_TL.get();
+ mH2o.init(os);
}
@Override