Один из основных моментов, которые не учитывают алгоритмы кэширования, заключается в том, что размер объекта на самом деле не имеет значения (потому что вы все равно не знаете размер подкачки памяти следующего уровня), поэтому невозможность точно узнать размер не важно. В какой-то момент размер более 1 объекта «вписывается» в следующий размер блока памяти. (Примечание: незнание размера объекта является серьезной проблемой для реализаций с поддержкой кэша).
Кроме того, большинство распределителей памяти ВМ будет выделяться в конце пространства генерации, поэтому, если вы распределите все свои объекты одновременно, вы можете начать все в порядке. К сожалению, некоторые алгоритмы, не обращающие внимания на кэш, предполагают, что вы можете изменить структуру памяти, что обычно невозможно с виртуальной машиной.
Другая большая проблема заключается в том, что большинство реализаций на основе виртуальных машин используют ссылки на объекты. Таким образом, объект с тремя строками в действительности представляет собой 4 объекта (сам объект и 3 строковых объекта). Если эти четыре объекта не расположены рядом друг с другом, анализ алгоритма не работает.
Добавьте к сжатию сборщиков мусора и другие «оптимизации», которые могут выполнять виртуальные машины, и у вас будет значительный разрыв между необходимым вам контролем и текущим состоянием исследований этих алгоритмов.