오늘이군
오토박싱, 오토언박싱 - auto (un)boxing, 자바 자료형 본문
반응형
자바에는 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의 배수로 맞추기 위함.
으로 구성이 됩니다.
반응형
'삶.. > 프로그래밍' 카테고리의 다른 글
MSA (Micro service architecture) vs monolithic (0) | 2019.01.22 |
---|---|
Java8 꼭 사용해야 하나요? (0) | 2019.01.04 |
문자열 연결 - String, StringBuilder, StringBuffer, +, concat (0) | 2018.08.14 |
알고리즘 - 시간 복잡도, 공간 복잡도, 빅오(O)표기법 (0) | 2018.08.13 |
TDD (Test Driven Development) (0) | 2017.07.06 |
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
Comments