[JAVA]28.JVM 사전지식

손영민's avatar
Feb 16, 2025
[JAVA]28.JVM 사전지식
💡
변수 (int, double, boolean, String)
static main 실행되기 전에 메모리에 로드 된다) - 공간 분리 (class별로 분리되어있음)
static 정적이고 1개만 메모리에 로드 된다.
메서드 함수 4가지 유형(기본, 인수가 1개, 인수가 여러개, 리턴이 있는) -void(리턴이없는)
 
 

1.heap

1.1 Heap이란?

  • 동적으로 생성되는 객체들이 저장되는 메모리 영역
  • new 키워드로 생성되는 모든 객체가 저장됨
  • 가비지 컬렉터에 의해 자동으로 메모리 관리

1.2 예제 코드

java
package jvm; //이름 나이 학생번호 class Student { int no; String name; int age; void show() { System.out.println(no); System.out.println(name); System.out.println(age); System.out.println(); } // static show() { // System.out.println(no); // System.out.println(name); // System.out.println(age); // System.out.println(); // } } public class Heap01 { static int no; public static void main(String[] args) { Student s1 = new Student();//new가 되면, static이 붙지 않은 모든(변수, 매서드)가 heap에 로드 된다. Student(타입) s1 s1.no = 1; s1.name = "홍길동"; s1.age = 20; s1.show(); //Student.show(); static show()하면 값이떠도 안됨 System.out.println(""); Student s2 = new Student(); s2.no = 2; s2.name = "임꺽정"; s2.age = 30; s2.show(); } }
 

Heap 메모리 특징

  • 객체의 생명주기 관리
  • 인스턴스 변수와 메서드 저장
  • Static이 아닌 멤버들의 저장소
 

2.stack

2.1 Stack의 특징

  • FILO (First In Last Out) 구조
  • 메서드 호출과 실행을 관리
  • Push와 Pop 연산으로 동작

2.2 Stack 프레임 구조

notion image

2.3 Stack 동작 방식

  1. Push (추가)
      • 메서드 호출 시 스택에 프레임 추가
      • 지역 변수와 매개변수 저장
  1. Pop (제거)
      • 메서드 실행 완료 시 프레임 제거
      • FILO 순서로 제거됨

3.queue

notion image

소개

이 글에서는 컴퓨터 과학의 두 가지 기본적인 자료구조인 Stack과 Queue에 대해 알아보겠습니다. 이들의 차이점, 동작 패턴을 살펴보고 Java 예제를 통해 실제 동작을 확인해보겠습니다.

3.1 Queue란?

  • FIFO (First In First Out) 구조
  • 먼저 들어온 데이터가 먼저 나가는 구조
  • 대기열과 같은 개념

3.2 Queue vs Stack 비교

Stack (FILO - First In, Last Out, 선입후출)

  • 접시를 쌓아놓은 것과 같은 구조
  • 마지막에 추가된 요소가 가장 먼저 제거됨
  • 한쪽 끝에서만 작업이 이루어짐
  • 주요 연산: push (추가)와 pop (제거)

Queue (FIFO - First In, First Out, 선입선출)

  • 줄을 서서 기다리는 사람들과 같은 구조
  • 처음 추가된 요소가 가장 먼저 제거됨
  • 양쪽 끝에서 작업이 이루어짐
  • 주요 연산: enqueue (추가)와 dequeue (제거)
 

3.3 Queue 주요 작업

  1. Enqueue: 데이터 추가
  1. Dequeue: 데이터 제거
  1. Front: 첫 번째 데이터 확인
  1. Rear: 마지막 데이터 확인

Java 구현 예제

다음은 Java 가상 머신(JVM)이 메소드 실행을 위해 스택을 사용하는 방법을 보여주는 상세한 예제입니다:
java Copy package jvm; public class Queue01 { static void m1() { int n1 = 1;// 스택 프레임에 저장되는 지역 변수 System.out.println("🚒"); System.out.println("🏍"); System.out.println("🚲"); m2();// m2 메소드 호출 System.out.println("🚝"); System.out.println("🛫"); } static void m2() { int n2 = 2;// 스택 프레임에 저장되는 지역 변수 System.out.println("🍕"); System.out.println("🍔"); System.out.println("🌭"); System.out.println("🥚"); System.out.println("🧀"); } public static void main(String[] args) { System.out.println("main 시작"); m1();// m1 메소드 호출 System.out.println("main 종료"); } }
notion image

프로그램 실행 흐름

  1. 스택 프레임 생성
      • 프로그램이 시작되면 JVM은 main 메소드를 위한 스택 프레임을 생성
      • 각 메소드 호출마다 새로운 스택 프레임이 생성됨
      • 스택 프레임은 지역 변수와 실행 컨텍스트를 포함
  1. 메소드 실행 순서
    1. Copy main() → m1() → m2() → m1()로 복귀 → main()으로 복귀
  1. 스택 프레임 생명주기
      • 메소드가 호출될 때 스택 프레임이 생성됨
      • 메소드 실행이 완료되면 스택 프레임이 제거됨
      • 실행 순서는 FILO(선입후출) 방식을 따름

출력 순서

프로그램은 다음 순서로 출력됩니다:
  1. "main 시작"
  1. 🚒
  1. 🏍
  1. 🚲
  1. 🍕
  1. 🍔
  1. 🌭
  1. 🥚
  1. 🧀
  1. 🚝
  1. 🛫
  1. "main 종료"

4.참고자료형

1. 기본 자료형(Primitive Data Types) vs 참조 자료형(Reference Data Types)

기본 자료형

  • 크기가 고정되어 있으며, 메모리에 직접 값이 저장됩니다.
  • 종류: intdoublebooleanchar 등.
  • 예시:
    • java
      Copy
      int n = 7; // 4바이트 고정 double k = 10; // 8바이트 고정

참조 자료형

  • 크기가 동적으로 결정되며, 메모리 주소를 통해 객체를 참조합니다.
  • 종류: String, 클래스, 배열 등.
  • 예시:
    • java
      Copy
      String s1 = "안녕"; // 문자열은 참조 자료형 Student s2 = new Student(); // 클래스 객체 생성
 

2. 메모리 할당과 저장 한계

  • 기본 자료형은 고정 크기로 메모리 효율이 높습니다.
    • 예: int 1개 = 4바이트 → 160억 개 저장 시 약 640GB 필요.
  • 참조 자료형은 객체 크기에 따라 유동적이며, 주소값(4바이트 or 8바이트) 이 저장됩니다.
    • 10억 개의 참조 변수 저장 시 약 4GB (32비트) 또는 8GB (64비트) 필요.

저장 용량 예시

  • 160억 개 데이터 → 약 1TB 이상 필요 (데이터 타입에 따라 변동).
  • 80억 개 데이터 → 약 500GB (기본 자료형 기준).
  • 10억 개 데이터 → 약 10GB (참조 자료형 기준).
 
 
notion image
 
Share article

sson17