TIL - 22.11.30

자라나는 ㅇㅅㅇ개발자·2022년 11월 30일
0

TIL

목록 보기
23/126

JVM



JVM(Java Virtual Machine) 이해하기


  1. 코드가 실행되는 과정
    개발자 -> 자바 컴파일러 -> 바이트 코드 -> -> JVM -> OS -> Hardware
  • 바이트코드 : JVM이 알아들을 수 있는 명령어 집합
  • JVM의 목적은 바이트코드를 기계어로 번역(인터프리터가)하여 CPU에게 일을 시키는 것
  1. JDK(Java Development Tool) 구조
    자바를 사용할 때 필요한 도구들
    JRE(Java Runtime Environment)자바 실행환경 + JVM 으로 이루어져있다.



쓰레드

  • 프로세스 내에서 실제로 작업을 수행하는 주체를 의미,
  • 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행
  • 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라 한다.


JVM의 구조

참고 영상 : https://www.youtube.com/watch?v=GU254H0N93Y

  • JRE에서 바이트코드가 JVM으로 들어오면 JVM이 작동을 시작한다.
  • Class Loader Subsystem : JVM이 작동을 하기 위해선 메모리가 필요하고, 작동에 필요한 자바 프로그램들을 정렬, 배치 하여 메모리에 저장
  • Runtime Data Area : 코드가 실행되는동안 사용되는 데이터들의 영역

  • Method Area : class에 대한 모든정보가 저장되는 영역
  • Heap : runtime에 생성되는(생성자 호출로 생성된 인스턴스) 모든 객체들이 저장(GC가 여기서 동작됨)

Method Area와 Heap은 모든 쓰레드가 공유됨 -> 동기화에 주의해야함

  • JVM Stacks : 메서드를 실행하기 위한 정보들이 저장되는 공간. 메서드가 호출될 때마다 스택 안에 프레임이 생성되고 메서드가 끝나거나 예외가 터지면 사라진다.
  • PC Registers : 현재 실행되고 있는 명령어의 주소를 저장
    멀티쓰레드 환경에서 한 쓰레드가 작업을 하다가 잠시 다른 쓰레드로 CPU 점유를 넘겨주고 다시 돌아왔을 때 이전에 수행하고 있던 명령어를 기억하여 이어서 수행 가능하도록 해준다.
  • Native Method Stacks : C나 C++로 작성된 메서드를 실행할 때 사용되는 Stack

JVM Stacks, PC Registers, Native Method Stacks는 쓰레드가 생성될 때마다 같이 생성되고, 서로 다른 쓰레드가 침범할 수 없다.

지역변수의 동시성 문제를 걱정하지 않아도 되는 이유


  • Execution Engine(실행엔진) :
    JIT Compiler : 반복되는 코드를 재사용해주어 작업에 속도를 높인다.
    GC : 더이상 참조되지 않는 인스턴스(객체)를 모아서 정리한다.
  • JNI(Java Native Interface)
    C, C++, 어셈블리로 작성된 함수를 사용할 수 있는 방법을 제공.
    자바에서 기본으로 제공되는 메서드에 native 키워드가 붙음
  • Native Method Libries
    C, C++로 작성된 라이브러리


클래스 로더와 static 영역

Loading -> Linking -> Initialization

0개의 댓글