On 23/09/2014 15:13, Christopher Schultz wrote:
> Mark,
> 
> On 9/23/14 9:15 AM, Mark Thomas wrote:
>> On 23/09/2014 14:09, schu...@apache.org wrote:
>>> Author: schultz
>>> Date: Tue Sep 23 13:09:42 2014
>>> New Revision: 1627000
>>>
>>> URL: http://svn.apache.org/r1627000
>>> Log:
>>> Micro optimization.
>>
>> What is the performance benefit of this change?
> 
> See below.
> 
>>> Modified:
>>>     tomcat/trunk/java/org/apache/tomcat/util/buf/HexUtils.java
>>>
>>> Modified: tomcat/trunk/java/org/apache/tomcat/util/buf/HexUtils.java
>>> URL: 
>>> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/buf/HexUtils.java?rev=1627000&r1=1626999&r2=1627000&view=diff
>>> ==============================================================================
>>> --- tomcat/trunk/java/org/apache/tomcat/util/buf/HexUtils.java (original)
>>> +++ tomcat/trunk/java/org/apache/tomcat/util/buf/HexUtils.java Tue Sep 23 
>>> 13:09:42 2014
>>> @@ -75,10 +75,12 @@ public final class HexUtils {
>>>          if (null == bytes) {
>>>              return null;
>>>          }
>>> +        final char[] hex = HexUtils.hex;
>>> +        final int length = bytes.length;
>>>  
>>> -        StringBuilder sb = new StringBuilder(bytes.length << 1);
>>> +        StringBuilder sb = new StringBuilder(length << 1);
>>>  
>>> -        for(int i = 0; i < bytes.length; ++i) {
>>> +        for(int i = 0; i < length; ++i) {
> 
> bytes.length requires "aload" and "arraylength" opcodes while using a
> local variable uses a single "aload" operation. Since I'm going to use
> "length" instead of bytes.length, I may as well use it to construct the
> StringBuilder object.
> 
> Compared to sb.append() this optimization is likely to be lost in the
> noise, but it is still a slight improvement.

-1.

This changes makes the code harder to read and no evidence has been
presented that it will make any noticeable improvement. The chances are
that the compiler will in-line this any way.

Mark


> 
>>>              sb.append(hex[(bytes[i] & 0xf0) >> 4])
>>>                  .append(hex[(bytes[i] & 0x0f)])
>>>                  ;
>>> @@ -94,8 +96,9 @@ public final class HexUtils {
>>>          }
>>>  
>>>          char[] inputChars = input.toCharArray();
>>> -        byte[] result = new byte[input.length() >> 1];
>>> -        for (int i = 0; i < result.length; i++) {
>>> +        final int length = input.length() >> 1;
>>> +        byte[] result = new byte[length];
>>> +        for (int i = 0; i < length; i++) {
> 
> Same here: fewer opcodes per loop.
> 
>>>              result[i] = (byte) ((getDec(inputChars[2*i]) << 4) + 
>>> getDec(inputChars[2*i + 1]));
>>>          }
>>>          return result;
> 
> -chris
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to