К сожалению, в Java нет никакого способа гарантировать, что объекты создаются / остаются в смежных областях памяти.
Однако, объекты, созданные в последовательности, скорее всего, окажутся смежными друг с другом (конечно, это зависит отфактическая реализация ВМ).Я почти уверен, что создатели виртуальной машины знают, что локальность крайне желательна, и не стараются изо всех сил разбрасывать объекты вокруг.
Сборщик мусора в какой-то момент, вероятно, переместит объекты- если ваши объекты недолговечны, это не должно быть проблемой.Для долгоживущих объектов это зависит от того, как GC реализует перемещение оставшихся в живых объектов.Опять же, я думаю, что разумно, что ребята, пишущие GC, потратили некоторое время на размышления по этому вопросу и будут выполнять копии таким образом, чтобы не портить местность более чем неизбежно.
Очевидно, нет никаких гарантий для любого из вышеперечисленныхпредположения, но так как мы ничего не можем с этим поделать, перестаньте беспокоиться:)
Единственное, что вы можете сделать на уровне исходного кода Java, это иногда избегать компоновки объектов - вместо этого вы можете "встроить"состояние, которое вы обычно помещаете в составной объект:
class MyThing {
int myVar;
// ... more members
// composite object
Rectangle bounds;
}
вместо:
class MyThing {
int myVar;
// ... more members
// "inlined" rectangle
int x, y, width, height;
}
Конечно, это делает код менее читаемым и потенциально дублирует большой объем кода.
Упорядочивание членов класса по шаблону доступа кажется незначительным (я заметил небольшое изменение в тестируемом фрагменте кода после того, как я переупорядочил некоторые объявления), но я никогда не удосужился проверить,правда.Но было бы разумно, если бы виртуальная машина не переупорядочивала элементы.
По той же теме было бы также неплохо (с точки зрения производительности) переосмыслить существующий массив примитивов как другой тип (например, приведениеint [], чтобы плавать []).И пока вы занимаетесь этим, почему бы не пожелать и членам профсоюза?Я уверен, что да.Но в обмен на эти возможности нам пришлось бы отказаться от значительной части независимости от платформы и архитектуры.