*이 포스팅은 <신한투자증권 프로디지털아카데미> 김송아 강사님의 강의 기반으로 작성되었습니다.
개요
단순 코더가 아닌 프로그래머가 되기 위해서
빌드 과정부터 까보자.
자바 빌드 및 실행 과정은 아래 사진과 같다.


이 사진을 보고 송아샘은 짝꿍과 세줄 정리를 시키셨다!
우리의 답변
컴파일러가 코드의 문법을 검사, 토큰 단위로 분석하고 파악한 후 바이트코드(.class 파일)로 변환한다.(빌드)
생성된 바이트코드는 JVM의 Class Loader에 의해 메모리로 로딩되고, 로딩 → 링크 → 초기화 과정을 거친다.
이후 실행 단계에서 인터프리터와 JIT 컴파일러가 바이트코드를 실행하며, 가비지 컬렉터가 메모리를 자동으로 관리한다.
참고1.위의 용어들을 좀 풀어보자면 ~
로딩:메모리에 올림 (클래스)
링크: 우리가 쓴 소스코드만으로는 프로그램이 돌아가지 않기 떄문에=> 다른 필요한 것들과 합쳐줌 !
초기화(initialization): 클래스의 변수(필드)들 값을 메모리에 올린다. 로딩은 구조(틀)을 올리는 것이라면, 초기화는 실제 값을 올려줌.
*객체를 초기화 한다.라는 말은 이 때와 같은 맥락이다.
runtime data area: 여기는 여유공간이라고 생각하면 된다. 그럼 이 공간을 효율적으로 써야겠지?
그걸 위해서 쓰는 garbage collector(이하 GC)!
GC는 참조 끊긴 객체만 수거한다고 한다.
참조 끊긴 객체가 뭔데 ?
이를 알려면 먼저 기본자료형 VS참조자료형을 알아야 한다.
자바에서는 모든 값이 메모리에 저장되지만, 저장 방식이 다름
기본자료형(Primitive Type): 값이 스택(Stack)에 직접 저장
참조자료형(Reference Type): 힙(Heap)에 객체를 만들고, 스택에는 주소(참조)만 저장
즉, 스택에서 주소가 사라지면(참조가 끊기면) 힙에 있는 객체는 더 이상 갈 데가 없으니까, GC가 와서 치워버린다..

그럼 다시 JVM으로 넘어가자.
그 전에 ~ OS를 먼저 알아보자. 밀접한 관련이 있기 때문에.

위 그림을 참고하면..
사용자 => 프로그램=>OS => 커널 => 하드웨어의 순서로 컴퓨터는 구동된다.
팀을 나눠보자면
프로그램 ,OS=> 소프트웨어
커널/하드웨어 => 하드웨어 단에 가깝다.
OS는 프로그램을 하드웨어와 소통하게 해주는 또다른 소프트웨어라고 보면 된다.
그럼 본론으로,, JVM은?
JAVA위에 JVM을깔면 WINDOW/MAC/LINUX... 다양한 운영체제 위에 호환될 수 있게 도와준다.
*아래의 W는 윈도우 M은 맥 L은 리눅스, J는 자바이다.
자바로 프로그래밍을 하고 JVM위에 올려주면, 다양한 운영체제마다 달리 컴파을 할 필요없이
한번에 호환해준다.
나는 이게 DOCKER랑도 비슷하다고 생각했다. !!
다만 JVM은 자바 코드단이고, Docker는 애플리케이션 단이라는 것이 다르지만 ㅎㅎ
개념상으로

자 오늘은 자바 컴파일 후
실행 단계에서 쓰이는 jvm을 간략하게 알아보았다~
'백엔드 엔지니어링 > Spring Boot' 카테고리의 다른 글
| [Java] 객체 생성은 어디서 해요? (6) | 2025.08.16 |
|---|---|
| [Java]Collection? (5) | 2025.08.15 |