
메서드 영역(Method Area) : 프로그램을 실행하는데 필요한 공통 데이터 관리. 이 영역은 프로그램의 모든 영역에서 공유한다.
스택 영역(Stack Area) : 자바 실행시 , 하나의 실행 스택이 생성된다. 각 스택 프레임은 지역변수 , 중간 연산 결과 , 메서드 호출 정보등을 포함한다. 지역변수에 인스턴스 참조값을 가지고 있다.
힙 영역(Heap Area) : 객체(인스턴스) 와 배열이 생성되는 영역이다. 가비지 컬렉션(GC) 가 이루어지는 주요 영역이며 , 더이상 참조하지 않는 객체는 GC 에 의해서 제거된다고 생각하면 된다.
뒤에서 적겠지만 , 스택 영역은 스레드별로 하나의 실행 스택이 생성된다. 따라서 스레드 수 만큼 스택이 생성된다. 지금은 스레드를 1개만 적용하므로 스택도 하나이다. 이후 스레드를 추가할 것인데, 그러면 스택도 스레드 수 만큼 증가한다.
import static util.MyLogger.*;
public class ManyThreadMainV1 {
public static void main(String[] args) {
log("main() start");
HelloRunnable runnable = new HelloRunnable();
Thread thread1 = new Thread(runnable);
thread1.start();
Thread thread2 = new Thread(runnable);
thread2.start();
Thread thread3 = new Thread(runnable);
thread3.start();
log("main() end");
}
}
여기서 thread.start() 는 해당 스레드에게 작업을 시작하라고 명령을 하는것이다.
main 스레드는 아래코드를 진행 , thread 도 run() 메서드를 실행한다.
멀티스레드 형태로 작업을 한다.
여기서 중요한거는 main, thread1, thread2, thread3 각자 자기 맡은 코드를 수행을한다.

각각의 Thread 는 개별적으로 스택영역을 하나씩 가지고있다.