Stack
Stack 에는 heap 영역에 생성된 Object (참조자료형) 타입의 데이터들에 대한 참조를 위한 값들이 할당된다.
또한 원시타입 데이터들이 할당된다.
이때 원시타입 데이터들의 참조값이 아닌 실제 값을 저장한다.
scope에 따른 visibility란 ?
test라는 변수가 어떤 함수내에서 stack에 할당된 경우 해당 지역변수는 다른 함수에서 접근할 수 없다.
거두절미하고 예제를 보자 !
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
int test = 2;
sum(test);
}
public static int sum(int arg){
int temp = arg + 6;
int result = temp/4;
return result;
}
}
다음 코드가 Stack 메모리에 어떻게 쌓이는지 알아보자.
먼저 test 변수의 실제값2가 대입된다.
다음으로 sum 함수가 호출된다. 이때 test와 arg사이에 깊은 복사가 일어난다.
그 이후에
int temp = arg + 6;
int result = temp/4;가 실행된다
현재 스택의 상태는 아래와 같다.
그 이후 sum 함수가 종료되며 sum scope에서 사용되었던 지역변수들은 stack에서 지워지고 함수를 호출했던 시점으로 돌아가면 스택은 아래와 같이 변한다.
Heap
이제 heap 영역에 대해서 알아보자.
(출처 : https://yaboong.github.io/java/2018/05/26/java-memory-management/)