Optimization of java.io.DataInputStream
roger riggs
roger.riggs at oracle.com
Tue Nov 12 14:57:33 UTC 2013
Hi,
At the source level the style makes it clear where the data is to be
aligned.
There many other places that use that style "<< 0" to indicate alignment
of the data
when assembling a whole from parts.
It is assumed the compiler/runtime will omit unnecessary operations; the
compiler does not.
$.02, Roger
On 11/12/2013 9:45 AM, Vitaly Davidovich wrote:
> Interesting - was this file codegen'd or something? Why are these nop
> shifts there?
>
> Anyway, I'd expect JIT does the right thing here and doesn't actually issue
> this instruction. Are you optimizing for interpreter or meta data size
> then?
>
> Sent from my phone
> On Nov 12, 2013 3:45 AM, "Alex Yursha" <alexyursha at gmail.com> wrote:
>
>> The following methods in java.io.DataInputStream perform right shift to
>> zero positions in their implementations:
>> - short readShort()
>> - int readUnsignedShort()
>> - char readChar()
>> - int readInt()
>> - long readLong()
>> - String readUTF(DataInput in)
>>
>> For example:
>>
>> public final short readShort() throws IOException {
>> int ch1 = in.read();
>> int ch2 = in.read();
>> if ((ch1 | ch2) < 0)
>> throw new EOFException();
>> return (short)((ch1 << 8) + *(ch2 << 0)*);
>> }
>>
>> It can be optimizied as follows:
>>
>> public final short readShort() throws IOException {
>> int ch1 = in.read();
>> int ch2 = in.read();
>> if ((ch1 | ch2) < 0)
>> throw new EOFException();
>> return (short)((ch1 << 8) + *ch2*);
>> }
>>
>>
>> This optimization saves 2 bytecode instructions in the class file code
>> arrays of each method mentioned above.
>>
More information about the core-libs-dev
mailing list