RFR: 8152733: Avoid creating Manifest when checking for Multi-Release attribute

Paul Sandoz paul.sandoz at oracle.com
Fri Mar 25 16:53:13 UTC 2016


> On 25 Mar 2016, at 17:37, Claes Redestad <claes.redestad at oracle.com> wrote:
> 
> Interesting, my only concern is we'd add more code/complexity, but it seems the shift will always be == len when not matching a character in src (the proof is left out as an exercise), so this can be simplified further to:
> 
> byte c = b[i + j];
> if (c >= ' ' && c <= 'z') {
>    if (c >= 'a') c -= 32; // Canonicalize
> 
>    if (c != src[j]) {
>        // no match
>        int goodShift = (j < len - 1) ? len : 1;
>        int badShift = lastOcc[c - 32];
>        i += Math.max(j + 1 - badShift, goodShift);
>        continue next;
>    }
> } else {
>    // no match, character not valid for name
>    i += len;
>    continue next;
> }
> 
> http://cr.openjdk.java.net/~redestad/8152733/webrev.03/
> 

Nice, that’s quite clear in it’s intent. As long as this meets the performance goals i am ok with this being slower than other variants, as i think the reduction in static footprint is a fare trade in this case.

Paul.

> (included Steve's suggestion)
> 
> Since this avoids reading from lastOcc for anything but the chars actually matching, this actually seems to improve things a bit locally, so I'm willing to accept the pile-on. I'll run some numbers in the lab...
> 
> /Claes




More information about the core-libs-dev mailing list