Какова цель сжатых указателей объектов? - PullRequest
6 голосов
/ 02 августа 2011

После моего вопроса о том, может ли CLR использовать сжатые указатели , ответ был, что это довольно бессмысленно. Тем не менее, некоторые JVM реализуют его, так каковы конкретные преимущества этой оптимизации, поскольку получение 4 байтов, кажется, не стоит?

Ответы [ 3 ]

7 голосов
/ 02 августа 2011

В сжатых ссылках есть огромное значение. Во-первых, в x86 64-битные режимы разблокируют 8 новых регистров, что является огромным выигрышем в производительности. Во-вторых, использование 4-байтовых вместо 8-байтовых заголовков / указателей объектов значительно повышает эффективность кэширования. Мы видим реальные преимущества в IBM Java на уровне ~ 5-10% по сравнению с «полной» 64-битной JVM (ваш пробег будет варьироваться). Это делает переход к «маленьким 64-битным» кучам простым и безболезненным, преодолев ограничение в ~ 2 ГБ памяти в 32-битных JVM. (реальное 32-битное ограничение может быть от 1700 МБ до ~ 3,7 ГБ в зависимости от ОС).

2 голосов
/ 02 августа 2011

Вы можете получить 4 байта от каждой ссылки на объект.Если объект имеет больше ссылок, это часто встречается в Java-объекте, вы можете сэкономить больше памяти.Малый размер объекта может привести к двум результатам, во-первых, время паузы ГХ уменьшается.Во-вторых, увеличен коэффициент попадания в кэш.Таким образом, Java-приложение может получить улучшение производительности.Для теста производительности включите CompressedOops, чтобы повысить производительность на 5% ~ 10%.

1 голос
/ 02 августа 2011

Если ваша главная цель - полностью отказаться от сборок мусора или, по крайней мере, выполнять GC реже, это того стоит, так как это может привести к значительному сокращению объема памяти.

...