Skip to Content
Suffering builds character
아카이브13.프로세스,스레드특징프로세스와 스레드2. 프로그램이 실행되는 과정

2. 프로그램이 실행되는 과정

작성한 프로그램이 실행되기 위한 일반적인 단계는 다음과 같음

  1. 소스 코드 작성(ex. Main.java) 및 컴파일(Main.class)
  2. 디스크에 Main.class 파일 저장
  3. JVM은 디스크에 저장된 Main.class를 메모리 상에 로딩, JIT 컴파일러 등을 통해 기계어로 변환
  4. CPU는 실행 중인 JVM 프로세스 내 기계 명령어(ex. 01001100..)들을 한 줄씩 실행

1. 각 세부 단계

  1. 소스코드 작성(ex. Main.java) 및 컴파일
terminal
javac Main.java
  1. 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 K

Mac/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