[Java] Java 개요

김선형·2025년 9월 6일

Java

목록 보기
1/27

특징

  • 객체 지향적 언어: 모든 것을 객체로 표현하고, Object 클래스에서 모든 클래스가 파생된다.
  • 플랫폼 독립적: 자바 가상 머신 (JVM) 위에서 동작하기 때문에 OS에 종속적이지 않다.
  • 메모리 관리: Garbage Collector가 존재하기 때문에 개발자가 직접 메모리 할당/해제를 해주지 않아도 된다.
  • 풍부한 라이브러리: 방대한 표준 라이브러리 Java API를 제공한다. 네트워크, 데이터베이스 연결, GUI 개발 등이 가능하다.

Java 프로그램 구조

클래스 (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: 소스 코드 파일. 개발자가 작성하는 텍스트 기반의 Java 프로그램 소스 코드
  • .class: 바이트코드 파일. JVM이 읽고 실행할 수 있는 중간 언어로 변환된 컴파일 결과물로, 플랫폼 독립적이다.
  • JVM (Java Virtual Machine): 실행 엔진. 바이트코드를 실행하는 가상 머신

Java 메모리 구조

Stack 영역

메서드 호출 정보와 지역 변수 (Local Variables), 기본형 (Primitive type) 변수가 저장된다. 메서드가 호출될 때마다 하나의 프레임 (Frame)이 스택에 쌓이고, 메서드 실행이 끝나면 해당 프레임이 제거된다. 스레드마다 별도의 스택 영역을 가진다.

Heap 영역

객체 (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 메모리 구조
JVM Memory

영역설명특징GC 영향
Eden새 객체가 생성되는 공간대부분의 객체가 짧게 존재Minor GC 대상
Survivor S0/S1Eden에서 살아남은 객체가 이동GC 후 번갈아 복사Minor GC 대상
Old생존 시간이 긴 객체 저장대형 객체, 오랜 객체Major GC 대상
Metaspace클래스 메타 정보 저장Native 메모리 사용Major GC에 영향

Garbage Collection (가비지 컬렉션)

자바의 메모리 관리 방법 중의 하나로, JVM의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체 (Garbage)를 모아 주기적으로 제거하는 프로세스

Java Garbage Collection

구분

Minor Garbage Collection

Young Generation 영역에서 발생되는 GC. Young Generation은 Old 대비 상대적으로 객체 정보가 작기 때문에 객체를 찾아 제거하는 데 소요되는 시간이 적다.

Major Garbage Collection

Old 영역에서 발생하는 GC. Old 영역의 객체들은 Young Generation에서 살아남은 객체로 대상 객체가 크고 많아서 실행 속도가 느리다.

profile
선형의 비선형적 기록 🐜

0개의 댓글