JVM

김민지·2022년 12월 26일
0

자바

목록 보기
15/21

JVM이란?

  • .JAVA로 된 파일을 실행할 수 있는 환경을 제공해주는 소프트웨어

JVM의 이점

  • 플랫폼(윈도우, 리눅스 등 OS를 의미함)의 영향을 받지 않는다
    어느 OS든 알아서 JVM이 해석을 해주어서 OS에게 해석결과를 알려준다

그럼 JAVA가 아닌언어는 어떻게 동작해?

  • C언어를 예로 들어봅시다 .C로 된 파일이 있다면 OS마다 다른 컴파일러가 존재하고 그에 따라 다른 실행파일이 만들어집니다. 이 다른 실행파일들은 서로 다른 OS에서만 실행될 수 있습니다. 즉, 컴파일한 파일, 실행파일만 가지고는 서로 다른 OS에서 실행시킬 수 없다는 의미입니다. .C 파일을 받아서 새로 컴파일하고 새로 실행파일을 만들어주어야합니다
    하지만 JAVA는 하나의 .JAVA파일을 컴파일한 .CLASS파일을 어느 OS에서든 실행시킬 수 있죠
  • JAVA는 OS에 종속적이지 않습니다. 어느 JVM에서나 동작시킬 수 있죠
    하지만 JVM은 OS에 종속적입니다. 리눅스에서깔수있는 JVM이 있고, 윈도우에 맞는 JVM이 있죠

JVM의 동작방식

  1. OS로부터 메모리를 할당받습니다
  2. 자바 컴파일러가 .JAVA->.CLASS(바이트코드)로 컴파일합니다
  3. Class Loader가 1번에서 할당받은 메모리중 일부 영역에 Runtime Data Area로 클래스를 로딩한다.
    클래스에 있는 여러 부분들을 적당한 영역에 배치한다
  4. 로딩된 .class들은 실행엔진을 통해 해석된다

Runtime Data Area

모든 스레드가 공유해서 사용(GC 대상)

  1. 힙 영역
  • new로 생성된 모든 것
  1. 메서드 영역
  • 클래스 파일의 바이트 코드가 로드되는 곳

스레드 마다 하나씩 생성

  1. 스택 영역
  • 지역변수, 임시값, 실행되는 메서드
  1. PC 레지스터
  • 현재 스레드가 실행되는 부분의 곳을 가리키는
  1. 네이티브 메서드 스택
  • 자바외의 언어로 작성된 네이티브 코드를 실행할때 사용되는 메모리 영역
    왜 이건 공유해서 사용하면 안되지?
  • 3번과 5번은 둘다 스택영역.. 그래서 그런듯

프로세스 vs 스레드

  • 프로세스: 메모리상에서 실행중인 프로그램 ex)메모장 창을 여러번 띄움 -> 여러 프로세스
  • 스레드: 프로세스 하나 안에서 실행되는 흐름단위 ex) ui를 그리는 스레드 + 서버통신을 담당하는 스레드를 따로 둬서 둘이 동시에 실행되는것처럼 보이게 하는 것 -> 멀티스레드

JVM Memory Usage

static

static멤버는 언제 생성?

  • JVM이 시작되는 시점

Builder

어떻게 Builder는 체이닝 형태로 값을 주입할 수 있는걸까?

  • static class이고, 자신을 return하기 때문에 가능한 것

출처
https://coding-factory.tistory.com/827
https://whitepro.tistory.com/458

profile
안녕하세요!

0개의 댓글