java - JDK, JRE, JVM

Expert Inpyo·2022년 10월 20일
0

Java

목록 보기
6/6

출처
출처1
출처2 gc
출처3 자바 메모리 관리
출처4 자바 메모리 관리
출처 5

JVM, Java Virtual Machine

정의

자바를 실행하기 위한 가상 기계
=> Java는 OS에 종속적이지 않음
=> OS에 종속받지 않고 실행되기 위해선, OS 위에서 Java를 실행시킬 무언가가 필요함
=> 이 것이 바로 JVM

즉, OS에 종속받지 않고, CPU가 Java를 인식, 실행할 수 있게 하는 소프트웨어

기능

  1. 자바 프로그램이 어느 기기, 어느 운영체제 상에서도 실행될 수 있게 만들어줌(Write Once, Read Anywhere, WORA)

  2. 자바 프로그램의 메모리를 효율적으로 관리 & 최적화 해줌
    => How?
    - 가비지 컬랙션(Garbage Collection)

        - JVM이 메모리를 관리하는 프로세스를 지칭하는 용어
        - 자바 프로그램 상에서 사용하지 않은 메모리를 지속적으로 찾아 제거함 => 효율적인 메모리 관리 가능

Java 메모리 구조

  • Stack
    • 스택 프레임을 저장하는 메모리 공간

      • 메서드가 호출되기 이전의 상태를 기록하는 역할 수행
      • 매개변수 : 호출 메서드가 전달한 인자값
      • 지역변수 : 메서드 내에서 선언한 변수
      • 리턴 주소 : 메서드 실행을 마친 다음 실행할 명령문의 주소
      • 리턴 값 : 호출 메서드에게 돌려줄 값
    • 메서드 내에서 정의하는 기본 자료형(int, double 등)에 해당되는 지역 변수와 배개 변수의 데이터 값은 스택 프레임에 포함되어 스택 area에 저장됨

    • 메서드가 호출될 때 메모리에 할당됨(Push)

    • 메서드가 종료될 때 메모리에서 제거됨(Pop)

    • 기본 자료형이 아닌 참조형 변수(객체)들은 heap 영역에 저장됨

      • Stack 메모리는 heap 영역에 존재하는 객체들에 대한 참조 가지고 있음
    • 스택 메모리의 top에 존재하는 하나의 스택 프레임만 활성화

    • 그 전에 존재하는 스택 프레임은 모두 비활성화 됨

      • 비활성화된 스택 지역변수에는 접근 불가능
      • 스택 메모리 영역은 쓰레드 별로 할당됨
      • 쓰레드가 생성되고 시작될 때 마다 각각의 stack 메모리를 가짐 / 다른 쓰레드의 스택 메모리에 엑세스 할 수 없음
  • Heap
    • 실제 객체가 저장됨
      • Heap 영역에 존재하는 객체들은 Stack 영역의 변수들에 의해 참조됨

        	- 실행중인 각 JVM 프로세스에 대해 Stack과 달리 Heap 메모리 영역은 단 하나만 존재함
    • 따라서, 실행 중인 쓰레드의 수에 관계 없이 Heap 영역에 존재하는 메모리는 공유됨

참조

JRE, Java Runtime Environment

정의

자바 클래스 라이브러리(Java Class Libraries), JVM, 자바 클래스 로더(Java Class Loader)를 포함

클래스 로더, 클래스 라이브러리를 통해 작성한 자바 코드를 라이브러리와 결합한 후 JVM으로 넘겨 실행시킴

JVM이 원활하게 작동할 수 있도록 환경을 맞춰주는 역할

JDK, Java Development Kit

정의

JRE를 포함하고 있음(JRE는 JVM을 포함하고 있으므로, JDK는 JVM을 포함하고 있다고 볼 수 있음)

자바로 무언가를 만들고 싶은 사람은 JDK를 설치해야 함

JDK는 JRE에는 없는 Java Compiler를 포함하고 있음

  • 컴파일러란?
    • 우리가 작성한 자바 문법을 컴퓨터가 이해할 수 있게 바꿔주는 역할

profile
도전! 데이터 엔지니어

0개의 댓글