클래스 (Class)를 기본 단위로 구성하며, 가장 간단한 자바 프로그램도 최소 하나 이상의 클래스를 포함한다.
// 패키지 선언 (optional)
package mypackage;
// 클래스 선언: 프로그램 단위 구성 블록
public class Main {
// main 메서드: 프로그램 시작점
public static void main(String[] args) {
// 실행 코드 작성
System.out.println("Hello, Java!");
}
// 다른 메서드들 (optional)
public void anotherMethod() {
// ...
}
}
.java: 소스 코드 파일. 개발자가 작성하는 텍스트 기반의 Java 프로그램 소스 코드.class: 바이트코드 파일. JVM이 읽고 실행할 수 있는 중간 언어로 변환된 컴파일 결과물로, 플랫폼 독립적이다.메서드 호출 정보와 지역 변수 (Local Variables), 기본형 (Primitive type) 변수가 저장된다. 메서드가 호출될 때마다 하나의 프레임 (Frame)이 스택에 쌓이고, 메서드 실행이 끝나면 해당 프레임이 제거된다. 스레드마다 별도의 스택 영역을 가진다.
객체 (Object)와 배열 (Array)이 저장되는 공간으로, 프로그램 실행 중 생성되는 거의 모든 데이터가 이곳에 저장된다. 여러 스레드가 공유하는 영역이다. 가비지 컬렉터 (GC)가 주로 활동하는 영역으로 더이상 사용되지 않는 객체를 찾아내 메모리에서 제거한다.
void method() {
int a = 10; // Stack (지역 변수)
String s = "Hello";
// s는 Stack (참조 변수), 문자열 "Hello"는 Heap의 String Constant Pool
// s는 "Hello"의 주소를 가리킨다.
Person p = new Person();
// p는 Stack (참조 변수), new Person()으로 생성된 실제 객체는 Heap
// p는 힙 객체의 주소를 가리킨다.
}
✏️ JVM 메모리 구조
영역 설명 특징 GC 영향 Eden 새 객체가 생성되는 공간 대부분의 객체가 짧게 존재 Minor GC 대상 Survivor S0/S1 Eden에서 살아남은 객체가 이동 GC 후 번갈아 복사 Minor GC 대상 Old 생존 시간이 긴 객체 저장 대형 객체, 오랜 객체 Major GC 대상 Metaspace 클래스 메타 정보 저장 Native 메모리 사용 Major GC에 영향
자바의 메모리 관리 방법 중의 하나로, JVM의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체 (Garbage)를 모아 주기적으로 제거하는 프로세스

Young Generation 영역에서 발생되는 GC. Young Generation은 Old 대비 상대적으로 객체 정보가 작기 때문에 객체를 찾아 제거하는 데 소요되는 시간이 적다.
Old 영역에서 발생하는 GC. Old 영역의 객체들은 Young Generation에서 살아남은 객체로 대상 객체가 크고 많아서 실행 속도가 느리다.