В Java, если int
достаточно для поля, и если по какой-то причине я использую long
, это бы стоило мне больше памяти? Это зависит от типа?Объявление 'long' over 'int' в Java
ответ
int
32 бит и long
- 64 бит. long
занимает вдвое больше памяти (что довольно мало для большинства приложений).
long в Java - 64 бит, а int 32bit, поэтому, очевидно, longs использует больше памяти (8 байтов вместо 4 байтов).
В Java да, длинный 8 байтов, а целое число - 4 байта. This Java tutorial goes over the primitive data types. Если вы умножаете количество распределений на определенную сумму (например, если вы выделяете пять миллионов этих переменных), разница становится более чем незначительной. Однако для среднего использования это не имеет значения.
(Вы уже используете Java, добрая память о повсюду в любом случае.)
В родных языках, есть соображение производительности; 32-битное значение может храниться в одном регистре в 32-битной архитектуре, но не в 64-битном значении; на 64-битных архитектурах, очевидно, это возможно. Я не уверен, что оптимизация Java делает на свои собственные целые числа, но это может быть правдой и во время ее выполнения. Есть проблемы с выравниванием, о которых нужно беспокоиться, но вы видите это больше с использованием шорт и байтов.
Лучшей практикой будет использование необходимого вам типа. Если значение никогда не будет превышать 2^31, не используйте длинный.
Я уверен, что скорость в равной степени применима к java, как к родным языкам. – rmeador
Я тоже. Просто не уверен. –
Предполагая, что из ваших предыдущих вопросов, которые вы хотите задать это в области Java, тип данных int имеет четыре байта, а длинный тип данных - восемь байтов.
Однако, действительно ли разница в размере означает, что разница в использовании памяти зависит от ситуации.
Если это локальная переменная, она выделяется в стеке. Поскольку стек уже выделен, использование большего пространства стека не будет использовать больше памяти, если, конечно, вы не исчерпаете стек.
Если это член класса, это будет зависеть от того, как элементы выравниваются. Иногда члены не складываются компактно в памяти, но заполнение используется так, что некоторые члены начинают с четного адреса. Если вы, например, имеете байт и int в классе, то между ними должно быть три байта заполнения, так что int начинается с следующего адреса, делящегося на четыре.
ifwdev правильно угадал. Java определяет int
как 32-разрядное целое число со знаком и long
как 64-разрядное целое число со знаком. Если вы объявите переменную как long
, тогда да, она займет вдвое больше памяти, чем та же переменная, объявленная как int
. В общем случае int
обычно является числовым типом по умолчанию, даже для значений, которые могут содержаться в меньших типах, таких как short
. Если у вас нет особых причин для запроса значений, превышающих 2^31-1
, используйте int
.
Если вы знаете, что ваши данные будут соответствовать определенному типу данных (скажем, short int
в C), единственная причина для использования большего - это правильная производительность? И если это ваша цель, независимо от того, насколько предельно выгодна ваша производительность, как общее правило, вы хотите использовать размер, соответствующий размер вашей архитектуры (поэтому для нормальной 32-битной целевой системы вы должны использовать 32- бит).
Если вы нацеливаете более одной системы, вы можете использовать тип данных, который соответствует наиболее часто используемому.
... будет ли это стоить мне больше памяти?
Вы будете использовать в два раза памяти
Перед беспокоиться о том, если вы используете больше памяти или нет, вы должны профиль.
Чтобы использовать 1 мегабайт EXTRA барана, используя длинный, чем Int вы должны объявить: длинные переменные (или использовать их косвенно в вашей программе).
Так что если по какой-то причине вы объявляете одну или две длинные переменные, когда должны использоваться int, вы будете использовать 4 или 8 байт больше памяти. Не слишком много, чтобы беспокоиться о (я имею в виду, что может быть хуже проблема памяти в вашем приложении)
Взятая из Java Tutorial здесь это определение междунара и долго
INT: Тип INT данные представляет собой 32-разрядное целое число дополнений, подписанное двумя. Он имеет минимальное значение -2 147 483 648 и максимальное значение 2 147 483 647 (включительно). Для интегральных значений этот тип данных обычно является выбором по умолчанию, если нет причины (например, выше) выбрать что-то еще. Этот тип данных, скорее всего, будет достаточно большим для чисел, которые ваша программа будет использовать, но если вам нужен более широкий диапазон значений, используйте long вместо этого.
долго: Тип длиной данных является 64-разрядным знаковым двоичным дополнением целым. Он имеет минимальное значение -9,223,372,036,854,775,808 и максимальное значение 9,223,372,036,854,775,807 (включительно). Используйте этот тип данных, если вам нужен диапазон значений, отличный от значений, предоставляемых int.
Но помните: "Premature optimization is the root of all evil" в соответствии с Дональдом Кнутом (по мне Copy/Paste является корнем всех зол, хотя)
- 1. Преобразование long int * в long long int *
- 2. Объявление конструктора (int, String, long) не определено
- 3. Java arithmetic int vs. long
- 4. Java Thread.sleep long или int?
- 5. Java - О float, long, int
- 6. unsigned long long int
- 7. Как преобразовать long в int в Java?
- 8. Преобразование long в int в Java
- 9. Java: Long result = -1: невозможно преобразовать из int в long
- 10. назначая INT литерала Long в Java
- 11. C++: long long int vs. long int vs. int64_t
- 12. предыдущее неявное объявление: (casting int to unsigned long)
- 13. Arduino long long int doc
- 14. Unsigned long long int to long double
- 15. читабельность long int v. Long
- 16. «long int», «long long» Типы данных
- 17. Метод Encrypt (long, long, long, long, int) в типе принца не применим для аргументов (String, long, long, long, int)
- 18. преобразование из int в long long
- 19. Как преобразование long long в int работает?
- 20. v [long long int] в C++
- 21. В чем разница между «длинными» и «длинными int» и «long long» против «long long int»
- 22. long mod opertaion возвращает int Java
- 23. Лучшее объявление int
- 24. Сокращенное название типа long long vs long long int, стандартно?
- 25. Как сканировать long long long int в C
- 26. Кастинг без знака long long int to signed long long int Возможно ли это?
- 27. C: ошибочный вывод для "(long long int) = (long long int) * (double)"?
- 28. Как вы печатаете unsigned long long int (спецификатор формата для unsigned long long int)?
- 29. Недопустимые типы long int [long int] 'для индекса массива
- 30. «long long = int + int» сначала вычислить, затем преобразовать тип?
На каком языке и на какой платформе? Это довольно расплывчато, и ответы будут компилятором и зависят от платформы (если вы спрашиваете, о чем я думаю, что вы). –
Извините, что забыл добавить этот язык. Ява. – DragonBorn
Это действительно неопределенный вопрос. Не зная, на какой платформе и языке трудно ответить. Большую часть времени небольшая разница в памяти компенсируется более быстрыми операциями ЦП. –