Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

이지은님의 블로그

250110 - Java 개념과 실행 환경 (JVM 구조, 메모리 영역, JRE, JDK) 본문

TIL

250110 - Java 개념과 실행 환경 (JVM 구조, 메모리 영역, JRE, JDK)

queenriwon3 2025. 1. 10. 21:41

 코드 문제풀이

[JAVA] 코드카타 - (21)~(25)

 

[JAVA] 코드카타 - (21)~(25)

문제 (21) : 하샤드 수양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연

queenriwon3.tistory.com

[JAVA] 코드카타 - (26)~(30)

 

[JAVA] 코드카타 - (26)~(30)

문제 (26) : 음양 더하기어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제

queenriwon3.tistory.com

[JAVA] 코드카타 - (31)~(35)

 

[JAVA] 코드카타 - (31)~(35)

문제 (31) : 수박수박수박수박수박수?길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라

queenriwon3.tistory.com

 

 

 

▷ 오늘 배운 것

Java 종합반 1주차에서 배웠던 것의 심화과정을 공부해보려고 한다.

 

 

<<목차>>

1. Java에 대해

2. JVM(Java Virtual Machine, 자바가상머신)

3. JRE(Java Runtime Environment, 자바 실행 환경) JDK(Java Development Kit, 자바 개발 키트)

 

 


 

1. Java에 대해 

자바의 핵심기능: C언어 기능 + 공통실행환경(JVM), 클래스, 객체

 

자바의 필요성
  1. Java는 공통실행환경(JVM)이 있어 여러기기에서 실행가능하다.
    • 여러기기의 운영체제에서 실행할 수 있는 언어
    • (운영체제 위에서 실행되는 프로그램) 개발에 적합함
  2. 세상과 닮아있는 개발언어라 코드를 이해하기 쉽고 유지보수가 쉽다.
    • 객체: 존재하는 물건
    • 자바에서는 클래스를 통해 객체를 만듦
  3. 안정성이 높아서 프로그래밍 오류를 방지하고 보안상 안전
    • Java언어로 작성된 문맥을 바이트 코드로 변환하는 변환기가 먼저 오류를 체크함
    • 지원하는 보안기술이 많음
    • 파이썬  간단한 개발언어도 있으나 이보다 안정성이 높음
  4. 대규모 앱 개발이 가능하다.
    • 네트워크 데이터베이스 연결 통신 등의 작업을 처리하는 API제공
  5. 다양한 개발도구와 라이브러리를 사용가능(서드파티)

 

 

 

2. JVM(Java Virtual Machine, 자바 가상 머신)

가상의 기기를 만들어서 여러가지 기기 위에 Java프로그램을 실행시킬 수 있는 가상의 기기를 만들어준다. 따라서 어느 장비든 JVM을 설치할 수 있다면 Java 프로그램을 실행시킬 수 있다.

 

JVM 특징 
  1. 컴파일된 바이트코드를 기계가 이해할 수 있는 기계어로 변환 (인터프리터, JIT 컴파일러)
  2. 스택기반의 가상머신 (PC register, JVM stack, Native Method stack)
  3. 메모리 관리와 Garbage collection(가비지 컬렉션)수행 (Heap)

 

JVM 실행 순서
  1. .java 파일을 컴파일러를 통해 .class파일로 변환 (Compile-time 환경)
  2. .class 파일을 Class Loader에게 보낸다. (Run-time 환경)
  3. ClassLoader에서 JVM런타임영역으로 할당하여 메모리에 올린다.
Hello.java -> 자바 컴파일러 -> hello.class(0과 1로된)  -> JVM(클래스로더, 인터프리터,JIT 컴파일러) -> Devices

  • Java Compiler(자바 컴파일러): 내가 작성한 Java코드(.java)를 운영체제가 읽을 수 있는 바이트 코드(.class)로 변환시켜주는 변환기, JVM에 포함되지 않음
👉 JVM 구조(간단히)
- Java Interpreter(인터프리터): java.class 코드 해석기
- JIT Compiler(JIT 컴파일러): 빠른 java.class 코드 해석기
- 메모리 영역: java 데이터를 저장하는 영역(운영체제로부터 JVM이 할당받은 메모리 영역)
                     (Static영역 + Stack영역 + Heap영역)
- Class Loader(클래스 로더): .class 바이트 코드를 메모리 영역으로 운반함(JVM으로 바이트 코드를 불러와서 메모리에 저장)
- Garbage Collector(가비지 컬렉터): java쓰레기 청소기. Heap영역 에서 안쓰는 데이터를 주기적으로 흡수하는 청소기

 

 

-

더 자세하게 설명하자면

JVM의 구조에는 1️⃣ Class Loader, 2️⃣ Execution Engine, 3️⃣ GC, 4️⃣Runtime data areas 로 나누어져 있다.

 

1️⃣ Class Loader: 클래스 파일을 Runtime Data Area의 메서드 영역으로 불러오는 역할

 

