Youn's IT Memo
Java 실험 | Comparator & Auto Boxing 본문

Summary
최근 문제를 풀면서 Sort에 대한 이슈(?) 에 대해 궁금증이 생겨 테스트를 해보았다.
본인은 Sort 사용시 주로 java.util을 이용을 하는데...
여기서 내가 본 코드는 기본적으로 제공된 Arrays나 Collections 모두 Comparator 사용시 Primitive 타입을 사용할수 없다는 점이다.
그러면 Boxing하는 과정에서 얼마나 리소스를 잡아먹을까 ?
Example. Arrays.sort ()
public static <T> void sort(T[] a, Comparator<? super T> c) {
if (c == null) {
sort(a);
} else {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a, c);
else
TimSort.sort(a, 0, a.length, c, null, 0, 0);
}
}
Case 1. Integer 변환
Test Code
public static void main(String[] args) {
Runtime runtime = Runtime.getRuntime();
long prevMemory = runtime.freeMemory();
long startTime = System.currentTimeMillis();
int sum = 0;
for (int i = 1; i <= 100_000_00; i++) {
sum += (Integer) i;
}
long endTime = System.currentTimeMillis() - startTime;
long afterMemory = runtime.freeMemory();
System.out.println("Process Time : " + endTime / 1000.0 + " milli seconds");
System.out.println("Total / Used Memory : " + prevMemory + " / " + (prevMemory - afterMemory));
}
Result
| Time | Memory | |
| Primitive | 0.004 mills | 511544 bytes |
| Wrapper |
0.009 mills | 3642888 bytes |
천 만건 정도의 케이스에도 시간적으로는 크게 차이가 없는 느낌.
그래도 메모리 사용량에서는 차이가 좀 있는 편이다.
Case 2. Double 변환
Result
| Time | Memory | |
| Primitive | 0.029 mills | 511544 bytes |
| Wrapper | 0.033 mills | 5203024 bytes |
Integer와 비슷하게 시간적 차이는 그다지 크지 않지만
메모리 사용량이 높게 형성되었다.
'Language > Java' 카테고리의 다른 글
| Class 동기화 기법 ( mutex exclusion ) (0) | 2023.10.01 |
|---|---|
| JEP 430. String 템플릿 (Preview) (0) | 2023.09.02 |