728x90
정리하는 겸 유튜브 백기선님 자바 스터디를 보며 다시 상기시키는 공부를 진행한다.
이미 정식 스터디는 끝났지만 늦게 시작하여 블로그에 따로 기록하려고 한다.
📢 1주차
- JVM이란 무엇인가
- 컴파일 하는 방법
- 실행하는 방법
- 바이트코드란 무엇인가
- JIT 컴파일러란 무엇이며 어떻게 동작하는지
- JVM 구성 요소
- JDK와 JRE의 차이
📌 JVM이란?
JVM이란 Java Virtual Machine(자바 가상 머신) 의 줄임말
일반적인 프로그램은 OS위에서 실행되는데 자바 프로그램 같은 경우에는
OS위의 JVM에서 실행이 된다.
JVM위에서 실행 시키는 이유는 OS에 상관없이 실행시키기 위해서이다.
각기 다른 운영체제에서 실행시키는 이점은 정말 좋다.
📌 JVM의 역할
- 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것이다.
- JVM은 자바와 OS사이에서 중개자 역할을 수행하여 OS에 독립적인 플랫폼을 갖게 해준다.
- OS의 메모리 영역에 직접 접근하지 않고 JVM을 통해 간접적으로 접근한다.
- JVM은 프로그램 메모리 관리를 알아서 해준다. (GC 자동)
📌 자바 실행과정
- 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다. 이 메모리를 할당받고 용도에 맞게 여러 영역으로 나누어 관리한다.
- 자바
컴파일러(javac)
가 자바소스코드(.java)
를 읽어들여자바 바이트코드(.class)
로 변환시킨다. - 클래스 로더를 통해 class파일들을
JVM
으로 로딩한다. - 로딩된 class 파일들은 Execution engine을 통해 해석된다.
- 해석된
바이트코드(.class)
는 Runtime Data Areas에 배치되고 수행이 이뤄지게 되는데 여기서 가비지 컬렉터 같은 관리 작업도 수행한다.
{: .text-center}
📌 자바 바이트코드
자바 바이트코드(.class)
란 JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미한다.
자바 컴파일러(javac)에 의해 변환되는 코드의 명령어 크기가 1바이트
라서 자바 바이트코드라고 불리고 있다.
📌 JIT 컴파일러란?
JIT(Just-In-Time) 컴파일러는 바이트코드를 CPU로 직접 보낼 수 있는 명령어로 바꾸는 프로그램이다.
일반적으로 컴파일러는 개발자와 최종 사용자를 위한 애플리케이션의 속도를 결정하는데 있어 핵심이다.
JIT 컴파일러는 성능 최적화를 위해 애플리케이션 런타임을 향상시킬 수 있다.
다른 컴파일러와는 다르게 JIT 컴파일러의 특성은 프로그램이 시작되고 코드를 컴파일 한 후에 JIT컴파일러가 실행된다.
📌 JVM 구성요소
- 인터프리터
바이트코드(.class)
를 해당 하드웨어의 환경에 맞게 변환을 하여 운영체제에 종속적이지 않은 상태를 만들어줌.
- 클래스 로더
- 컴파일러가 SSD 내부에 만든 바이트코드 파일을 읽는다.
- 실행엔진(JIT 컴파일러 포함)
- 로더에 존재하는 클래스를 읽으면서 static이 붙은것을 판단한다.
- static이 붙은 클래스가 없다면 그대로 종료
- GC(Garbage Collector)
- 더 이상 사용하지 않는 메모리를 자동으로 회수
📌 JRE, JDK 차이
JRE(Java Runtime Environment) : 컴파일된 자바 프로그램을 실행시킬 수 있는 자바 환경
- JRE는 JVM이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있다.
- JRE는 JVM의 실행환경을 구현했다고 할 수 있다.
- 자바 프로그램을
실행
시키기 위해선 JRE를 반드시 설치해야 한다. - 자바
프로그래밍
을 하기 위해선 JDK가 필요하다.
JDK(Java Development Kit) : 자바 프로그래밍에 필요한 컴파일러 등등 포함
- 개발을 위해 필요한 도구들을 포함한다.
- JDK를 설치하면 JRE도 같이 설치가 된다.
JDK = JRE + @
728x90
'Java' 카테고리의 다른 글
연산자 (0) | 2022.08.06 |
---|---|
[Java] 데이터타입, 변수, 배열 (0) | 2022.08.06 |
Effective Java 4장 요약 (0) | 2022.08.06 |
TDD Clean Code with Java 12기 3주차 (0) | 2022.08.06 |