|
3 | 3 | import java.math.BigDecimal;
|
4 | 4 | import java.math.BigInteger;
|
5 | 5 | import java.text.NumberFormat;
|
| 6 | +import java.util.HashMap; |
6 | 7 | import java.util.Locale;
|
7 | 8 | import java.util.Map;
|
8 | 9 | import java.util.Map.Entry;
|
@@ -48,6 +49,9 @@ public class Point {
|
48 | 49 | return numberFormat;
|
49 | 50 | });
|
50 | 51 |
|
| 52 | + private static final ThreadLocal<Map<String, MeasurementStringBuilder>> CACHED_STRINGBUILDERS = |
| 53 | + ThreadLocal.withInitial(HashMap::new); |
| 54 | + |
51 | 55 | Point() {
|
52 | 56 | }
|
53 | 57 |
|
@@ -324,8 +328,10 @@ public String toString() {
|
324 | 328 | * @return the String without newLine.
|
325 | 329 | */
|
326 | 330 | public String lineProtocol() {
|
327 |
| - final StringBuilder sb = new StringBuilder(128); |
328 |
| - sb.append(KEY_ESCAPER.escape(this.measurement)); |
| 331 | + final StringBuilder sb = CACHED_STRINGBUILDERS |
| 332 | + .get() |
| 333 | + .computeIfAbsent(this.measurement, MeasurementStringBuilder::new) |
| 334 | + .resetForUse(); |
329 | 335 |
|
330 | 336 | concatenatedTags(sb);
|
331 | 337 | concatenatedFields(sb);
|
@@ -379,4 +385,18 @@ private void formatedTime(final StringBuilder sb) {
|
379 | 385 | sb.append(' ').append(TimeUnit.NANOSECONDS.convert(this.time, this.precision));
|
380 | 386 | }
|
381 | 387 |
|
| 388 | + private static class MeasurementStringBuilder { |
| 389 | + private final StringBuilder sb = new StringBuilder(128); |
| 390 | + private final int length; |
| 391 | + |
| 392 | + MeasurementStringBuilder(final String measurement) { |
| 393 | + this.sb.append(KEY_ESCAPER.escape(measurement)); |
| 394 | + this.length = sb.length(); |
| 395 | + } |
| 396 | + |
| 397 | + StringBuilder resetForUse() { |
| 398 | + sb.setLength(length); |
| 399 | + return sb; |
| 400 | + } |
| 401 | + } |
382 | 402 | }
|
0 commit comments