Optimization of java.io.DataInputStream

Vitaly Davidovich vitalyd at gmail.com
Tue Nov 12 15:00:10 UTC 2013


Roger,

I think a simple comment is better than leaving head scratching code
behind, especially since it'll impact interpreter and byte code size.

Sent from my phone
On Nov 12, 2013 9:58 AM, "roger riggs" <roger.riggs at oracle.com> wrote:

> 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