Можем ли мы реализовать список стилей C++ в Java?
В Java arrayList "хранит" ссылки на объекты, а не на фактические данные объекта.
Мне было интересно, можем ли мы реализовать arrayList в Java, который может содержать данные объекта непосредственно вместо ссылок. Можно ли использовать Java Unsafe Class для этой реализации? Если да, какова будет производительность этого списка по сравнению с существующим Java arrayList?
1 ответ
Вкратце нет.
Java работает только со ссылками на объекты. То, что вы описываете, основано на низкоуровневом контроле за распределением / использованием памяти, позволяющим вам выделить блок памяти для 'n' записей. Java просто так не работает - вы никогда не управляете памятью, а JVM может перемещать объекты в памяти. Вы имеете дело только со ссылками.
Также обратите внимание, что объекты, содержащие ссылки, будут ссылаться на другие отдельные блоки памяти, и поэтому концепция объекта, содержащегося в одном смежном блоке памяти, здесь на самом деле не существует.
Если вы действительно хотите, чтобы байтовый массив поддерживался памятью, DirectByteBuffer может быть полезен. Это java.nio
класс построен с использованием sun.misc.Unsafe
учебный класс. Возможно, вы могли бы сериализовать / десериализовать объекты к нему (тщательно рассчитав размер для правильного определения индексации). Но я подозреваю, что стоимость сериализации затопит любую другую экономию.