Sorry... I attached the wrong file. This one actually shows what I am referring to when I write Test 1, Test 2, Test 3 and Test 4.
On Wed, 2007-01-10 at 16:41 -0500, Tania Bento wrote: > Hey, > > On Tue, 2007-01-09 at 18:01 -0800, David Daney wrote: > > Roman Kennke wrote: > > > Hi, > > > > > > > > >> This fixes a minor bug in Permission's toString method. I also changed > > >> it to use a StringBuffer instead. > > >> > > > > > > Why not use StringBuilder? Seems slightly more efficient. > > > > > > /Roman > > > > > > > > Why not leave it much as it was using the string concatenation operator > > '+'? The compiler converts this to String[Buffer|Builder] when it > > generates the byte code. IMO this patch makes the code much more > > difficult to understand with *no* improvement in efficiency. > > > > I've written a quick benchmark that shows the difference between using > string concatenation, StringBuffer and StringBuilder. The test I used > is attached. Here are the results (in milliseconds) I got (more or > less): > > Implementation Test 1 Test 2 Test 3 Test 4 > string concatenation 9 120 950 8000 > StringBuffer 8 130 750 7000 > StringBuilder 7 130 740 7500 > > > Here is the code for the different implementations I used: > > String Concatenation: > > String actions = ""; > if (!getActions().equals("")) > actions = ' ' + getActions() + ' '; > > String string = '(' + getClass().getName() + ' ' > + actions + getName() + ')'; > > return string; > > StringBuffer: > > String actions = ""; > if (! getActions().equals("")) > actions = ' ' + getActions() + ' '; > > StringBuffer string = new StringBuffer(); > string.append('(').append(getClass().getName()).append(' '). > append(actions).append(getName()).append(')'); > > return string.toString(); > > StringBuilder: > > String actions = ""; > if (! getActions().equals("")) > actions = ' ' + getActions() + ' '; > > StringBuilder string = new StringBuilder(); > string.append('(').append(getClass().getName()).append(' '). > append(actions).append(getName()).append(')'); > > return string.toString(); > > > Let me know your opinions/thoughts on this. > > Cheers, > Tania >
import java.awt.AWTPermission; public class Test { public static void main(String[]args) { AWTPermission permission = new AWTPermission("String"); // Test 1 long start = System.currentTimeMillis(); for (int i = 1; i <= 1000; i++) permission.toString(); long end = System.currentTimeMillis(); long total = end - start; System.out.println("Calling toString 1000 times: " + total); // Test 2 start = System.currentTimeMillis(); for (int i = 1; i <= 10000; i++) permission.toString(); end = System.currentTimeMillis(); total = end - start; System.out.println("Calling toString 10000 times: " + total); // Test 3 start = System.currentTimeMillis(); for (int i = 1; i <= 100000; i++) permission.toString(); end = System.currentTimeMillis(); total = end - start; System.out.println("Calling toString 100000 times: " + total); // Test 4 start = System.currentTimeMillis(); for (int i = 1; i <= 1000000; i++) permission.toString(); end = System.currentTimeMillis(); total = end - start; System.out.println("Calling toString 1000000 times: " + total); } }