자바 프로그램을 실행하면
JVM이 Process를 생성하고, 그 안에서 main Thread가 실행된다.
메서드public static void main(String[] args)는 JVM이 생성한 메인쓰레드에서 실행된다.
자바의 Thread클래스는 메인 쓰레드를 포함한 모든 쓰레드에 대한 정보를 제공하고, 조작할 수 있는 다양한 기능을 제공


자바에서 Thread
쓰레드 간의 관계는 부모-자식 종속 관계가 아니라, 독립적인 실행 흐름을 가지는 병렬 실행 단위이다.
메인 쓰레드에서 다른 쓰레드들을 생성하지만, 다른 쓰레드는 메인 쓰레드와는 독립적으로 실행됨
메인 쓰레드가 종료되더라도, 프로그램이 종료되지 않는 한 다른 쓰레드들은 계속 실행될 수 있다.
모든 사용자 쓰레드(user thread)가 종료되면 프로그램이 종료된다.
자바에서는 데몬 쓰레드(daemon thread)라는 개념이 있다.
데몬 쓰레드는 백그라운드에서 실행
예) 가비지 컬렉션을 담당하는 쓰레드나, 일정한 간격으로 상태를 점검하는 쓰레드 등
JVM의 메모리 공간과 실제 코드
JVM( 자바 가상 머신 )은 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라서 여러 영역으로 나누어 관리를 한다.
JVM의 메모리 공간( Runtime Data Area )은 크게
Method( Static )영역, Stack 영역, Heap 영역으로 구분된다
main메소드에서, 메소드twice까지 실행됐을때의 모습( 아직 result2는 안생김 )

Method( Static )영역
JVM이 읽어들인 클래스와 인터페이스, 클래스 변수(static)와 메소드 등이 저장됨
Stack 영역
기본 타입에 해당되는 데이터, 참조 타입에선 주소값이 저장
메서드 수행에 필요한 데이터들 저장됨
기능수행 끝나면 자동으로 반환됨( 함수 수행되면 없어짐 )
Heap 영역
Method Area에 저장된 클래스만이 인스턴스로 생성이 되어 적재된다
Stack 영역과 다르게 보관되는 메모리가 호출이 끝나더라도 삭제되지 않고 유지된다.
그러다 어떤 참조 변수도 Heap 영역에 있는 인스턴스를 참조하지 않게 된다면, GC(가비지 컬렉터)에 의해 메모리에서 청소된다.
stack은 스레드 갯수마다 각각 생성되지만, heap은 몇개의 스레드가 존재하든 상관없이 단 하나의 heap 영역만 존재
'지식의 재구성' 카테고리의 다른 글
| 요청에 대한 서버의 응답, Rest API (0) | 2024.08.19 |
|---|---|
| [ 프 어 실03 ] SpringBoot서버 Architecture (0) | 2024.08.19 |
| [ 프 어 실01 ] 메모리, CPU, Process (1) | 2024.08.19 |
| 프로그램은 어떻게 실행되는가( 프 어 실 ) (0) | 2024.08.19 |