자바의 메모리 공간

1. 메서드 영역

클래스 정보, 소스코드(바이트 콛), 메서드 생성자 등, static 변수 보관, 런타임 상수 풀 등

2. 스택 영역

자바 실행 시 main 스택영역이 생성된다. 각 스택 프레임은 지역변수, 중간변수 결과, 메서드 호출정보 등을 포함한다. 메서드가 종료되면 해당 스택 프레임이 제거된다.

3. 힙 영역

인스턴스와 배열이 생성되는 영역, GC 가 이루어지는 영역

 

스레드 정의

package thread.start;

public class HelloThread extends Thread {

    @Override
    public void run() {
    	// 현재 코드를 실행하는 스레드의 이름을 출력
        System.out.println(Thread.currentThread().getName() + " run()");
    }
}

 

스레드 생성

package thread.start;

public class HelloThreadMain {
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName() + ": main() start");

        System.out.println(Thread.currentThread().getName() + ": start() 호출 전");
        HelloThread helloThread = new HelloThread();
        helloThread.start(); // run() 을 실행하면 안된다

        System.out.println(Thread.currentThread().getName() + ": start() 호출 후");

        System.out.println(Thread.currentThread().getName() + ": main() end");
    }

}


main: main() start
main: start() 호출 전
main: start() 호출 후
Thread-0 run()
main: main() end

스레드간 실행 순서는 보장되지 않는다

run() 을 직접 실행하게 되면, run() 함수가 main 스택영역에 쌓이게 된다

 

 

'CS' 카테고리의 다른 글

자바 - 컨텍스트 스위칭  (0) 2024.12.10
자바 - 스레드와 스케줄링  (0) 2024.12.10
자바 - 프로세스와 스레드  (0) 2024.12.10
0woodev