월루를 꿈꾸는 대학생
JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 본문
728x90
- JVM이란 무엇인가
- Java Virtual Machine : 자바 실행을 위한 가상 컴퓨터
- 자바의 특징 중 하나 os 에 종속적이지 않다 -> os에 종속적이지 않기 위해서는 os말고 java를 실행시킬 다른 무언가가 필요 = JVM
- 컨테이너 비슷하게 쓰는 듯
- 코드가 jvm 한 번 거친 후에 os 전달 되기에 조금 느림 다만 os에 직접 전달이 아니기에 종속적이지가 않음 -> write once , run anywhere
- 컴파일 하는 방법
- .java 파일을 컴파일러가 .class 파일로 변경
- .class 파일은 컴퓨터가 읽는 파일이 아니라 JVM이 읽을 수 있는 파일의 형태
- javac test.java 이런 식으로 컴파일 하면 class 파일이 나옴 - 실행하는 방법
- javac 명령어로 컴파일한 class 파일이 있는 곳으로 이동 후 java test 명령어 쓰면 실행 완료 - 바이트코드란 무엇인가
- 위에서 자바 컴파일러가 변환한 .class 파일을 칭함
- 코드 명령어 크기가 1byte라서 바이트 코드라고 함
- 해당 바이트 코드가 있기 때문에 JVM에서 이를 읽고 실행할 수 있고 이를 통해 운영체제에 종속적이지 않을 수가 있음 - JIT 컴파일러란 무엇이며 어떻게 동작하는지
- Just In Time
- 바이트 코드를 CPU에 직접 보내는 명령어로 바꾸는 프로그램
- 프로그램이 시작되고 코드를 컴파일 후 JIT 컴파일러 실행
- 초기 JVM이 인터프리트 방식만 사용해 한 줄 한 줄 읽어서 실행속도가 느렸는데 JIT 도입해서 속도 보완
- JIT : 실행 시점에 인터프리터 방식으로 기계어 코드 생성하면 그걸 따로 캐싱해 둔 후에 동일한 부분 실행하면 캐싱된 거 다시 쓰는 방법
- JVM 구성 요소
1. 자바 인터프리터
- 자바 컴파일러로 바뀐 바이트 코드 ( .class ) 파일을 한 줄씩 읽고 기계어로 해석
2. 클래스 로더
- 자바의 경우 동적으로 클래스를 읽음 저거 호출했다가 저거 호출했다가 그래서 클래스 로더는 JVM안에서 동작을 해 모든 자바 클래스를 로드 하는 것이 아니라 호출되는 순간 해당 class 파일 찾아서 메모리에 로딩해주는 역할을 함
3. JIT 컴파일러
- 위에 설명과 동일
- 인터프리터는 너무 느리다 . 보완하기 위해서 인터프리터가 번역한 기계어 코드 중 자주 쓰는 메서드를 컴파일하고 기계어 부분을 캐싱해서 나중에 또 호출 될 때 쓰는 방식
- 캐쉬 메모리 같은 녀석
4. 가비지 컬렉터
- 자꾸 인스턴스 만들어서 메모리 차지하게 하면 리소스만 잡아먹음
- 메모리를 자동으로 관리해서 안 쓰는 부분 정리하는 쓰레기 청소부
- JDK와 JRE의 차이
- JDK 안에 JRE가 있음
1) JDK
- Java Development Kit
- 자바 개발용 도구 모음
- 자바로 만들어진 프로그램 실행시 필요
2) JRE
- Java Runtime Environment
- 자바 실행 시 필요한 라이브러리 있음
- 자바로 개발은 안 되지만 실행은 됨!
- JRE만 있어도 실행은 가능 ! 다만 개발은 불가
참고
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rbdi3222&logNo=220594436564
728x90
'Programing > Java' 카테고리의 다른 글
[Java] 동작 파라미터화 (0) | 2023.08.05 |
---|---|
[Java] 자바 무슨 일이 일어나고 있는가? (0) | 2023.08.05 |
CH10 날짜와 시간 & 형식화 (0) | 2021.05.16 |
ch9 java api (0) | 2021.05.09 |
ch 8 알고리즘 (0) | 2021.04.18 |