Smaller byte code for small constants

Paul Govereau paul.govereau at oracle.com
Fri Sep 12 18:39:46 UTC 2014


Currently, for long, float and double, javac will emit an ldc 
instruction for small constants (aside from 0, 1, 2). For instance, this 
statement:

   long x = 3;

produces the code:

   ldc2_w #index
   lstore_n

However, we could save ourselves a constant pool slot with:

   bipush 3
   i2l
   istore_n

The same trick can be used for float and double constants that happen to 
be round integers (modulo the semantics of i2f?).

Are there bad consequences for the interpreter or runtime compiler if we 
made this change in javac?

Thanks,
Paul


More information about the compiler-dev mailing list