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

김미숙's avatar
Mar 05, 2025
[Java] 10. JVM_1.사전 지식 (heap, stack, queue)
💡
매우 중요한 개념
변수 - 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

parangdajavous