코딩기록 저장소 🐕/이론공부

쓰레드 프로세스 JVM

kimkongmom 2023. 10. 29. 16:31

 

 

 

 

 

 

JVM이란( Java Virtual Machine )?


직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다.

Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java 를 실행시킬 무언가가 필요하다. 그게 바로 JVM이다.

즉, OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터이다.

 

Java 소스코드, 즉 원시코드( *.java )는 CPU가 인식을 하지 못하므로 기계어로 컴파일을 해줘야한다.

하지만 Java는 이 JVM 이라는 가상머신을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아니라 JVM이 인식할 수 있는 Java bytecode( *.class )로 변환된다.

 

Java compiler 가 .java 파일을 .class 라는 Java bytecode로 변환한다.

💡 여기서 Java compiler는 JDK를 설치하면 bin 에 존재하는 javac.exe를 말한다. (즉, JDK에 Java compiler가 포함되어 있다는 소리임)
javac 명령어를 통해 .java를 .class로 컴파일 할 수 있다.
변환된 bytecode는 기계어가 아니기 때문에 OS에서 바로 실행되지 않는다.

이 때, JVM이 OS가 bytecode를 이해할 수 있도록 해석해준다. 따라서 Byte Code는 JVM 위에서 OS 상관없이 실행될 수 있는 것이다.

OS에 종속적이지 않고, Java 파일 하나만 만들면 어느 디바이스든 JVM 위에서 실행할 수 있다.

 

 

 

 

프로세스 : 자신만의 고유 공간과 자원을 할당받아 사용

 


스레드 : 다른 스레드와 공간과 자원을 공유하면서 사용

 

 

 

🔷 프로세스

컴퓨터에서 연속적으로 실행하고 있는 컴퓨터 프로그램
메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)
운영체제로부터 시스템 자원을 할당받는 자원의 단위
정리하면 프로그램의 실행된 부분을 의미한다.

 

🔷 특징

각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당받는다.
코드 영역(code area): 프로그래머가 작성한 프로그램이 저장되는 영역
데이터 영역(data area): 코드가 실행되면서 사용한 환경이나 파일들의 각종 데이터들이 모여있다.
스택 영역(stack area): 호출한 함수가 종료되면 되돌아올 메모리의 주소나 지역 변수 등이 저장된다.
힙 영역(heap area): 동적으로 할당되는 데이터를 위해 존재한다.
최소 1개 이상의 스레드(메인 스레드)를 가지고 있다.
각 프로세스는 별도의 주소 공간에서 실행되며 기본적으로 다른 프로세스의 자원에 접근할 수 없다.
한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신(IPC)를 사용해야 한다.
ex. 파이프, 파일, 소켓 등을 이용한 통신 방법

 

 

 

 

🔷 스레드

 

하나의 프로세스 내에서 여러 개의 실행 흐름(단일, 동시적, 병렬적)을 두어 작업을 효율적으로 처리하기 위한 모델이다.
프로그램 실행하면 JVM이 시작되고 JVM이 시작되면 자바 프로세스가 시작된다. 이때 프로세스 안에 스레드가 있다.
여러 프로세스가 공유하는 하나의 스레드가 수행되는 일은 없다.
어떤 프로세스든 하나 이상의 스레드가 수행된다.
두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 한다.
멀티스레드는 주어진 자원을 극한으로 사용하기 위한 모델이다.

 

 

🔷 스레드 사용 이유

 

메모리 절약 -> OS마다 다르지만, 무슨 작업을 수행하려고 할 때 JVM은 적어도 32~64MB 물리 메모리 점유한다.
근데 스레드는 1MB 이내의 메모리만 점유한다. 그래서 스레드를 '경량 프로세스'라고도 부른다.

 

프로세스 콘텍스트 스위칭(Context Switching)에 비해 오버헤드 절감

 

 

 

 

🔷 스레드 풀이란?

 

스레드 풀(Tread Pool)은 동시에 여러 작업을 효율적으로 실행 및 관리하기 위해 서버에서 만드는 스레드의 모음입니다. 스레드 풀을 이용하면 각 작업에 대해 새 스레드를 생성하는 대신 이미 생성된 스레드 풀에 있는 스레드를 재사용합니다. 이는 성능과 리소스 관리에 도움이 됩니다.

 

 

 

'코딩기록 저장소 🐕 > 이론공부' 카테고리의 다른 글

서버사이드렌더링 SSR  (0) 2023.10.29
HttpServletRequest, HttpServletResponse  (0) 2023.10.29
아키텍처  (0) 2023.10.29
웹서버와 WAS  (0) 2023.10.29
HTTP 시작 (김영한 HTTP)  (0) 2023.10.06