Как проверить, сколько байтов объектной ссылки используют в Java? - PullRequest
8 голосов
/ 02 апреля 2011

Я хотел бы проверить, сколько байтов используется ссылкой на объект в виртуальной машине Java, которую я использую.Ребята, вы знаете, как это проверить?

Спасибо!

Ответы [ 4 ]

11 голосов
/ 02 апреля 2011

Если рассматривать вопрос буквально, то в большинстве JVM все ссылки на 32-битные JVM занимают 4 байта, одна 64-битная JVM, ссылка занимает 8 байтов, если не используется -XX: + UseCompressedOops, в этом случае требуется 4 -bytes.

Я предполагаю, что вы спрашиваете, как определить, сколько места занимает Объект. Вы можете использовать Инструментарий (не простой вопрос), но это даст вам небольшую глубину. Java склонна разбивать многие объекты на что-то, что в C ++ может быть единой структурой, поэтому это не так полезно.

Однако, если у вас есть проблемы с памятью, я предлагаю вам профилировщик памяти. Это даст вам возможность использовать объекты в мелком и глубоком космосе и даст представление о всей системе. Это часто более полезно, поскольку вы можете начать с самых крупных потребителей и оптимизировать их, даже если вы разрабатываете Java в течение десяти лет +, вы будете только догадываться, где лучше всего оптимизировать, если у вас нет твердых данных.

Еще один способ получить размер объекта, если вы не хотите использовать профилировщик, - это выделить большой массив и посмотреть, сколько памяти используется. Вы должны делать это много раз, чтобы получить хорошее представление о среднем размере. является. Я бы установил молодое пространство очень высоко, чтобы ГК не запутали ваши результаты, например. -XX:NewSize=1g

2 голосов
/ 02 апреля 2011

Это может отличаться от JVM до JVM, но "Sizeof for Java" говорит

Вы можете вспомнить "Совет Java 130: Знаете ли вы свой размер данных?"в ней описан метод, основанный на создании большого числа идентичных экземпляров классов и тщательном измерении результирующего увеличения размера используемой кучи JVM.Когда это применимо, эта идея работает очень хорошо, и я фактически буду использовать ее для начальной загрузки альтернативного подхода в этой статье.

2 голосов
/ 02 апреля 2011

Если вам нужно быть достаточно точным, проверьте Инструментарий инструментов .

1 голос
/ 24 мая 2011

Этот - тот, который я использую. Люблю эти 16-байтовые ссылки! alphaworks.ibm.heapanalyzer

...