Many of you might know, the String concat(+) is costly operation compare to StringBuffer or StringBuilder append() method. But you might not know the actual performance difference.
Let me show you the performance difference with a simple test program,
- package test;
- public class StrVsBuffVsBuild
- public static void main(String[] args)
- int count=200000;
- System.out.println(“Number of Strings concat Operation is ‘”+count+”‘”);
- long st = System.currentTimeMillis();
- String str = “”;
- for (int i = 0; i < count; i++)
- str += “MyString”;
- System.out.println(“Time taken for String concat (+) Operation is ‘”+(System.currentTimeMillis()-st)+”‘ Millis”);
- st = System.currentTimeMillis();
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < count; i++)
- sb.append(“MyString”);
- System.out.println(“Time taken for StringBuffer.append() Operation is ‘”+(System.currentTimeMillis()-st)+”‘ Millis”);
- st = System.currentTimeMillis();
- StringBuilder sbr = new StringBuilder();
- for (int i = 0; i < count; i++)
- sbr.append(“MyString”);
- System.out.println(“Time taken for StringBuilder.append() Operation is ‘”+(System.currentTimeMillis()-st)+”‘ Millis”);
- }
- }
Following are the output of the above test program,
Number of Strings concat Operation is ‘200000’
Time taken for String concat (+) Operation is ‘373933’ Millis
Time taken for StringBuffer.append() Operation is ’19’ MillisTime taken for StringBuilder.append() Operation is ‘5’ Millis
The String concat (+) took 6.2 Minutes, however others took only 19 / 5 milliseconds.
Is it comparable ? Moreover, during the execution of String concat()
operation time(6.2 Minutes), the java process took 100% CPU
utilization. You can see the CPU usage of the m/c and java program in the below graphs,
So, use StringBuilder (or) StringBuffer append instead of String
concat(+). Your next question will be ‘Which one is best StringBuffer or
StringBuilder ?’. Since the StringBuffer methods are synchronized, it
is safe if the code accessed by multiple threads. But the StringBuilder methods
are not synchronized, so it is not thread-safe. So, if you require to
append a global variable which can be accessed by multiple threads, you
should use StringBuffer. If it is a method level variable which cannot
be accessed by multiple threads, you should use StringBuilder. Due to the absence of synchronization, the StringBuilder is faster than the StringBuffer.
concat(+). Your next question will be ‘Which one is best StringBuffer or
StringBuilder ?’. Since the StringBuffer methods are synchronized, it
is safe if the code accessed by multiple threads. But the StringBuilder methods
are not synchronized, so it is not thread-safe. So, if you require to
append a global variable which can be accessed by multiple threads, you
should use StringBuffer. If it is a method level variable which cannot
be accessed by multiple threads, you should use StringBuilder. Due to the absence of synchronization, the StringBuilder is faster than the StringBuffer.
– Ramesh
You Can Learn More About the ManageEngine Product Line By Going to manageengine.optrics.com
The original article/video can be found at High Java CPU due to String Concatenation – String + Vs StringBuffer or StringBuilder