들어가기에 앞서..
나는 java를 사용하면서 "java는 어떻게 돌아가는 거지?" 문뜩 생각이 들었다.
6개월 동안 java를 사용했지만 그 생각에 스스로 확답을 주지 못했고,
java 구동원리에 대해 정확히 이해하고 쓰자는 생각으로 정리를 하기로 하였다.
java 구동원리
일단, 생활코딩의 java 구동원리의 대한 영상을 시청하면서 정리를 해보았다.
우리는 컴퓨터에 java를 사용하기 위해 jdk를 다운로드하게 되는데 jdk안에는 여러 가지 프로그램이 있지만 가장 핵심 프로그램인 Java Virtual Machine이 우리의 컴퓨터에 깔리게 된다.
우리는 java를 사용할 때 java확장자에 java 언어를 사용한 소스코드를 작성하게 된다.
소스코드를 작성하고 저장을 눌렀을 때 컴파일이 되어 소스코드를 컴파일한 class파일이 생성된다.
그리고 그 소스코드를 run 했을 때 Java Virtual Machine이 class파일을 읽어 들여 우리의 컴퓨터에 실행시키게 된다.
더 자세하게 보면..
자바 클래스 파일을 작성 후 저장(build)을 하게 되면 자바 컴파일러(javac)가 인터프리터 방식으로 .java 파일을 한 줄씩 읽으면서 .class 파일로 변환한다. 즉, 자바 소스코드는 바이트 코드(반기계어)로 변환된다.
이때 변환된 .class파일은 JVM의 클래스 로더로(Class Loader) 동적로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 컴퓨터가 읽을 수 있는 기계어로 변환과 함께 런타임 데이터 영역(Runtime Data area), 즉 JVM의 메모리에 올리게 된다.
여기서 특징적인 부분은 java는 동적로드다. 즉, 컴파일타임이 아니라 런타임에 class를 처음으로 참조할 때 해당 class를 로드하고 링크하는 특징이 있다.
JVM의 장점
java의 class 파일들은 JVM 위에서 동작하기 때문에 어떤 운영체제에서도 실행 가능하다 - 독립성
마무리..
java 구동원리에 대해 공부하면서 JVM이 java의 핵심기술 처럼 느껴졌다. 생각보다 많은 내용들이 존재했고, 궁금한 것들이 많이 생겼는데
1. jdk 설치를 통해 여러 가지 프로그램중 JVM을 사용할 수 있게 되는데 JVM 외에 어떤 프로그램이 더 있는지?
2. JVM안에 존재하는 클래스 로더 및 실행엔진, 런타임 데이터 영역에 대해 더 자세하게 알아보고 싶어졌다.
'Language > Java' 카테고리의 다른 글
[Java] JVM Architecture (ClassLoader, Runtime Data Areas, Execution Engine) 정리 (0) | 2021.08.31 |
---|---|
[Java] JDK란 무엇인가? (0) | 2021.08.27 |
JAVA입문-8 (예외처리 Exception) (1) | 2021.03.05 |
JAVA입문-7 [인터페이스(interface)와 다른 형식의 클래스(class)] (0) | 2021.03.05 |
JAVA입문-6 (상속) (0) | 2021.02.27 |
댓글