Java에서는 int
으로 필드가 충분하고 어떤 이유로 long
을 사용하면 메모리가 더 필요합니까? 유형에 따라 차이가 있습니까?Java에서 'int'보다 'long'을 선언하는 경우
답변
Java에서 64 비트이고 int는 32 비트이므로 longs는 더 많은 메모리 (4 바이트 대신 8 바이트)를 사용합니다.
예를 들어, long은 8 바이트이고 정수는 4 바이트입니다. This Java tutorial goes over the primitive data types. 할당 수에 특정 금액을 곱하면 (예 : 이러한 변수를 500 만 개 할당하면) 그 차이는 무시할 수 없을 정도로 커집니다. 그러나 평균 사용량만큼 중요하지 않습니다. 모국어에
, 성능 고려 사항이있다. (이미 자바, 어쨌든 여기 저기 모든 메모리의 종류를 사용하는)
; 32 비트 값은 64 비트 값이 아닌 32 비트 구조의 단일 레지스터에 유지 될 수 있습니다. 64 비트 아키텍처에서는 분명히 가능합니다. 어떤 종류의 최적화 자바가 원래의 정수에서하는지 모르겠지만, 런타임에서도 마찬가지 일 수 있습니다. 걱정할 정렬 문제가 있습니다. 단락과 바이트를 사용하면 더 많은 것을 볼 수 있습니다.
최상의 방법은 필요한 유형을 사용하는 것입니다. 값이 2^31 이상이되지 않으면 long을 사용하지 마십시오.
나는 속도가 Java에 똑같이 적용된다는 확신을 모국어로한다. – rmeador
나는 또한이다. 확실하지 않습니다. –
위의 질문에서 Java의 범위에서이 질문을한다고 가정하면 int 데이터 유형은 4 바이트이고 long 데이터 유형은 8 바이트입니다.
그러나 크기 차이가 실제로 메모리 사용량의 차이를 의미하는지 여부는 상황에 따라 다릅니다.
로컬 변수 인 경우 스택에 할당됩니다. 스택이 이미 할당되었으므로 더 많은 스택 공간을 사용하면 더 많은 메모리가 사용되지 않습니다. 물론 스택을 다 소모하지 않는다면 제공됩니다.
클래스의 멤버 인 경우 멤버 정렬 방법에 따라 다릅니다. 때로는 멤버가 메모리에 빽빽하게 쌓이지 않지만 일부 멤버는 짝수 주소에서 시작하도록 패딩이 사용됩니다. 예를 들어, 클래스에 바이트와 int가있는 경우, 그 사이에 3 바이트의 패딩이있을 수 있으므로 int가 4로 나눌 수있는 다음 주소에서 시작합니다.
ifwdev가 올바르게 추측됩니다. Java는 int
을 32 비트 부호있는 정수로 정의하고 long
을 64 비트 부호있는 정수로 정의합니다. 변수를 long
으로 선언하면 예 : int
으로 선언 된 동일한 변수의 메모리가 두 배가됩니다. 일반적으로 과 같은 작은 유형에 포함될 수있는 값의 경우에도 int
은 일반적으로 "기본"숫자 유형입니다. 2^31-1
보다 큰 값을 요구하는 특별한 이유가있는 경우가 아니면 int
을 사용하십시오.
데이터가 특정 데이터 형식 (C로 표현하면 short int
)에 적합하다는 것을 알고 있다면 더 큰 데이터를 사용하는 유일한 이유는 성능입니다. 그리고 그것이 목표라면 성능 향상이 얼마나 중요한지에 관계없이 일반적으로 아키텍처의 크기와 일치하는 크기를 사용하려고합니다 (일반적인 32 비트 대상 시스템의 경우 32 비트 시스템을 사용하는 것이 좋습니다. 비트 유형).
하나 이상의 시스템을 대상으로하는 경우 가장 자주 사용되는 것과 일치하는 데이터 형식을 사용할 수 있습니다.
... 저에게 더 많은 메모리가 필요합니까?
당신은 더 많은 메모리를 사용하거나하지 않는 경우에 대해 걱정하기 전에 메모리
으로 두 번 사용됩니다, 당신은 프로필한다.
사용하여 램의 1메가바이트 여분을 사용하여 긴보다는 당신이 선언해야합니다 int로 : 262,144 긴 변수 (또는 프로그램에 간접적으로 사용).
그래서 int를 사용해야하는 경우 몇 가지 이유로 하나 또는 두 개의 변수를 선언하면 4 또는 8 바이트 더 많은 메모리가 사용됩니다. int 데이터 유형 : 걱정 너무 많이하지 (내 말은, 앱에있을 수 있습니다 최악의 메모리 문제) 여기 Java Tutorial에서 촬영
은 INT의 정의와 긴
INT입니다 32 비트 부호있는 2의 보수 정수입니다. 최소값은 -2,147,483,648이고 최대 값은 2,147,483,647입니다 (포함). 정수 값의 경우, 다른 데이터를 선택하는 이유 (위와 같음)가 없으면이 데이터 유형이 일반적으로 기본 선택입니다. 이 데이터 유형은 프로그램에서 사용할 숫자에 대해 충분히 큰 데이터 유형이지만, 더 넓은 범위의 값이 필요한 경우에는 대신 long을 사용하십시오. 긴
: 긴 데이터 유형이 64 비트 2의 보수 부호있는 정수입니다. 최소값은 -9,223,372,036854775808이며 최대 값은 9,223,372,036854775807입니다 (포함). int가 제공하는 것보다 더 넓은 범위의 값이 필요할 때이 데이터 유형을 사용하십시오.
하지만 기억 : 도널드 크 누스에 따라 "Premature optimization is the root of all evil"을 (나/붙여 넣기하지만 모든 악의 뿌리입니다 복사에 따라) 어떤 언어에서 어떤 플랫폼에서
- 1. java에서 클러스터를 선언하는 방법은 무엇입니까?
- 2. ENUM이 INT보다 나은 이유
- 3. Java에서 배열 요소를 volatile로 선언하는 방법은 무엇입니까?
- 4. Java에서 전역 정적 클래스를 선언하는 방법?
- 5. Java에서 인스턴스의 제네릭 형식을 동적으로 선언하는 방법
- 6. PHP의 데이터 형이 int보다 큰가요?
- 7. 인수가없는 경우 Perl의 Getopt :: Long을 어떻게 얻을 수 있습니까?
- 8. Java에서 freopen을 사용하는 경우
- 9. 문자열에서 NSNumber에 long long을 저장하려고합니다.
- 10. long을 사용하여 JNI에서 Java로 포인터를 전달합니다.
- 11. Java에서 for 루프 안에 배열을 선언하는 것이 얼마나 좋지 않습니까?
- 12. Java에서 메서드 매개 변수를 final로 선언하는 성능상의 이유가 있습니까?
- 13. Java에서 상수 계층 구조 데이터 구조를 선언하는 방법은 무엇입니까?
- 14. Java에서 BufferedInput/OutputStreams를 사용하는 경우?
- 15. PHP의 확장 함수에서 unsigned long long을 반환합니다.
- 16. 멤버 함수 인 경우 문자열 배열의 크기를 선언하는 방법
- 17. SQL Server에서 인덱스를 고유 한 것으로 선언하는 경우
- 18. 정적 NSString을 선언하는 방법?
- 19. long을 int로 변환 할 수 있습니까?
- 20. 두 개의 long을 Java의 다른 프리미티브로 인코딩하십시오.
- 21. .NET long을 부호없는 8 바이트 정수로 변환
- 22. 부호없는 long long을 사용하는 부호 확장
- 23. % d를 사용하여 unsigned long long을 인쇄하십시오.
- 24. 특정 PID가있는 경우 Java에서 프로세스를 종료하는 방법
- 25. Java에서 예외가 발생할 경우 최종 변수에 할당
- 26. Java에서 C# 디코딩의 base64를 인코딩하는 경우
- 27. JFrame 외부의 경우 툴팁이 Java에서 깜박입니다.
- 28. Objective C에서 Java에서 intern()을 사용하는 경우
- 29. int보다 더 많은 객체가있을 수 있다면 identity-hashcode는 어떻게 될까요?
- 30. PostgreSQL에서 변수를 선언하는 방법
? 이것은 상당히 모호하며 컴파일러와 플랫폼에 따라 정답이 될 것입니다 (내가 생각하는 것에 대해 질문하는 경우). –
죄송합니다. 언어를 추가하는 걸 잊었습니다. 자바. – DragonBorn
정말 모호한 질문입니다. 플랫폼과 언어를 모르면 대답하기가 어렵습니다. 대부분의 경우 메모리의 작은 차이는 더 빠른 CPU 작업으로 상쇄됩니다. –