Skip to content
This repository has been archived by the owner on Feb 12, 2023. It is now read-only.

Commit

Permalink
- fixing memory leak and performance influxdata#521
Browse files Browse the repository at this point in the history
  • Loading branch information
rhajek committed Sep 17, 2018
1 parent 2ed2183 commit 56fcc8f
Showing 1 changed file with 14 additions and 36 deletions.
50 changes: 14 additions & 36 deletions src/main/java/org/influxdb/dto/Point.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,12 @@
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.TreeMap;
import java.util.concurrent.TimeUnit;

import org.influxdb.impl.Preconditions;

/**
Expand All @@ -35,8 +33,9 @@ public class Point {
return numberFormat;
});

private static final ThreadLocal<Map<String, MeasurementStringBuilder>> CACHED_STRINGBUILDERS =
ThreadLocal.withInitial(HashMap::new);
private static final int DEFAULT_STRING_BUILDER_SIZE = 1024;
private static final ThreadLocal<StringBuilder> CACHED_STRINGBUILDERS =
ThreadLocal.withInitial(() -> new StringBuilder(DEFAULT_STRING_BUILDER_SIZE));

Point() {
}
Expand Down Expand Up @@ -318,16 +317,7 @@ public String toString() {
* @return the String without newLine.
*/
public String lineProtocol() {
final StringBuilder sb = CACHED_STRINGBUILDERS
.get()
.computeIfAbsent(this.measurement, MeasurementStringBuilder::new)
.resetForUse();

concatenatedTags(sb);
concatenatedFields(sb);
formatedTime(sb);

return sb.toString();
return lineProtocol(null);
}

/**
Expand All @@ -336,15 +326,18 @@ public String lineProtocol() {
* @return the String without newLine
*/
public String lineProtocol(final TimeUnit precision) {
final StringBuilder sb = CACHED_STRINGBUILDERS
.get()
.computeIfAbsent(this.measurement, MeasurementStringBuilder::new)
.resetForUse();
final StringBuilder sb = CACHED_STRINGBUILDERS.get();
sb.setLength(0);

concatenatedTags(sb);
concatenatedFields(sb);
escapeKey(sb, measurement);
concatenatedTags(sb);
concatenatedFields(sb);
if (precision != null) {
formatedTime(sb, precision);
return sb.toString();
} else {
formatedTime(sb);
}
return sb.toString();
}

private void concatenatedTags(final StringBuilder sb) {
Expand Down Expand Up @@ -429,19 +422,4 @@ private StringBuilder formatedTime(final StringBuilder sb, final TimeUnit precis
sb.append(" ").append(precision.convert(this.time, this.precision));
return sb;
}

private static class MeasurementStringBuilder {
private final StringBuilder sb = new StringBuilder(128);
private final int length;

MeasurementStringBuilder(final String measurement) {
escapeKey(this.sb, measurement);
this.length = sb.length();
}

StringBuilder resetForUse() {
sb.setLength(length);
return sb;
}
}
}

0 comments on commit 56fcc8f

Please sign in to comment.