[cp-patches] FYI: Permission minor fix

Tania Bento tbento at redhat.com
Wed Jan 10 21:44:00 UTC 2007


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
> 
-------------- next part --------------
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);
  }

}


More information about the Classpath-patches mailing list