Hi Steven;

I haven't forgotten and it's still in my queue for Java 8. I haven't had time 
to respond to Martin Buchholz's feedback.

http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-February/014528.html

I suspect he is right about computing digits vs the table being a better choice 
but I would want to test that first with a proper microbenchmark (and then fix 
a bunch of other places that use the same table).

If you have time to follow up on any of this things will go quicker. :-)

Mike

On Mar 20 2013, at 15:39 , Steven Schlansker wrote:

> 
> On Feb 13, 2013, at 2:45 PM, Mike Duigou <mike.dui...@oracle.com> wrote:
> 
>> I have updated the patch with some of Ulf's feedback and corrected one 
>> cut-and-paste error that I made.
>> 
>> The updated webrev is at:
>> 
>> http://cr.openjdk.java.net/~mduigou/JDK-8006627/2/webrev/
>> 
> 
> One last ping to make sure this doesn't slip through the cracks, as I haven't 
> seen the commit go through the public JDK8 repo…  or maybe I missed it.
> 
> Thanks again for looking at this :-)
> 
>> Mike
>> 
>> On Feb 12 2013, at 18:25 , Ulf Zibis wrote:
>> 
>>> Am 13.02.2013 02:34, schrieb Mike Duigou:
>>>> Thank you for the comments Ulf.
>>>> 
>>>> On Feb 12 2013, at 17:24 , Ulf Zibis wrote:
>>>> 
>>>>> Am 13.02.2013 00:30, schrieb Mike Duigou:
>>>>>> Hi Steven;
>>>>>> 
>>>>>> I have updated the patch for Java 8. There's somewhat less code sharing 
>>>>>> and a bit of refactoring than your last version but the performance 
>>>>>> should be about the same or a little better.
>>>>>> 
>>>>>> http://cr.openjdk.java.net/~mduigou/JDK-8007398/0/webrev/
>>>>> Couldn't you use String(buf, true) for all to(Unsigned)String(...) 
>>>>> methods ?
>>>> Possibly. I didn't go looking too far with looking for additional 
>>>> improvements.
>>>> 
>>>>> Instead of calculating the mask each time, you could use:
>>>>> 309     private static String toUnsignedString(int i, int shift, int 
>>>>> mask) {
>>>> I think that would actually be inefficient. I haven't looked at the JITed 
>>>> code but the mask calculation is pretty cheap relative to parameter 
>>>> passing.
>>> 
>>> I believe, JIT will inline the code, so there would be no parameter passing.
>>> 
>>> Additionally the calculation of char count could be faster, if you would 
>>> have short cuts like:
>>> numberOfLeading2Zeros(i)
>>> numberOfLeading4Zeros(i)
>>> numberOfLeading8Zeros(i)
>>> ...
>>> So the optimum would be with separate toString methods:
>>> String toBase2String(int i);
>>> String toBase4String(int i);
>>> String toBase8String(int i);
>>> ...
>>> 
>>> In any case I would save 2 lines:
>>> 
>>> 311         int mag = Integer.SIZE - Long.numberOfLeadingZeros(i);
>>> 312         int charCount = Math.max(((mag + (shift - 1)) / shift), 1);
>>> 313         char[] buf = new char[charCount];
>>> 316         int mask = (1 << shift) - 1;
>>> 
>>> -Ulf
>>> 
>> 
> 

Reply via email to