"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

오늘이군

오토박싱, 오토언박싱 - auto (un)boxing, 자바 자료형 본문

삶../프로그래밍

오토박싱, 오토언박싱 - auto (un)boxing, 자바 자료형

오늘이군 2018. 9. 10. 17:35
반응형


자바에는 int, long 와 같은 기본형 타입(Primitive type) 이 있고, 그 기본형을 Wrapping 한 Wrapper Class 가 있습니다.

결론적으로 얘기하면 기본형 타입 연산이 빠릅니다.

예전에는 long 타입끼리만 연산이 가능했지만 JDK1.5 버전부터 부터는 auto(un)boxing 을 지원하게 되었습니다.


개발하기는 편해졌지만 별 생각없이 개발하다보면 큰 성능 이슈를 발생시키게 됩니다.

Long sum = 0L;
for(long i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}

와 같이 개발하면 안된다는 얘기 입니다.
Boxing, UnBoxing 이 일어나지 않게 개발해야 합니다.

이것이 얼마나 속도 차이가 나는지 코드로 보겠습니다.
아래 내용처럼 Integer.MAX_VALUE 만큼 연산을 수행하는데, Boxing, UnBoxing 이 일어나게 되면 1초 이내로 수행될 연산이 23초 까지 걸리게 되는 것입니다. 
Long 은 기본적으로 클래스이므로 연산을 하기 위해선 언박싱을 해야 하므로 시간이 가장 오래 걸렸습니다.
이처럼 좋은 코딩 습관이 중요합니다.

참고로 Wrapper 클래스는 메모리 heap 영역에 저장이 되며,
Integer 의 경우 heap 에 16bytes : Header(8bytes) + int(4bytes) + padding(4bytes)
padding : Object는 8bytes 단위라서 8의 배수로 맞추기 위함.
으로 구성이 됩니다.





반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
Comments