inblog logo
|
parangdajavous
    Java

    [Java] 10. JVM_1.사전 지식 (heap, stack, queue)

    김미숙's avatar
    김미숙
    Mar 05, 2025
    [Java] 10. JVM_1.사전 지식 (heap, stack, queue)
    Contents
    <자료 구조>1. heap2. Stack3. Queue4. 참조 자료형
    💡
    ❗매우 중요한 개념❗
    변수 - int, double, boolean, String
    static (main이 실행 되기 전에 메모리에 로드 된다) - 공간 분리 (class 별로/class.~)
    static은 정적, 한 개만 메모리에 로드 된다
    메서드(함수) - 4가지 유형 (기본, 인수 1개, 인수 여러 개, 리턴이 있는) - void (리턴이 없음)
     

    <자료 구조>

    1. heap

     
    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(); } } public class Heap01 { public static void main(String[] args) { Student s1 = new Student(); // new가 되면 , static이 붙지 않은 모든 변수(변수, 메서드)가 heap에 로드 된다. s1.no = 1; s1.name = "홍길동"; s1.age = 20; s1.show(); Student s2 = new Student(); s2.no = 2; s2.name = "아무개"; s2.age = 10; s2.show(); Student s3 = new Student(); s3.no = 3; s3.name = "임꺽정"; s3.age = 15; s3.show(); } }
     
     

    2. Stack

     
    notion image
    💡
    행위 시 필요한 데이터(메서드: 지역변수) 저장
    Stack은 FILO (First In Last Out)
    Push > Pop
    Queue에서 Pop이 종료되어 삭제되면 Stack도 삭제됨
     
    package Jvm; public class Stack01 { static void m1() { int a = 1; // m1 호출시 실행됨, m2(); } static void m2() { int b = 1; // m2 호출시 실행됨, } public static void main(String[] args) { System.out.println(""); m1(); System.out.println(""); } }
     
    Stask Overflow
    package Jvm; public class Stack02 { static void m1() { int a = 1; m1(); // 재귀함수: 함수 안에 자신의 함수를 다시 호출하는 함수 } public static void main(String[] args) { m1(); } }
    C:\workspace\tools\jdk-21\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.3.2.1\lib\idea_rt.jar=50598:C:\Program Files\JetBrains\IntelliJ IDEA 2024.3.2.1\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\workspace\java_lec\study\out\production\study Jvm.Stack02 Exception in thread "main" java.lang.StackOverflowError at Jvm.Stack02.m1(Stack02.java:7) at Jvm.Stack02.m1(Stack02.java:7) at Jvm.Stack02.m1(Stack02.java:7) at Jvm.Stack02.m1(Stack02.java:7) at Jvm.Stack02.m1(Stack02.java:7) at Jvm.Stack02.m1(Stack02.java:7) at Jvm.Stack02.m1(Stack02.java:7)
     
     

    3. Queue

    💡
    코드 실행 순서
    Queue는 FIFO (First In First Out)
    Queue에서 Pop이 종료되면 삭제됨
    Stack와 Queue는 일대일 대응 (ex. m1 stask - m1 queue / m2 stack - m2 queue)
     
     
    notion image
    package Jvm; public class Queue01 { static void m1() { int n1 = 1; // 6번 System.out.println("🚒"); System.out.println("🏍️"); System.out.println("🚲"); 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("🧀"); // 21번 } public static void main(String[] args) { System.out.println("main 시작"); m1(); System.out.println("main 종료"); // 27번 } }
    notion image
     
     

    4. 참조 자료형

    💡
    크기를 알 때 - 기본 자료형
    크기를 모를 때 - 참조 자료형 / 주소가 있다 → 두 번 찾아가야함
     
    notion image
     
    Share article
    Contents
    <자료 구조>1. heap2. Stack3. Queue4. 참조 자료형

    parangdajavous

    RSS·Powered by Inblog