You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zipkin.apache.org by an...@apache.org on 2019/05/14 07:42:53 UTC

[incubator-zipkin] branch master updated: Let Java copy arrays which it can sometimes do faster than manual loops. (#2591)

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

anuraaga pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin.git


The following commit(s) were added to refs/heads/master by this push:
     new 1f152a4  Let Java copy arrays which it can sometimes do faster than manual loops. (#2591)
1f152a4 is described below

commit 1f152a418178ef4da75b0f99cbef5674d18114ae
Author: Anuraag Agrawal <an...@gmail.com>
AuthorDate: Tue May 14 16:42:49 2019 +0900

    Let Java copy arrays which it can sometimes do faster than manual loops. (#2591)
---
 benchmarks/src/main/java/zipkin2/SpanBenchmarks.java | 20 ++++++++++++++++++++
 zipkin/src/main/java/zipkin2/Span.java               | 16 +++++++++++++---
 2 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/benchmarks/src/main/java/zipkin2/SpanBenchmarks.java b/benchmarks/src/main/java/zipkin2/SpanBenchmarks.java
index a30a1d2..182c7ae 100644
--- a/benchmarks/src/main/java/zipkin2/SpanBenchmarks.java
+++ b/benchmarks/src/main/java/zipkin2/SpanBenchmarks.java
@@ -143,6 +143,26 @@ public class SpanBenchmarks {
     return output.getBuffer();
   }
 
+  @Benchmark
+  public String padLeft_1Char() {
+    return Span.padLeft("1", 16);
+  }
+
+  @Benchmark
+  public String padLeft_15Chars() {
+    return Span.padLeft("123456789012345", 16);
+  }
+
+  @Benchmark
+  public String padLeft_17Chars() {
+    return Span.padLeft("12345678901234567", 32);
+  }
+
+  @Benchmark
+  public String padLeft_31Chars() {
+    return Span.padLeft("1234567890123456789012345678901", 32);
+  }
+
   // Convenience main entry-point
   public static void main(String[] args) throws RunnerException {
     Options opt = new OptionsBuilder()
diff --git a/zipkin/src/main/java/zipkin2/Span.java b/zipkin/src/main/java/zipkin2/Span.java
index 6ea685d..8d22bce 100644
--- a/zipkin/src/main/java/zipkin2/Span.java
+++ b/zipkin/src/main/java/zipkin2/Span.java
@@ -659,11 +659,21 @@ public final class Span implements Serializable { // for Spark and Flink jobs
     }
   }
 
+  static final String THIRTY_TWO_ZEROS;
+  static {
+    char[] zeros = new char[32];
+    Arrays.fill(zeros, '0');
+    THIRTY_TWO_ZEROS = new String(zeros);
+  }
+
   static String padLeft(String id, int desiredLength) {
+    int length = id.length();
+    int numZeros = desiredLength - length;
+
     char[] data = Platform.shortStringBuffer();
-    int i = 0, length = id.length(), offset = desiredLength - length;
-    for (; i < offset; i++) data[i] = '0';
-    for (int j = 0; j < length; j++) data[i++] = id.charAt(j);
+    THIRTY_TWO_ZEROS.getChars(0, numZeros, data, 0);
+    id.getChars(0, length, data, numZeros);
+
     return new String(data, 0, desiredLength);
   }