Java 구동 방식
이클립스 환경
- 자바 소스 컴파일, 실행을 할 때 Command창을 통해서 컴파일이나 실행을 하지 않음
- IDE 통합 개발 도구(Eclipse)가 아니라 별도의 콘솔 창에서 컴파일을 한다 했을 경우에만 컴파일 명령을 알아두면 된다.
- src : 소스 파일이 들어 있다.(Java code)
- bin : 컴파일(copile)을 하게 되면 실행 가능한 클래스(.class) 파일이 이 곳에 만들어 진다.
.class 파일
- 실행 가능한 파일
- byte code == class파일
클래스 파일이 왜 생성 되는지?
- Java는 exe와 같은 확장자가 아니다.
- exe가 아니기 때문에 이 실행 파일을 더블 클릭해서 실행 할 수 없다.
- 즉, Java 소스 파일을 컴파일 하면 실행 가능한 확장자인 exe가 아니라 class 파일인 byte code로 변환된다.
- byte code : 실행 하기 전 단계로 만들어 놓은 어정쩡한 코드
- 자바 같은 경우 이 클래스 파일이 바로 실행될 수 없는 파일이기 때문에 별도로 클래스 파일을 실행하는 엔진이 필요하다.
그 실행하는 엔진 = JVM(Java Virtual Machine)
JVM(Java Virtual Machine)
- 가상머신에 의해서 .class 파일을 메모리에 로딩
- 동시에 자신의 운영체제 플랫폼에 맞게 리소스들을 다시 재 컴파일 해서 실행을 해주는 Two Case 컴파일
- 내부적으로 두번의 컴파일이 일어난다.
예시) C:\Java\workspace\JavaTest\TPC01.java파일이 존재하고 있다고 가정
1차적으로 컴파일 수행
-> C:\Java\workspace\JavaTest javac.exe TPC01.java
에러가 없이 정상적으로 컴파일 되면 .class파일이 bin에 만들어 진다.
생성한 .class 파일을 다시 컴파일
-> C:\Java\workspace\JavaTest java.exe TPC01
java 명령어 : 클래스 이름만 적으면 TPC01을 실행하라는 명령이다.
- 이 부분을 JVM이 담당하고 있다는 뜻.
JVM을 사용하는 가장 큰 이유
- 운영체제가 여러개(매킨토시, 윈도우, 리눅스 등등)
- 해당 운영체제에 맞는 JDK를 설치한다.설치 하면?
-> 우리의 운영체제(OS)의 메모리 위에 Java Virtual machine이라는 가상 프로세서가 우리 눈에는 보이지 않지만 탑재되어 진 것.
- 처음에 이 JVM은 놀고 있다.
그럼 JVM은 언제 구동하는가?
- 이런 명령어가 왔을 때
-> C:\Java\workspace\JavaTest java.exe TPC01
java 명령어 : 클래스 이름만 적으면 TPC01을 실행하라는 명령이다.
- TPC01.java를 실행해주세요~ 누구한테? JVM에게 시스템 호출(Call)을 하는 것.
그렇게 JVM에 Call이 오면
-> TPC01 파일을 찾아
-> 1차 컴파일 된 byte code 생성
> 구동을 하려니 byte code(불완전한 코드) 실행할 수 없다
-> JVM이 자신의 운영체제에 맞도록 다시 한번 구동될 OS리소스에 맞게 재 컴파일
-> 즉, byte code를 JVM이 해당 운영체제에 맞게 실행 가능한 코드로 만들어
-> 실행 가능한 코드를 메모리에 올려주어 실행해준다.
왜 JVM에 의해 구동되도록 자바를 설계해놨을까?
예시)
- 우리가 어떤 프로그램을 만들었다.
-> 이 프로그램이 Window에서 실행할지, Linux에서 실행할지는 모른다..
-> 이 Java 프로그램을 특정 운영체제에 종속시켜 컴파일 하면 안 된다.
-> Java 파일은 어떤 운영 체제에 상관 없이 어디서든지 OS에 독립적으로 구동할 수 있도록 설계되었다. == 특정 운영체제에 종속시켜 컴파일 하면 안 된다는 뜻!
-> 그래서 자바는 컴파일을 하게 되면 중간 code 즉, byte code(.class)로 만들어 지는 것
-> 그 다음 실행이라는 명령이 왔을 때(java.exe) JVM들이 이 byte code(.class)들을 가져와서 자기 운영체제에 맞게 다시 한번 컴파일 해서 실행 가능하게 만들기 때문에 JVM이 있으면 어떠한 운영체제에도 상관 없이 자바는 구동이 된다.
자바에는 이런 개념이 있다.
어떤 운영체제에 상관 없이 독립적으로 구동을 시킬 수 있다.
-> JVM이라는 가상 머신이 구동하기 때문
다른 언어에 비해서 속도가 느릴 수 있다
- JVM에 의해서 실행되기 때문
- 누군가가 자바 프로그램을 주면 내 컴퓨터가 자바를 구동할 수 있는 JVM이 탑재가 되어 있어야 한다.
- 때문에 개발을 하지는 않지만 실행을 해봐야 하기 때문에 JRE라는 실행 환경을 설치해야 한다는 불편한 점도 있다.
'JAVA개념' 카테고리의 다른 글
Call by value, Call by reference (0) | 2022.01.27 |
---|---|
프로그래밍의 3대 요소(변수, 자료형, 할당) (0) | 2022.01.27 |
쓰레드의 실행제어 메서드 (0) | 2021.12.06 |
데몬 쓰레드(daemon thread) (0) | 2021.12.06 |
싱글 쓰레드, 멀티 쓰레드 (0) | 2021.12.06 |