2014-01-07 4 views
2

Q1: Если на моем компьютере имеется 32-разрядный процессор, как можно использовать и обрабатывать long тип, который является 64-разрядным? С другой стороны, если я использую только int типов в своем 64-битном процессоре, не растрачу ли я 32-битную память?Как длинные целые числа обрабатываются на 64-битных компьютерах? Как определить размер объекта?

Q2: Для примитивов, мы говорим byte является 8-битным, int является 32-бит. Как мы говорим то же самое для объектов? Есть ли способ получить размер объектов в Java. или каков максимальный размер объекта?

+1

Просьба уточнить ваши вопросы; ** 1 ** Это виртуальная машина. ** 2 ** Да. Сериализуйте его в 'ByteArrayOutputStream' и получите длину массива, когда закончите ... но почему? –

+0

Возможный дубликат [Рассчитать размер объекта в Java] (http://stackoverflow.com/questions/9368764/calculate-size-of-object-in-java) – erickson

+0

http://stackoverflow.com/questions/52353/ in-java-what-the-best-way-to-define-the-the-the-object – erickson

ответ

4

Для второго вопроса, пожалуйста, см. this.

Для первого вопроса 32-разрядные процессоры не могут напрямую имеют дело с 64-разрядными целыми числами, поскольку 64-разрядные операнды не могут быть сохранены в 32-разрядных регистрах «в целом». Компиляторы решают эту проблему, преобразовывая 64-битные операции в ряд операций над 32-битными операндами, которые представляют половинки 64-разрядных операндов. См. this answer для подробного объяснения.

В Java, long гарантированно будет точно в 64 бит, int гарантированно будет точно 32 бит. Использование 64-битных целых чисел на 32-битной машине, вероятно, влияет на производительность, но, учитывая природу Java, я не думаю, что это было бы заметно заметно (возможно, в числох хрустящих приложений).

2

Java имеет фиксированный размер, намеренно. Где в C int может отличаться по размеру, с java int всегда подписан 32 бита. Поэтому остальные вопросы касаются реализации.

И это может отличаться. Но, глядя на инструкции кода байта JVM, некоторые решения принимаются. Локальная переменная типа byte может храниться в int (32 бита). И так далее. Кроме того, Oracle 64 бит java имеет возможность использовать не 64 бита для ссылок на объекты, а 32 бита, которые очень сильно сохраняются в памяти.

+0

вы можете объяснить, сколько времени хранится 64-разрядный бит в 32-разрядном процессоре – eagertoLearn

+0

Как два 32-битных слова, и если процессор не имеет 64-х добавочных, два 32 бит. Байт-код Java в первую очередь интерпретируется и с компилятором «точно в срок», переведенным на машинный код. Как практически любой полноценный язык программирования, он может делать все. Есть JVM для 16-разрядных процессоров (возможно, не более). –