백기선님 자바스터디 1주차 : JVM이란, 어떻게 동작하나

bongf·2021년 5월 3일
1

Java강의

목록 보기
1/18

목표

자바소스파일(.java)을 JVM으로 실행하는 과정 이해하기

학습 1) JVM이란 무엇인가

자바로 작성된 프로그램을 실행하는 가상 머신

JVM Java Vitrual Machine의 약자로 자바 바이트 코드를 어떻게 실행할지에 대한 표준 스펙

  • 표준 스펙이므로 이를 구현한 벤더는 여러 가지

  • 컴파일러는 JVM에 포함되지 않는다.

  • 컴파일러가 .java 파일을 컴파일 하면 .class파일(바이트코드로 이루어짐)이 된다.

  • 클래스로더가 클래스 파일을 로드한다.

  • 로드된 바이트 코드들이 배치되는 공간이 있어야 돼 == Runtime Data Area

  • 그럼 Executive Engine(GC,, 가비지컬렉터, JIT 컴파일러가 여기있어)이 이를 실행한다

    • 인터프리터가 실행시점에 바이트코드를 기계어로 번역.
    • JIT 컴파일러가 자주 실행 되는 것은 컴파일 해두고
  • JVM을 쓰면 OS에 종속적이지 않고, 메모리 관리를 한다는 장점

    • JVM 자체는 OS 종속적

학습내용

  • 출처: 자바의 정석 기초편, https://www.infoworld.com/article/3272244/what-is-the-jvm-introducing-the-java-virtual-machine.html https://www.itworld.co.kr/news/110837
  • Java Virtual Machine
  • JVM 기능 1) 애플리케이션의 OS의 종속을 없앤다
    • 일반 애플리케이션은 OS랑 직접 소통을 하는데 반해 자바는 애플리케이션 - OS 사이에 JVM이 있다
    • JVM이 있어서 OS에 종속되지 않는다
    • "Write once, run anywhere" 철학 실행 가능
  • JVM 기능2) 메모리 관리를 한다
    • 프로그래머가 사용하지 않는 부분을 메모리에서 정리하지 않아도 된다
    • Garbage Collection : JVM은 가비지 컬렉션이라는 프로세스를 통해 관리한다. 이 가바지 콜렉션 프로세서는 자바프로그램에서 사용되지 않는 메모리를 찾아내서 제거. 가바지 컬렉션 프로레서는 실행 중인 JVM내부에서 일어남.
    • ex. 객체가 생성되어 있다가 참조형 변수와 연결이 끊기면 남아 있는데 이를 GC가 찾아서 없앤다

학습 2) 컴파일하는 방법

  • cmd에서 javac(자바 컴파일러) + 파일명(.java 확장자를 붙인다)를 입력한다.
  • 자바 컴파일러. 사람이 작성한 문장을 자바바이트코드로 변환
  • 컴파일을 하면 JVM이 이해할 수 있는 클래스 파일이 생성된다.
    : 자바 컴파일러는 자바로 작성된 코드를 자바가상머신이 이해할 수 있는 언어로 변환한다. http://www.tcpschool.com/java/java_intro_programming
    : 자바 클래스 파일이 자바바이트코드로 이루어진 것이다.

학습 3) 실행하는 방법

  • cmd에서 java + 클래스파일(.class 는 붙이지 않는다)를 입력한다
  • java.exe : 자바인터프린터, 자바프로그램(클래스파일)을 실행
  • 자바프로그램을 실행 > java.exe가 지정된 클래스 파일에서 main 메서드를 찾는다 > 메서드 안의 첫 번째 문장부터 실행한다 > 메인메서드의 모든 문장이 실행되고 나면 프로그램 종료

학습 4) 바이트코드란 무엇인가

학습 5) JIT컴파일러란 무엇이며 어떻게 동작하는지

  • 출처 : 위키피디아JIT 컴파일러란 무엇인가
  • Just In Time 컴파일러
  • JIT 컴파일러는 인터프리트방식과 컴파일 방식의 혼합.
    • 실행 시점에서 인터프리트 방식으로 기계어 코드를 생성하면서 그 코드를 캐싱하여, 같은 함수가 여러 번 불릴 때 매번 기계어 코드를 생성하는 것을 방지한다.
  • JVM에서만 돌아가는 자바 바이트 코드를 해당 플랫폼에 맞는 기계어(native machine code)로 컴파일해 준다.
  • JIT는 어떻게 동작하는가

  • JVM이 처음 나왔을 때 interpreter방식 (한 줄씩 해석하고 실행)때문에 속도가 느렸다. 하지만 JIT로 극복했다.
    : interpreter - 바이트코드를 하나씩 읽어서 실행
  • Java는 사람이 쓴 코드 > 바이트코드 > 기계어로 번역해서 시간이 많이 걸린다. 그 문제를 해결하기 d위한 것. 실행시점에 자주 쓸만한 코드(해당 바이코드 묶음 전체, 메소드 단위?)들을 기계어(native 코드)로 변환시킨 다음에 저장해두기 때문에 코드가 재사용될 때 변환 시간을 단축한다https://medium.com/@lazysoul/jit-just-in-time-16bb63f3ae26

학습 6) JVM 구성요소

  • 출처 https://medium.com/@lazysoul/jvm-%EC%9D%B4%EB%9E%80-c142b01571f2, https://sehun-kim.github.io/sehun/JVM/
  • 크게 클래스파일을 로드하는 Class Loader / 해당 바이트코드(클래스파일)가 배치되는 공간인 Runtime Data Areas / 로드된 클래스의 바이트코코드를 실행하는 Execution Engine 이 3가지로 구성되어 있다
    Class Loader
  • Runtime시점(클래스가 처음 사용되는 시점)에 클래스를 메모리에 로드한다
  • Runtime Data Areas : JVM이 운영체제 위에서 실행될 때 할당받는 메모리
    • 클래스 파일이 이곳에 로드 된다
  • Executve Engine : Runtime Data Areas에 배치된 클래스파일을 실행한다
    • 자바바이트코드를 명령어 단위로 읽어서 실행한다

학습 7) JDK와 JRE의 차이

  • 출처 : https://goodgid.github.io/Java-JDK-JRE/
  • JRE는 JVM 읽기 전용 / JDK는 읽고 쓰는 전용(개발용) 이라고 보면 된다
  • JRE (Java Runtime Environmnet) 말그대로 자바 실행 환경
    • JRE는 JVM이 실행될 수 있는 환경을 구현해 놓은 것이다.
    • 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일과 기타 파일을 가지고 있다.
    • 여기에는 자바 프로그래밍 도구가 없어 읽기만 가능하다
  • JDK (Java Development Kit)
    • 자바 개발 키트
    • JDK = JRE + 프로그래밍 도구 (자바 컴파일러 도구 등)

보충_자바 프로그램의 실행과정

더 깊게 설명한 호눅스 수업내용

210215 월 java chess 2주차-1 수업 복기 [비공개필수]

profile
spring, java학습

0개의 댓글

관련 채용 정보