2️⃣ Execution Engine: .class파일과 같은 ByteCode를 실행가능하도록 해석한다.

 

3️⃣ GC(Garbage Collector): 메모리 관리 기법으로 메모리 영역중 Heap영역에 배치된 객체들을 관리한다.

 

4️⃣ Runtime Data Area: 런타임 시 클래스 데이터와 같은 메타 데이터와 실제 데이터가 저장되는 곳(프로그램을 수행하기 위해 OS로부터 할당받은 메모리 영역, Java메모리 공간)

 

 

Runtime Data Area는 또 다시 1️⃣ PC Register, 2️⃣ Native Method Stacks, 3️⃣ JVM Stack, 4️⃣ Heap, 5️⃣ Method Area로 나누어진다.

 

4-1) PC Register

- JVM은 스택기반의 가상머신. CPU에 직접 접근하지 않고 Stack에서 주소를 뽑아 가져온다. 이 가져온 주소를 저장하는 곳이다.

—> 현재 어떤 명령을 실행할지 기록(스택기반)

 

4-2) Native Method Stacks

- Java 이외의 언어에 제공되는 Method의 정보가 저장되는 공간 / Java Native Interface를 통해 바이트 코드로 저장

- 커널이 자체적으로 스택을 잡아 독자적으로 프로그램 실행

 

4-3) JVM Stacks (메모리 영역 - Stack 영역)

- 호출된 메서드의 기본자료형, 파라미터(매개변수), 지역변수, 리턴값 및 연산값 등이 저장되는 영역(임시적으로 사용되는 변수, 주소값 포함 크기가 정해져있는 기본형 변수)

- 객체 생성시 참조 주소값도 저장된다.(참조 자료형) -> Heap영역에 존재하는 인스턴스를 가르킴

- 프로그램 실행시 임시로 할당되었다가 메서드를 빠져나가게 되면 소멸되는 특성의 데이터 저장

- 메서드 호출시마다 스택에 각각 스택프레임이 생성되고 수행이 끝나면 해당 프레임 제거(LIFO, Last In First Out)

 

4-4) Heap (메모리 영역 - Heap 영역)

- 객체를 동적으로 생성시 인스턴스가 Heap영역의 메모리에 할당(new 키워드로 생성된 객체)(크기가 계속 늘어날 수 있음)

- 참조형 데이터의 객체에 실제 데이터들이 담기며 실제 데이터를 가지고 있는 Heap영역의 참조값을 Stack영역의 객체를 가진다.

- 어떤 참조 변수도 Heap영역에 있는 인스턴스를 참조하지 않으면, GC(가비지 컬렉터)가 처리한다.

- 멀티 스레드를 사용하더라도 Heap영역은 하나만 사용한다.

 

4-5) Method Area (메모리 영역 - Static 영역)

- 전역변수와 정적멤버변수, static으로 선언된 것이 저장된다.

- 클래스 정보의 초기화정보(필드/메서드(생성자)/타입정보 저장)

- Static영역은 컴파일 시간동안 할당된 메모리이며, 고정된 공간을 차지한다. 런타임중에는 값을 변경할 수 없다.

- Static 영역에 있는 것은 어디서든 접근이 가능하다. 그러므로 무분별한 사용은 메모리 부족을 일으킬 수 있다.

- JVM이 동작해서 클래스가 로딩될 때 생성되며, 프로그램 종료까지 남아있는다.

- 상수형을 저장하고 중복을 막는 Runtime Constant Pool존재

 

 

 

 

3. JRE(Java Runtime Environment, 자바 실행 환경)과 JDK(Java Development Kit, 자바 개발 키트)

JRE만 있다면 Java프로그램을 실행만 시킬 수 있다.(.class만 실행가능)  

JDK 가 javac(자바 컴파일러) 명령을 통해 .java 파일을 실행 가능한 .class 파일로 변환

 

JDK는 JRE(JVM)포함하고 있음. 자바 개발 도구가 있어 코드를 디버깅가능(JDB)

 

 

 

여러자료를 참고하여 직접 구조를 그려보았다.

 

 

▷ 참고 블로그

https://backendcode.tistory.com/161 

 

[IT 기술 면접] JVM (자바 가상 머신) 이란?

이번에는 JVM에 대해 정리할 것이다. ▶ JVM 이란? JVM이란 Java Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. (가상 머신이란 프로그램을 실행하기 위해 물리적 머신과 유사한

backendcode.tistory.com

 

 

https://developshrimp.com/entry/JAVA-JVM%EA%B3%BC-%EC%9E%90%EB%B0%94-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD-Static-Stack-Heap

 

[JAVA] JVM과 자바 메모리 영역 Static, Stack, Heap

JAVA 에서 사용되는 대표적인 메모리 영역에는 Static, Stack, Heap 영역이 있다. JAVA를 공부하면서 그리고 Spring 을 다루면서 기본적으로 알고 있어야 하는 개념이기에, 이 세 가지의 주요 특징과 사용

developshrimp.com