Skip to content

java 실행 구조 및 JVM,JRE,JDK 차이

java의 실행 원리

java는 컴파일 언어로서 실행하기 전 컴파일과정을 거쳐 실행 가능한 bytecode로 변환된다. 이 bytecode를 실행할 때 각 OS의 호환성을 만족하는 JVM(java virtual machine)을 통해 기계어 코드로 변환되어 코드가 실행되는 구조이다.

Image title

그림 1 - 자바 실행 원리

java 파일을 컴파일 하는 명령어

.java 파일을 아래와 같은 명령어로 컴파일하게 되면, .class 파일이 생성된다.

java 컴파일
javac [.java 파일 경로]

.class 파일이 생성되면 실행이 가능한 상태라고 보면 되는데, .class파일을 실행 하려면 아래와 같은 명령어를 사용하여 실행하면 된다. .class 확장자가 아닌 클래스명으로 실행해야 한다.

java 실행
java [클래스 ]

그렇지 않으면 아래와 같은 오류가 발생하게 된다.

java 실행 오류
ubuntu@ubuntu:~/learning/javaproject/HelloWorld/bin/com/fromitive/MyFirstPackage$ java MultiplicationTable.class
Error: Could not find or load main class MultiplicationTable.class
Caused by: java.lang.ClassNotFoundException: MultiplicationTable.class

java 파일 단독 실행 시 주의사항

java 파일 단독으로 실행 할 때는 실행하고자 하는 class 안에 public static void main(string[] args)가 있어야 한다. 컴파일은 완료가 되나 자바가 코드를 어디서 부터 실행해야 하는지 확인을 할 수 가 없어 실행 오류가 나타나게 된다.

wrong-main.java
1
2
3
public class Planet {

}
output
ubuntu@ubuntu:~/learning/javaproject/practice$ javac Planet.java # 컴파일은 가능확인
ubuntu@ubuntu:~/learning/javaproject/practice$ java Planet
Error: Main method not found in class Planet, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

public static void main(string[] args) 키워드에 args를 제외하고, 다른 키워드가 나타났을 때 또한, 오류가 발생하여 실행을 할 수 없다.

wrong-main2.java
1
2
3
4
5
class Planet {
    private static void main(String[] args) { // public -> private 변경
        System.out.println("Hello World!");
    }
}
output2
ubuntu@ubuntu:~/learning/javaproject/practice$ javac Planet.java
ubuntu@ubuntu:~/learning/javaproject/practice$ java Planet
Error: Main method not found in class Planet, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

JVM, JDK, JRM의 차이

JVM은 Java Virtual Machine으로써 컴파일된 .class 파일을 기계어 코드로 변환해 실행시켜주는 실행기이다.

그렇다면 JVM만 있으면, java 코드가 실행되나? 그건 아니다. JRE(Java Runtime Environment)라는 녀석이 설치가 되어야 온전하게 자바가 실행된다. 왜냐하면 우리가 보통 사용하는 System.out.println()같은 기본적으로 제공되는 함수들의 정보는 JRE에 있기 때문이다. 만약, java를 실행할 때 필요한 최소한의 환경(Production)을 설정하고 싶으면 JRE라는 키워드를 떠올려주면 된다.

마지막으로 JDK가 있다. JDK의 약자는 Java Development Kit의 약자이고, java 프로그램을 디버깅할 수 있게 도와주는 도구까지 포함되어 있다.

따라서 정리하자면 아래의 그림과 같다.

Image title

그림 2 - JDK JRE JVM


Comments