these mappings work fine:
private List<Integer> myBuiltinList <==> my_builtin_list list<int>
private List<MyUDT> myUDTList <==> my_udt_list list<frozen<my_udt>>
private int myBuiltinArray <==> my_builtin_array list<int>
private MyUDT myUDTArray <==> my_udt_array list<frozen<my_udt>>
but they should.
The memory footprint and gc difference is particularly noticable with int/long/float/double primitives, but for ease of use a solution that also handles object types, including UDTs, is preferable.
We plan to provide common extra codecs in a dedicated module in a future version. It might be a good idea to provide at least a base class for array types, so I'm leaving this ticket open.