[Java] Primitive 과 Reference Type
정리
Primitive type
type |
size |
default value |
wrapper class |
byte |
8 bit(1 byte) |
0 |
Byte |
short |
16 bit(2 byte) |
0 |
Short |
int |
32 bit(4 byte) |
0 |
Int |
long |
64 bit(8 byte) |
0 |
Long |
float |
32 bit(4 byte) |
0.0f |
Float |
double |
64 bit(8 byte) |
0.0d |
Double |
char |
16 bit(2 byte) |
‘\u0000’ |
Character |
boolean |
1 bit |
false |
Boolean |
- type 마다 size가 fix
- 기본값이 있으므로 null이 존재하지 않음
- generic을 이용할 때 필요한 wraper class가 존재(Integer, Long..)
- 컴파일 시, 크기를 초과하면 에러가 발생
- primitive type의 변수는 thread의 stack memory에 저장
Reference Type
- 기본형을 제외한 모든 타입은 Reference Type 이며 java.lang.Object 를 상속
- Class, Interface, Array, Enum Type
- 기본값은 아무런 참조 정보가 없으므로 null을 리턴
- new, Reflection, sun.misc.Unsafe 등으로 객체를 생성
- HotSpot 기준 아무것도 없는 Class도 8Byte를 차지
- boolean type 1개가 존재하는 Class는 16Byte를 차지합니다. (기본 1Byte + 1Byte (boolean 1bit 나머지 padding값)
- 생성된 객체는 Heap Memory에 저장
- (Java Object Size Calculations in 64-bit)
String은 무엇인가
- String은 char의 Array
- String constant pool을 이용한 메모리 관리
참고