일반적으로 프로그램은 다음과 같은 순서로 개발한다.
test.c 를 컴파일 하면 test.exe 라는 컴퓨터에서 바로 실행할 수 있는 파일이 생성된다.
test.java 를 컴파일하면 test.class 라는 파일이 생성된다.
✔ 컴파일 했을 때 차이점
C언어는 실행파일이 컴퓨터에서 바로 실행시킬 수 있는 기계어 코드
Java는 바이트 코드바이트코드 : 기계어로 변환하기 전 중간단계의 코드
컴퓨터에서 실행하기 위해서는 바이트 코드를 기계어 코드로 변환하는 작업이 필요하다.
코드를 변환함과 동시에 프로그램 실행에 관련된 모든 작업은
자바 가상머신(JVM, Java Virtual Machine) 에서 담당한다.
JVM은 Java 실행 파일이 각 컴퓨터의 운영체제에 맞게 실행될 수 있도록 기계어 코드로 변환 작업을 한 후 Java 실행 파일을 구동한다.
이러한 실행 구조의 큰 장점은, 실행 파일이 실행되는 컴퓨터의 운영체제가 달라져도 추가적인 작업을 할 필요가 없다는 것이다.
그 이유는, 운영체제와 실행 파일 사이에 JVM이 있어서 JVM이 각 운영체제에서 실행할 수 있도록 처리하기 때문이다.
Java 프로그램이 실행 될 때, JVM은 항상 일정한 처리과정을 거친다.
클래스 로더 (Class Loader)
실행에 필요한 모든 파일 (*.class)을 찾아준다.
바이트 코드 검증 (Byte code verifier)
클래스 로더가 모든 실행파일(*.class)를 준비한 후, 해당 파일의 코드가 올바른지 확인한다.
실행 시점에 코드의 유효성을 검증하는 과정을 거치므로 보안에 강하다.
JIT 컴파일러 (Just-In-Time compiler)
바이트 코드를 기계어 코드로 변환하는 기능