21년 1월 9일

한 일

  • JVM의 메모리 구조와 Java Application이 실행되는 과정을 공부하였다.

  • 제가 이해한 내용은 다음과 같은데, 혹시 잘못된 점이 있다면 isaac56@naver.com 으로 메일 주시면 감사하겠습니다.

    1. Java 컴파일러(Javac)가 java소스파일을 class 파일(자바 바이트 코드)로 컴파일한다.

    2. JRE가 main 메소드가 있는 클래스 파일을 찾는다.

    3. 찾았다면 JVM의 Class loader가 해당 클래스에 대한 정보를 Runtime Data Area 중 Method영역에 적재한다.

    4. JVM의 Excecution Engine이 main 메소드에 해당하는 코드를 읽어 Stack Frame을 구성하고, PC Register영역에 현재 실행중인 코드 주소를 저장한다.

      (Excecution Engine은 인터프리터(Interpreter)방식 또는 JIT(Just-In-Time) 컴파일러 방식으로 코드를 실행한다.)

    5. 코드가 실행되며 어떤 객체의 인스턴스가 생성된다면 Heap영역에 생성되고 Stack Frame에는 해당 인스턴스에 대한 참조값이 저장된다.
    6. PC Register에서 실행중인 코드 주소가 변경되가며, 해당하는 코드를 Execution Engine이 실행하는 방식으로 어플리케이션이 실행된다.

잘못한 것

  • 주말이라 마음이 느슨해졌고, 본가에 방문하다 보니 좀 많이 놀게 되었다.
  • 오늘도 알고리즘 공부를 하지 않았다.

잘한 것

  • 프로그래머스 알고리즘 문제를 풀다가 기본이 부족하다는 것을 깨닫고 JVM에서 Java Application을 실행하는 과정을 찾아 공부하였다.

느낌

  • 갑자기 JVM 구조를 공부하고 포스팅한 흐름은 다음과 같다.
    1. 알고리즘 문제를 Priority Queue를 이용해 풀려고 했다.
    2. Priority Queue사용법을 테스트하다 보니 static메소드인 main에서 local inner class를 사용할 수 없다는 점을 깨달았다.
    3. 왜 그럴까 찾아보다가, 애초에 Java Application이 실행되는 과정과 JVM의 구조도 모른다는 점을 알게 되었다.
    4. 기초부터 공부하려고 JVM구조를 공부 후 포스팅하였다.

  • 항상 찜찜한 기분이었던 JVM 구조를 알게되어서 다소 개운한 느낌이다.
  • 주말에는 좀 널널히 공부하려고 마음먹긴 했지만 예상보다 너무 많이 놀아서 죄책김이 든다.

할 일

  • JVM의 구조를 알게 되었으니, Nested Class의 내용을 찾아서 정리해보자.
  • 내일은 꼭 알고리즘 2문제를 푼 후, 자바의정석을 읽어보려고 한다.