Java Collection 해시 도입 - 메모리 낭비
이전 시간에 해시 도입 전 성능 개선으로 다음 코드를 작성하였다.
Main.class
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Integer[] input = new Integer[12];
input[1] = 1;
input[3] = 3;
input[5] = 5;
input[7] = 7;
input[9] = 9;
input[11] = 11;
System.out.println("Array: " + Arrays.toString(input));
int whereNumber = 11;
System.out.println("find Number: " + input[whereNumber]);
}
}
Array: [null, 1, null, 3, null, 5, null, 7, null, 9, null, 11]
find Number: 11
for문을 쓰지 않고 검색 기능 성능을 O(1) 수준으로 끌어올렸으나 사용하지 않는 공간이 많으며 메모리를 낭비시키고 있다.
int 숫자의 모든 범위를 입력하면 배열의 크기 한계에 대해 알아봐야 한다.
- 0~11 숫자의 메모리 범위
- 사이즈는 12개가 필요하므로 4byte * 12 = 48byte 필요
- int 범위 입력
- int 범위: -2,147,483,648 - 2,147,483,647
- 약 +- 포함하여 42억 사이즈의 배열이 필요하다.
- 4byte * 42억은 약 16~18기가바이트 필요하므로 그 안에 불필요한 공간을 낭비하면 메모리 공간을 낭비된다.
하나의 int형만으로 메모리를 소모시키는 결과를 초래할 수 있다. 데이터 중간중간 빈 공간으로 데이터 값을 인덱스로 활용한다는 것은 사용하기 어렵다.