백엔드 엔지니어링/Spring Boot

[Spring Boot 기초]JVM이란?

혜이드 2025. 8. 15. 19:54

*이 포스팅은 <신한투자증권 프로디지털아카데미> 김송아 강사님의 강의 기반으로 작성되었습니다. 

 

개요

 

단순 코더가 아닌 프로그래머가 되기 위해서

빌드 과정부터 까보자.

 

자바 빌드 및 실행 과정은 아래 사진과 같다.

 

 



 

이 사진을 보고 송아샘은 짝꿍과 세줄 정리를 시키셨다! 

 

우리의 답변 

 

컴파일러가 코드의 문법을 검사, 토큰 단위로 분석하고 파악한 후  바이트코드(.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