본문 바로가기
Java/Java 궁금했던 개념들

[Java] 구동방식 정리

by Dev dreamer 2023. 2. 11.

eclipse 나 inteli J 같은 통합 구동 프로그렘을 사용하는 것이 아니라

 

터미날 등에서 자바의 파일을 실행시키고자 할때 컴파일 명령어를 알아야 한다.

 

 

 

자바의 파일의 폴더에는 bin 폴더와 src 폴더가 있는데

 

src 폴더에는 소스파일이 들어있으며

bin 폴더에는 실행이 가능한 파일이 들어있다.

 

여기서 bin에 들어있다는 자바의 실행파일은 확장자가 .exe 로 되어있는 실행파일이 아니다.

 

실행 파일이 아니기 때문에 더블클릭해서 실행하는건 불가능하다.

 

 

자바에서 만든 파일은 byte code 라고 실행시킬 수 있는 직전의 파일 정도라고 생각하면 된다.

 

바로 실행할 수 없는 파일이기 때문에 별도로 실행파일을 실행해주는 엔진이 필요하고 이것이 바로

 

JVM (Java virtual machine)이다.

가상 머신에 의해서 클래스파일을 메모리에 로딩을 하고 메모리 로딩을 함과 동시에 자기 운영체제플랫폼에 맞게

 

리소스를 다시한번 재 컴파일 해서 실행을 해준다( 내부적으로 두번정도의 컴파일이 일어난다.)

 

만약 java 통합개발 환경을 사용하지 않을경우 터미날에서 src 위치에 있는 javac.exe 파일을 찾아서 실행시킬것이다.

 

 

 

src 위치에서 컴파일 명령어를 통해 컴파일을 하고 이렇게 컴파일이 되면

 

bin 폴더에 클래스 파일을 만들어 준다.

 

그러면 bin 폴더 위치에서 java의 실행을 시키는 명령어를 통해서 파일을 실행 시킬 수 있다. (

 

 

실행은 JVM의 시스템에 의해서 실행이 된다.

 

 

우리가 사용할 수 있는 환경은 

Window OS, Mac OS , Linux OS 등 여러가지 운영체제가 있을 수 있다.

 

Java 는 이러한 운영체제 위에 jdk를 설치하는데

 

각자의 운영체제 위에 jdk 를 설치하면 운영체제 메모리 위에 JVM이라는 프로세서가 메모리 위에 실행중일 것이다.

 

💡 그렇다면 JVM 은 언제 동작을 할까?


 

위와 같은 만들어진 클래스 위에 실행 명령어가 왔을 때 행동을 시작한다.

 

명령어를 치면 메모리 위에 있는 JVM을 호출하게 된다.

 

JVM이 콜이 오면 Bin 폴더 안에 1차 컴파일 된 byte코드를 읽어서 구동을 해야 한다.

 

그럼 JVM이 구동을 하기 위해서 구동될 OS 스타일에맞게 재 컴파일(2차 컴파일)을 한다.

 

나 같은경우 Window OS 에 맞게 실행코드를 2차 컴파일 해주는 것이다.

 

JVM이 바이트 코드를 실행 가능한 코드로 메모리에 올려서 실행코드를 메모리에서 실행해준다.

 

 

이러한 가상 머신에 의해서 구동되는 것이 Java 이다.

 

 

 

💡 왜 자바는 가상 머신에 의해서 구동하게 만들었을까?


우리가 어떠한 프로그램을 만들었을 때

이 프로그램이 어느 OS에서 실행 될 지 모른다.

 

이 자바 프로그램을 특정 운영체제에 FIX 해서 컴파일 하면 안된다.

 

왜냐면 자바는 어떤 운영체제에 상관없이  OS에 구동하도록 Java 를 만들고자 했다.

 

독립적으로 하려면 특정 운영체제에 fix(종속)되게 만들려고 하지 않았다.

 

 

그래서 java 는 중간어 코드은 byte 코드로 우선 만들어 주고 실행이라는 명령어가 왔을 때

 

각각의 OS에 맞게 실행 가능한 파일로 JVM이라는 가상머신이 만들어 준다.

 

이러한 JVM이 있으면 어떠한 운영체제에 영향을 받지 않고 상관없이 독립적으로 구동을 시킬 수 있다.

 

그렇기 때문에 바로 코드를 실행시키는 다른 언어에 비해서 느리다.

 

또한 Java 파일을 실행시키려면 JVM이 있어야 실행이 가능하다 라는 불편함이 있다.

 

 

 

 

 

 

 

 

자바 관련 핵심 정리 블로그(여러번 읽어보기)

https://code-run.tistory.com/61#2.3.4.%20Garbage%20Collector%C2%A0

 

자바 기초를 더 단단하게 하기 위해 선택한 강의입니다.

출처: Java TPC (생각하고, 표현하고, 코딩하고) 대시보드 - 인프런 | 강의 (inflearn.com)

댓글