2. 프로그램이 실행되는 과정
작성한 프로그램이 실행되기 위한 일반적인 단계는 다음과 같음
- 소스 코드 작성(ex. Main.java) 및 컴파일(Main.class)
- 디스크에 Main.class 파일 저장
- JVM은 디스크에 저장된 Main.class를 메모리 상에 로딩, JIT 컴파일러 등을 통해 기계어로 변환
- CPU는 실행 중인 JVM 프로세스 내 기계 명령어(ex. 01001100..)들을 한 줄씩 실행
1. 각 세부 단계
- 소스코드 작성(ex. Main.java) 및 컴파일
terminal
javac Main.java- Main.class 파일 실행
terminal
java Main이처럼 작성한 프로그램은 실행 가능한 파일의 형태로 디스크에 저장되어 있다가 하나의 프로세스라는 형태로 메모리에 적재되어 실행됨
Note
프로세스는 기계 명령어들의 모음
CPU는 메모리상에 적재된 기계 명령어만 실행할 수 있는 하드웨어로, 프로세스는 결국 기계 명령어들의 모음이라고 볼 수 있음
브라우저가 .jsx와 같은 JSX문법을 이해할 수 없고, html, css, js만 이해하듯이 CPU는 자바 문법으로 작성된 코드를 이해할 수 없음
간단한 실습
실행 중인 프로세스 확인하기(on Windows)
terminal
tasklist | findstr java
# 실행 결과
java.exe 7692 Console 1 34,060 KMac/Linux
terminal
ps | grep java간단하게 바이트 코드로 확인하기
terminal
javap -c Main
# 실행 결과
Compiled from "Main.java"
public class Main {
public Main();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: invokestatic #7 // Method a:()V
3: invokestatic #12 // Method b:()V
6: invokestatic #15 // Method c:()V
9: return
static void a();
Code:
0: getstatic #18 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #24 // String a() started
5: invokevirtual #26 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: goto 8
# ...Last updated on