[Java] 4. 자바 실행 과정


자바의 실행 과정을 위한 포스팅이다.


1. 자바 실행 과정


이 포스팅을 읽기 전에 가볍게 앞선 포스팅을 보고 오면 좋을 듯 합니다.


1-1. 자바 코드

Helloworld.java

public class HelloWorld {
	
	public static void main (String[] agrs) {
		System.out.println("Hello World");
	}

}


1-2. 컴파일(Compile)

사람이 만든 코드를 컴파일러(javac.exe)가 컴퓨터(JVM)가 이해할 수 있는 기계어로 변환해주는 과정을 컴파일이라고 부른다.

javac Helloworld.java


1-3. 실행(Execute)

컴파일을 통해 자바 바이트 코드 변환 된 컴파일 된 helloworld.class 파일이 생성된다.
컴파일된 파일을 실행(JRE에 있는 java)시킨다.

java Helloworld

전체적인 흐름은 코드를 자바가상머신이 이해하기 쉽게 바이트코드로 컴파일 한 후 어플리케이션을 실행하는 흐름이다.



그래서 JAVA는 컴파일언어이고, javascript나 HTML, python 등을 인터프리터언어라고 한다.

실행 방식에 따라 컴파일어어와 인터프리터언어의 제일 이해하기 쉬운건 개발하면서 실행할 때 에러 발생 시점을 생각하면 이해가 빠르다. 자바 실행 과정에 대한 포스팅이기에 패스…


2. 자바 런타임 환경(JRE)

말 그대로 자바 런타임(실행) 환경이다. 자바가상머신에서 자바 애플리케이션이 실행되게 끔 로드하고 환경을 구성하는 역할을 한다.

자바 런타임 환경의 구성이다.

  • 자바 클래스 로더(Java class loader)
  • 자바 클래스 라이브러리(Java class libraries)
  • 자바 가상 머신(Java Virtual Machine)

cf) 클래스 로더는 정상적으로 컴파일 된 클래스(.class)들과 라이브러리(lib)를 로드해 코어 자바 클래스 라이브러리(JVM)에 연결하는 역할


컴파일 과정 기준으로 그림으로 정리한 내용이다. 시스템적인 JVM에 대한 더 자세한 내용이나 도식화 된 이미지는 다른 포스팅이 더 설명이 잘 되어 있습니다.

jdk-compile_2


그리고 여기서 자연스럽게 또 컴파일에러와 런타임에러의 차이점에 대해서 떠오른다(?).

간단하게 설명하면 이클립스(개발 툴)에서 개발하면서 코드에 문법상 빨간표시 에러가 뜨는게 컴파일에러이고, 서버를 구동하거나 어플리케이션을 실행할 때 발생하는 에러는 런타임에러이다.

다음 글은 갑자기 떠오른 컴파일에러와 런타임에러에 대한 차이점에 대해 포스팅 할 예정이다.

학과수업이나 기초적인 이론공부를 개발자(전공자)들은 당연한 내용일 수도 있으나, 아닌 개발자들은 뒤늦게 알거나 접하는 내용 일 수도 있기에.. 예전에 경험으로 인한 개인적인 생각이다.


참고:
http://www.itworld.co.kr/t/61023/개발자/110768
http://www.incodom.kr - JVM메모리구조
https://javabeat.net - jdk, jre, jvm 차이