자바의 메모리 공간
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 |