Value array element size represented as log2

Ioi Lam ioi.lam at
Tue Oct 2 06:01:41 UTC 2018

(Not sure if this has been discussed before. I did a quick JBS search of 
"valueArrayKlass" but couldn't find anything).

For example, if my VT has 5 integers (20 bytes) it will take up 32 bytes 
inside the array. This seems kind of wasteful, especially when you have 
larger VT types.


jint ValueArrayKlass::array_layout_helper(ValueKlass* vk) {
   BasicType etype = T_VALUETYPE;
   int atag  = _lh_array_tag_vt_value;
   int esize = upper_log2(vk->raw_value_byte_size());


   // For arrays, layout helper is a negative number, containing four
   // distinct bytes, as follows:
   //    MSB:[tag, hsz, ebt, log2(esz)]:LSB
   // where:
   //    tag is 0x80 if the elements are oops, 0xC0 if non-oops
   //    hsz is array header size in bytes (i.e., offset of first element)
   //    ebt is the BasicType of the elements
   //    esz is the element size in bytes

More information about the valhalla-dev mailing list