[JAVA] Thread 와 JVM

정동아·2023년 5월 8일
0

백엔드 부트캠프

목록 보기
17/41

Thread

프로세스는 실행중인 애플리케이션을 의미한다.
프로세스는 데이터, 컴퓨터 자원, 그리고 스레드로 구성되는데, 스레드는 데이터와 애플리케이션이 확보한 자원을 활용하여 소스코드를 실행한다.
정리하면, 스레드는 하나의 코드 실행 흐름이라고 볼 수 있다. (= 명령의 흐름, 일꾼이 몇명이냐)

그동안 main 메서드 실행 했던것이, 메인 스레드가 main메서드를 실행시켜준 것이었다.
어떤 자바 애플리케이션의 소스코드가 싱글 스레드로 작성되었다면, 그 애플리케이션이 실행되어 프로세스가 될 때 메인 스레드만 가지는 싱글 스레드 프로세스가 된다.
메인 스레드에서 다른 스레드를 생성하여 실행시키면 해당 애플리케이션은 멀티 스레드로 동작한다.

작업 스레드가 수행할 코드를 작성하고, 작업 스레드를 생성하여 실행시켜야하는데

  • Runnable 인터페이스를 구현한 객체에서 run()을 구현하여 스레드를 생성하고 실행하는 방법
  • Thread 클래스를 상속받은 하위 클래스에서 run()을 구현하여 스레드를 생성하고 실행하는 방법

스레드의 이름을 조회, 변경하는 것이 가능하다.

멀티 스레드 프로세스의 경우, 두 스레드가 같은 데이터를 공유하게 되어 문제가 발생할 수 있다.
그래서 임계 영역을 설정해주어야한다.
임계 영역은 오직 하나의 스레드만 코드를 실행할 수 있는 코드 영역을 의미한다.
락은 임계 영역을 포함하고 있는 객체에 접근할 수 있는 권한을 의미한다.
즉, 임계 영역으로 설정된 객체가 다른 스레드에 의해 작업이 이루어지고 있지 않을 때, 임의의 스레드 a는 해당 객체에 대한 락을 획득하여 임계영역 내의 코드를 실행할 수 있다.

JVM

JVM은 자바로 작성한 소스 코드를 해석해 실행하는 별도의 프로그램이다.

JVM에 자바 프로그램이 로드되어 실행될 때 특정 값 및 바이트코드, 객체, 변수 등과 같은 데이터들이 메모리에 저장되어야한다.
런타임 데이터 영역이 바로 이런 정보를 담는 메모리 영역이며, 크게 5가지 영역으로 구분되어있다.

  • Stack 영역
    스택은 일종의 자료구조이다. (자료구조는 프로그램이 데이터를 저장하는 방식을 말한다.)
    맨 마지막에 들어온 데이터가 가장 먼저 나가는 자료 구조를 스택이라한다.
    메서드가 호출되면 그 메서드를 위한 공간인 Mrthod Frame이 생성된다. 메서드 내부에서 사용하는 다양한 값들이 있는데 참조변수, 매개변수, 지역변수, 리턴값 및 연산 시 일어나는 값들이 임시로 저장된다.
    이런 Method Frame 이 Stack에 호출되는 순서대로 쌓이는데, Method의 동작이 완료되면 역순으로 제거된다.
  • Heap 영역
    JVM에는 단 하나의 Heap영역이 존재한다. (이 영역은 자동 생성된다.)
    이 영역안에 객체나 인스턴스 변수, 배열이 저장된다.
    우리가 객체를 다룬다는 것은 Stack 영역에 저장되어있는 참조변수를 통해 Heap영역에 존재하는 객체를 다룬다는 의미가 된다.
    = Heap 영역은 실제 객체의 값이 저장되는 공간이다.

0개의 댓글