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 >>> >> >