Right now a string consists of 2 structs: One with a GC header, and one which holds a pointer to the actual string. Both are heap allocated, and the former holds a pointer to the latter. It seems wasteful to have both since an object can have arbitrary size anyway.