[JAVA] 32. JVM (1)heap, stack, queue

서회정's avatar
Feb 07, 2025
[JAVA] 32. JVM (1)heap, stack, queue

📌
변수 (int, double, boolean, String)
static (main이 실행되기 전에 메모리에 로드된다) 공간 분리 (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 = 32; s1.show(); Student s2 = new Student(); s2.no = 2; s2.name = "둘리"; s2.age = 7; s2.show(); } }

결과

notion image

2. stack

notion image

코드

package jvm; public class Stack01 { static void m1() { int a = 1; m2(); } static void m2() { int b = 1; } public static void main(String[] args) { System.out.println("10번라인"); m1(); System.out.println("12번라인"); } }

Stack Overflow가 발생하는 경우

package jvm; public class Stack02 { static void m1() { int a = 1; m1(); // 재귀함수 } public static void main(String[] args) { m1(); } }

3. queue

notion image

코드

package jvm; public class Queue01 { static void m1() { int n1 = 1; 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("🧀"); } public static void main(String[] args) { System.out.println("main 시작"); m1(); System.out.println("main 종료"); } }

결과

notion image

실행 구조

notion image
이해 안되면 될 때까지 그려보라…

4. 참조자료형

📌
크기를 알 때 (int, double, boolean, char) - 값이 있음
크기를 알 수 없을 때 (String, class 자료형) - 주소가 있음
모든 참조자료형 크기는 4Byte
 
Share article

clubnerdy