Unboxed structs for Java

The cost of allocating and garbage-collecting heap objects is usually justified - but it is none-the-less often non-trivial. Furthermore, the concern about the cost (whether justified or not) causes programmers to write more convoluted code and design more complicated APIs. Some object-oriented languages (most notably C++ and C#) provide for struct types that may be stack-allocated and optimized in various ways. There has long been interest in such a mechanism for Java; here are some thoughts.

Examples

Co-ordinates, rectangles, and affine transforms in graphics programming.

Complex numbers.

Arbitrary-precision integer, as a pair of a 32-bit plus a pointer to a extenstions array. (The latter is non-null only when it is needed.)

Tagged immediate object types (as in unboxed fixnums), by using a pair of a int (or long) combined with a pointer.

A Swing Segment.

Document position and nodes (as in Swing or XML).

Iterators.

Design issues

A value type must be 'final'.

Mutable or immutable?

Equality and identity.

Boxing of structs.

Arrays of structs.

Backwards compatibility: Can we design the feature so it is "optional", in that older or more limited VMs can correctly execute bytecodes, that will be efficiently executed on supporting VMs?

Tags: