Всем известно, что Java не поддерживает структуры и поддерживать не будет. Чтобы не было недоразумений, что я понимаю под структурами: по сути, это легковесный класс, у которого есть только поля, которые лежат в определённом порядке и структура имеет размер, равный сумме размеров полей. То есть, например такая структура:
struct MyStruct {
int field1;
int field2;
long field3;
byte field4;
}
В памяти занимает 17 байт, не больше, не меньше + ссылка на неё. В Java классы занимают больше, это известно.
В общем, суть в том, что мне очень нужно хранить данные порциями по 11 байт. При этом хранить их в хэшмапе. То есть варианта в Java получается два — хранить в хэшмапе массив из 11 байт или объект с нужными полями. Массив удобнее.
Но мне пришла в голову мысль выделять 11 байт памяти через sun.misc.Unsafe и хранить в хэшмапе ссылку на область памяти. Используя библиотеку trove ссылка «весит» всего 8 байт, т.к. trove хранит примитивные типы. Объект бы «весил» ещё 16 байт на заголовок + был бы выровнен.
По всем замерам у меня получается, что хэшмапа из миллиона элементов при использовании такой странной схемы заполняется в 2 раза быстрее чем 11-байтовыми массивами, чтение и запись происходит так же быстрее, но не на много. Очевидно, тесты я делать не умею и чего-то не знаю, потому что наверное так работать не должно…
В общем, что я упускаю? Ведь явно этот способ должен быть хуже, всех тонкостей я не знаю, расскажите, пожалуйста.
Да, я знаю, что так делать нельзя, на Яве пишут не так и всё такое. Писать на java я как раз-таки умею, но иногда нужно выйти за пределы нормального использования…