Skip to content

Instantly share code, notes, and snippets.

@egerardus
Last active April 5, 2021 02:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save egerardus/f5e3b0252dbd6b5ee836d7c9a9642006 to your computer and use it in GitHub Desktop.
Save egerardus/f5e3b0252dbd6b5ee836d7c9a9642006 to your computer and use it in GitHub Desktop.
Benchmark for appending delimited data to StringBuilder
package bench;
public class StringBuilderAppendBench
{
private static final int ROUNDS = 100;
private static final int ITERATIONS = 100000;
private static final StringBuilder sb = new StringBuilder(1000000);
public static void main(String[] args)
{
long start;
long end;
long diff;
long total;
// warm-up
for (int i = 0; i < ITERATIONS; i++)
{
appendAfter();
}
sb.setLength(0);
for (int i = 0; i < ITERATIONS; i++)
{
appendBefore();
}
sb.setLength(0);
// appendAfter
total = 0;
for (int r = 1; r <= ROUNDS; r++)
{
start = System.currentTimeMillis();
for (int i = 0; i < ITERATIONS; i++)
{
appendAfter();
}
end = System.currentTimeMillis();
diff = end-start;
total += diff;
//System.out.printf("appendAfter round %d took %dms\n", r, diff);
sb.setLength(0);
}
System.out.printf("appendAfter average: %dms\n", total / ROUNDS);
// appendBefore
total = 0;
for (int r = 1; r <= ROUNDS; r++)
{
start = System.currentTimeMillis();
for (int i = 0; i < ITERATIONS; i++)
{
appendBefore();
}
end = System.currentTimeMillis();
diff = end-start;
total += diff;
//System.out.printf("appendBefore round %d took %dms\n", r, diff);
sb.setLength(0);
}
System.out.printf("appendBefore average: %dms\n", total / ROUNDS);
// appendMaybe
total = 0;
for (int r = 1; r <= ROUNDS; r++)
{
start = System.currentTimeMillis();
for (int i = 0; i < ITERATIONS; i++)
{
appendMaybe();
}
end = System.currentTimeMillis();
diff = end-start;
total += diff;
//System.out.printf("appendMaybe round %d took %dms\n", r, diff);
sb.setLength(0);
}
System.out.printf("appendMaybe average: %dms\n", total / ROUNDS);
}
static void appendAfter()
{
sb.append('{');
for (int i = 0; i < 10; i++)
{
sb.append('"');
sb.append(i);
sb.append('"');
sb.append(':');
sb.append(i);
sb.append(',');
}
sb.setLength(sb.length() - 1);
sb.append('}');
}
static void appendBefore()
{
sb.append('{');
String delimiter = "";
for (int i = 0; i < 10; i++)
{
sb.append(delimiter);
sb.append('"');
sb.append(i);
sb.append('"');
sb.append(':');
sb.append(i);
delimiter = ",";
}
sb.append('}');
}
static void appendMaybe()
{
sb.append('{');
for (int i = 0; i < 10; i++)
{
sb.append('"');
sb.append(i);
sb.append('"');
sb.append(':');
sb.append(i);
if (i < 9)
sb.append(',');
}
sb.append('}');
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment