-
[TIL] JVM에 대하여TIL(Today I Learned) 2022. 11. 30. 20:55
*20221130의 회고
오늘 오전에 진행된 JVM에 대한 특강 내용을 정리해보려 한다.
- 운영체제 : 하드웨어를(하드웨어의 자원을) 관리하는 시스템 소프트 웨어, MS - windows 계열, Linux, Mac OS, Unix 등
- 일반적으로 컴퓨터에서 실행되는 소프트웨어는 운영 체제에 종속적임
- 윈도우에서 C로 작성된 프로그램은 윈도우에서만 실행됨. Linux환경에서는 실행 불가.
- 자바는 환경에 상관 없이, 한번 작성된 프로그램은 어디서든지 실행 가능 -> JVM 덕분에
- 자바 코드가 실행되는 과정
- 자바 문법으로 작성한 .java 파일 -> 자바 컴파일러 -> .class 파일로 변환(바이트 코드, JVM이 인식할 수 있는 코드) -> JVM -> 바이너리 코드(운영체제가 인식할 수 있는 코드) -> 운영체제 -> 하드웨어
- JDK (Java Development Kit)
- Java, JavaC(자바컴파일러), JacaDoc, Jar 등이 포함되어 있는 자바 개발 키트
- JRE를 포함하고 있다.
- 프로그램을 생성, 실행, 컴파일 할 수 있다.
- JRE (Java Runtime Environment)
- 자바에서 제공되는 기본 라이브러리들이 있다. (java.util, java.lang ...)
- JVM을 포함하고 있다.
- 컴파일된 Java 프로그램을 실행하는데 필요한 패키지
- JVM(Java Virtual Machine : 자바 가상 머신)
- 소프트웨어로 구성된 에뮬레이터(Emulator : 대리실행기)
- 운영체제와 자바 프로그램 사이에서 자바 프로그램이 실행될 수 있는 환경 제공
- 자바 프로그램을 운영체제가 이해할 수 있는 형식으로 변환하여 운영 체제에 전달
- 따라서 JVM만 있다면, 어디서든 자바 프로그램을 실행할 수 있음 (JVM은 운영체제에 종속적)
- Write Once, Run Anywhere
- JVM 구조
- 클래스 로더 서브시스템
- .class에서 바이트코드를 읽고 메모리에 저장
- 클래스를 처음으로 참조할 때, 해당 클래스를 로드하고 링크함
- 링크를 통해 배치 작업을 수행
- 런타임 시에 동적으로 클래스를 로드
- Runtime Data Area
- JVM의 메모리 영역
- Method Area, Heap, Stack, PC Registers, Native Internal Threads(Native Method Stack)로 구성됨
- 힙 영역에는 객체를 저장
- 스택 영역에는 스레드 마다 런타임 스택을 만들고, 스택 프레임이라 부르는 블록을 쌓음
- 실행 엔진
- JIT(Just In Time) 컴파일러 : 인터프리터 방식으로 실행하다가 적절한 시점에서 기계어로 변환, 이후부터는 기계어로 직접 실행 -> 반복되는 코드를 재사용해서 속도를 높임
- GC(Garbage Collector) : 더이상 참조되지 않는 인스턴스를 찾아 메모리에서 삭제
- JNI(Java Native Interface)
- Native Method Libraries와 상호작용하며 실행 엔진에 필요한 것들을 제공해준다.
- C, C++, 어셈블리로 작성된 함수를 사용할 수 있는 방법 제공
- 자바에서 기본으로 제공되는 메서드에 native키워드가 붙은 것들
- 자바 외의 언어로 작성된 네이티브 코드를 위한 메모리 영역
- 클래스 로더 서브시스템
이제 Runtime Data Area인 메모리 영역에서, 다시 영역이 세분화 되는데, 그부분에 대해서는 조금 더 자세히 공부한 후에 정리하도록 해야겠다. 자바에 대해서 좀 더 깊게 알아가는 과정을 거치니 뭔가 자바에 대한 애정이 생기는 것 같다ㅋㅋ... 면접때 이런 부분이 단골질문이라고 하니 내일도 자바심화 수업 열심히 듣고 정리해야 겠다! 내일은 오늘보다 더 집중하기!!!
'TIL(Today I Learned)' 카테고리의 다른 글
[TIL] JUnit Thread (0) 2022.12.02 [TIL] 자바의 Interface, Stream, Optional 등등 (0) 2022.12.01 [TIL] 두번째 프로젝트를 마무리 지으며... + KPT회고 (0) 2022.11.29 [TIL] 은행 서비스 프로젝트의 마무리 단계 (0) 2022.11.28 [TIL] 은행프로그램 구현 2일차, CS특강(HTTP, HTTPS) (0) 2022.11.25