2015-03-30 3 views
6

Почему я не вижу их довольно часто. Я вижу их в основном для сетей, где размер действительно имеет значение. Но, например, у меня есть переменная, которая использует только числа из диапазона 1-10, не следует ли использовать байт? Я использую для кодирования C/C++, используя как можно меньше памяти, почему это не так в java?Использование байтов, коротких и других примитивных типов

+0

Laziness возможно –

+0

Я не уверен на 100% об этом, поэтому опубликую его как комментарий. Я не удивлюсь, если это связано с тем, что Java нуждается в управлении средой исполнения Java, поэтому в таком случае нужно сохранить 16 байт, когда она должна быть уложена сверху в среду, которая в 1000 раз больше ее размера. C++ не нуждается в этом, поэтому сохранение этих байтов может фактически сделать разницу в производительности. – Loocid

+0

Возможный дубликат http://stackoverflow.com/questions/402247/anyone-using-short-and-byte-primitive-types-in-real-apps – Raedwald

ответ

10

Фактически в большинстве процессоров, поддерживающих Java, 32-разрядные целые числа - - самый быстрый. Например, на процессорах Intel 32-разрядные целочисленные регистры имеют кратчайшие коды операций, а 16-разрядные целые числа обрабатываются немного медленнее. Кроме того, большую часть времени, используя byte s или short, вы не сэкономите место для вас.

Это никак не связано с OOPness; даже в C, который действительно не имеет каких-либо концепций ООП, очень часто используется int почти для каждого номера, потому что его размер часто выбирается так, чтобы он был fastest width for the given architecture.

4

Если это не такой низкий уровень, как бит-маскирование или интенсивность памяти, где каждый байт каждого объекта занят вопросами, я бы, вероятно, использовал int, даже если это может сделать byte.

Не забывайте, что объекты Java часто дополняются, что облегчает доступ к JVM. поэтому в зависимости от других полей вашего класса использование байта может по-прежнему занимать ту же память, что и int! См. javamex's explantation of Java's memory usage

Если я знаю, что существует только 10 возможных значений, из соображений ОО, я бы не стал использовать byte для его хранения. Почему значения будут составлять от 1 до 10? Значит ли каждое значение что-то особенное? Если это так, я бы, вероятно, использовал enum и дал каждому из этих 10 значений намеренное раскрывающее имя.

+0

Кто бы ни выбрал downvote, объясните, почему? – dkatzel

Смежные вопросы