21년 1월 9일
한 일
-
JVM의 메모리 구조와 Java Application이 실행되는 과정을 공부하였다.
-
제가 이해한 내용은 다음과 같은데, 혹시 잘못된 점이 있다면 isaac56@naver.com 으로 메일 주시면 감사하겠습니다.
-
Java 컴파일러(Javac)가 java소스파일을 class 파일(자바 바이트 코드)로 컴파일한다.
-
JRE가 main 메소드가 있는 클래스 파일을 찾는다.
-
찾았다면 JVM의 Class loader가 해당 클래스에 대한 정보를 Runtime Data Area 중 Method영역에 적재한다.
-
JVM의 Excecution Engine이 main 메소드에 해당하는 코드를 읽어 Stack Frame을 구성하고, PC Register영역에 현재 실행중인 코드 주소를 저장한다.
(Excecution Engine은 인터프리터(Interpreter)방식 또는 JIT(Just-In-Time) 컴파일러 방식으로 코드를 실행한다.)
- 코드가 실행되며 어떤 객체의 인스턴스가 생성된다면 Heap영역에 생성되고 Stack Frame에는 해당 인스턴스에 대한 참조값이 저장된다.
- PC Register에서 실행중인 코드 주소가 변경되가며, 해당하는 코드를 Execution Engine이 실행하는 방식으로 어플리케이션이 실행된다.
-
잘못한 것
- 주말이라 마음이 느슨해졌고, 본가에 방문하다 보니 좀 많이 놀게 되었다.
- 오늘도 알고리즘 공부를 하지 않았다.
잘한 것
- 프로그래머스 알고리즘 문제를 풀다가 기본이 부족하다는 것을 깨닫고 JVM에서 Java Application을 실행하는 과정을 찾아 공부하였다.
느낌
- 갑자기 JVM 구조를 공부하고 포스팅한 흐름은 다음과 같다.
- 알고리즘 문제를 Priority Queue를 이용해 풀려고 했다.
- Priority Queue사용법을 테스트하다 보니 static메소드인 main에서 local inner class를 사용할 수 없다는 점을 깨달았다.
- 왜 그럴까 찾아보다가, 애초에 Java Application이 실행되는 과정과 JVM의 구조도 모른다는 점을 알게 되었다.
- 기초부터 공부하려고 JVM구조를 공부 후 포스팅하였다.
- 항상 찜찜한 기분이었던 JVM 구조를 알게되어서 다소 개운한 느낌이다.
- 주말에는 좀 널널히 공부하려고 마음먹긴 했지만 예상보다 너무 많이 놀아서 죄책김이 든다.
할 일
- JVM의 구조를 알게 되었으니, Nested Class의 내용을 찾아서 정리해보자.
- 내일은 꼭 알고리즘 2문제를 푼 후, 자바의정석을 읽어보려고 한다.