inblog logo
|
sson17
    자바

    [JAVA]28.JVM 사전지식

    손영민's avatar
    손영민
    Feb 16, 2025
    [JAVA]28.JVM 사전지식
    Contents
    1.1 Heap이란?1.2 예제 코드Heap 메모리 특징2.stack2.1 Stack의 특징2.2 Stack 프레임 구조2.3 Stack 동작 방식3.queue소개3.1 Queue란?3.2 Queue vs Stack 비교3.3 Queue 주요 작업Java 구현 예제프로그램 실행 흐름출력 순서4.참고자료형1. 기본 자료형(Primitive Data Types) vs 참조 자료형(Reference Data Types)2. 메모리 할당과 저장 한계
    💡
    변수 (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

    소개

    이 글에서는 컴퓨터 과학의 두 가지 기본적인 자료구조인 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)

    기본 자료형

    • 크기가 고정되어 있으며, 메모리에 직접 값이 저장됩니다.
    • 종류: int, double, boolean, char 등.
    • 예시:
      • 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
    Contents
    1.1 Heap이란?1.2 예제 코드Heap 메모리 특징2.stack2.1 Stack의 특징2.2 Stack 프레임 구조2.3 Stack 동작 방식3.queue소개3.1 Queue란?3.2 Queue vs Stack 비교3.3 Queue 주요 작업Java 구현 예제프로그램 실행 흐름출력 순서4.참고자료형1. 기본 자료형(Primitive Data Types) vs 참조 자료형(Reference Data Types)2. 메모리 할당과 저장 한계

    sson17

    RSS·Powered by Inblog