Notice
Recent Posts
Recent Comments
Link
GitHub Contribution 그래프
Loading data ...
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

Youn's IT Memo

Java 실험 | Comparator & Auto Boxing 본문

Language/Java

Java 실험 | Comparator & Auto Boxing

bellman66 2023. 6. 22. 20:09

< 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