변수 (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();
}
}결과

2. stack

코드
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

코드
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 종료");
}
}결과

실행 구조

이해 안되면 될 때까지 그려보라…
4. 참조자료형
크기를 알 때 (int, double, boolean, char) - 값이 있음
크기를 알 수 없을 때 (String, class 자료형) - 주소가 있음
모든 참조자료형 크기는 4Byte
Share article