Java Data 형입니다.
구분 |
상세 |
프리미티브 |
수치, Boolean |
레퍼런스 |
Class, Interface, Array, 열거타입 |
Data 구분 중 프리미티브에 대한 기본 메모리 Size 및 값 범위는 다음과 같습니다.
Data 구분 |
Data 형 |
크기 |
값범위 |
정수 |
byte |
1 byte |
-128 ~ 127 |
short |
2 byte |
-32768 ~ 32767 | |
int |
4 byte |
-214748348 ~ 214748347 | |
long |
8 byte |
값범위 큼 | |
부동 소수점 |
float |
4 byte(변동 가능) |
|
doulbe |
8 byte(변동 가능) |
| |
Boolean |
boolean |
1 byte(변동 가능) |
|
문자형 |
char |
2 byte |
|
프로그램이 실행될 때 메모리는 크게 Code 영역과 Data 영역으로 구분되어 집니다.
Code -> 실행되기 위한 기계어
Data -> Value를 가지고 있으며 크게 전역, Heap, Stack으로 구분되어짐
종류 |
용도 |
Global |
전역 변수로 사용되어 지며 프로그램 종료 시 값이 반환되어짐 |
Stack |
함수가 실행되면 할당되며 함수가 종료되면 Memory를 반환함(LIFO 방식) |
Heap |
동적 Memory 영역으로 프로그램을 실행할때 동적으로 Memory를 할당함 |
Stack은 함수를 호출할 때 사용되어지며 이때 함수에 대한 정보가 Stack에 저장되어 집니다.
(일반적으로 OS단에서 이야기하는 Call Stack)
컴파일 시 Size가 이미 결정되어집니다.
Heap은 프로그램이 기동하는 실행영역에서 할당되어지며 일반적으로 OS에서 제공하는 Virtual Memory Size까지 가능하다.
Runtime 시 Memory를 가변적으로 할당, 해제하게 됩니다.
일반적으로 C언어에서 malloc을 통해 할당하며 반환 시 free를 사용하여 Memory를 반환하게 됩니다.
위의 그림과 같이 stack은 위에서 아래로 Data가 할당되고 Heap은 아래서 위로 Data가 할당되어 집니다.
일반적으로 stack은 OS별로 할당할 수 있는 최고 Size가 있기 때문에 해당 Size 안에서 사용하도록 해야합니다.
Linux의 경우 아래와 같이 # ulimit -a를 통해 Stack Size를 확인할 수 있습니다.
(해당 Max Size를 초과하는 경우 Stack Overflow가 발생하게 되어 프로그램이 Down될 수 있습니다.)
'Common Programming > Java' 카테고리의 다른 글
Java Version 변경 (0) | 2014.03.03 |
---|