자바의 가장 큰 특징 중 하나는 플랫폼에 독립적으로 실행이 가능하다는 것입니다.
이것은 CPU 또는 운영체제에 상관없이 코드를 실행시킬 수 있다는 의미인데요.
이를 위해서는 자바의 동작 방식에 대한 이해가 필요합니다.
자바의 기본동작
자바는 기본적으로 JVM 위에서 동작합니다. JVM이란 Java Virtual Machine의 약자로 이 JVM이 실질적으로 기계어로 번역 후 컴퓨터에게 전달시켜주면 컴퓨터가 프로그램을 실행 시킬 수 있습니다.
각 OS 종류에 맞는 자바를 설치하면, 함께 JVM은 OS에 맞게 설치 됩니다.
자바코드 실행 과정
자바코드의 실행 과정은 아래와 같습니다.
컴파일 순서
먼저 작성한 java 코드를 실행시키면 javac 컴파일러가 바이트코드로 컴파일합니다. 컴파일 된 결과로 작성한 java파일과 같은 이름으로 클래스(.class) 파일이 생성이 됩니다.
만약 이렇게 javac에서 컴파일 하는 과정에서 에러를 발견하는 경우 컴파일이 되지 않고 돌아갑니다. 컴파일 단계에서 다시 돌아가는 것은 개발자에게 오류를 미리 알려줄 수 있기 때문에 매우 큰 장점입니다.
다음으로 이 변환된 바이트코드를 런타임환경의 JVM에게 전달합니다.
JVM은 내부의 클래스로더에 전달하고 클래스로더는 클래스 파일을 해석하여 필요한 클래스들을 로딩하여 JVM 메모리영역에 올립니다.
이후 실행엔진(Execution Engine)에서는 메모리에 적재된 바이트코드들을 인터프리터를 이용해 해석합니다.
인터프리터 방식은 한 줄씩 코드를 해석하여 기계어로 변환하는 방식입니다. 이 과정에서 특정 코드가 자주 실행된다면 이 부분을 JIT 컴파일러가 가로챕니다.
JIT(Just-In-Time) 컴파일러에서는 이름에서와 같이 바이너리 코드를 실행하는 와중에 컴파일하여 기계어로 변환하게 됩니다. 컴파일 방식은 코드 전체를 한 번에 실행하는 방식으로 실행상의 이점을 볼 수 있습니다. 이렇게 자주 사용되는 부분을 JIT 컴파일러에서 컴파일 해논 것을 캐싱해 놓는다고 합니다.
이후 다시 원래의 과정인 인터프리팅을 하며 캐싱된 부분이 필요하면 JIT 컴파일러로 캐싱된 코드를 가져다가 불러쓰며 기계어로의 변환을 마칩니다.
변환이 완료되면 OS로 전달하고, 그림에는 나와있지 않지만 가비지 컬렉터를 통해 필요없는 파일들을 메모리에서 지웁니다.
결론
OS에 맞는 적절한 Java를 설치한다면 환경에 맞는 JVM이 OS 환경에 맞게 코드를 변환해주는 것이 큰 장점입니다.
그렇기 때문에 JVM은 OS환경에 종속적이라는 특징이 있습니다.
따라서, Java를 사용하면 개발자는 사용환경을 신경 쓰지 않고 도메인 로직에 구현에 집중 할 수 있습니다.
참고자료
'Language > JAVA' 카테고리의 다른 글
String 클래스 파고들기 - 객체의 특성 및 더하기 연산의 버전별 차이 (0) | 2024.04.09 |
---|---|
String 클래스 파고들기 - String 생성과 byte 변환시 주의점 (0) | 2024.04.05 |
자바에서의 Call by value 와 Call by reference (1) | 2024.03.06 |
기본형 타입과 참조형 타입 (0) | 2023.02.21 |
추상 클래스 정리 (0) | 2022.10.24 |
남에게 설명할 때 비로소 자신의 지식이 된다.
포스팅이 도움되셨다면 하트❤️ 또는 구독👍🏻 부탁드립니다!! 잘못된 정보가 있다면 댓글로 알려주세요.