자바 메모리 관리자바 가비지 컬렉션Java 메모리 관리Java 가비지 컬렉션가비지 컬렉션이란

[Java] 메모리 관리 및 가비지 컬렉션

KUKJIN LEE
KUKJIN LEE
2024년 9월 25일
163

Java에서의 메모리 관리는 자동화된 가비지 컬렉션(GC) 덕분에 개발자가 직접 메모리를 해제할 필요가 없습니다.

(고성능의 경우에는 메모리 관리와 가비지 컬렉션에 대한 이해가 필수적입니다. 즉 직접 메모리를 관리해야 한다는 뜻입니다.)

 

1. Java 메모리 구조

Java 메모리는 JVM에서 관리되며, 주요 메모리 영역은 다음과 같이 나뉩니다.

  • Heap(힙) 메모리: 객체가 생성되는 영역으로, Young Generation(객체가 처음 생성)과 Old Generation(장기 생존 객체)이 있습니다.

  • Stack(스택) 메모리: 지역 변수와 메서드 호출에 사용됩니다.

  • Method Area(메서드 영역): 클래스 메타데이터와 상수들이 저장됩니다.

  • PC Register(프로그램 카운터)Native Method Stack: 각 스레드가 실행할 명령과 네이티브 코드가 사용하는 메모리입니다.

 

2. 가비지 컬렉션(GC) 기본 원리

가비지 컬렉션(Garbage Collection)은 JVM에서 더 이상 참조되지 않는 객체를 자동으로 제거해 메모리를 회수하는 메커니즘입니다. 객체의 참조 여부를 기준으로 GC가 불필요한 메모리를 해제해 주며, 메모리 누수를 방지합니다.

 

2.1 가비지 컬렉션의 과정

  • Mark(마킹): 살아 있는 객체를 식별합니다.

  • Sweep(제거): 사용되지 않는 객체를 메모리에서 해제합니다.

  • Compact(압축): 메모리 단편화를 방지하기 위해 남아 있는 객체를 재배치합니다.

2.2 가비지 컬렉션의 종류

  • Minor GC: Young Generation에서 객체를 제거.

  • Major GC: Old Generation에서 객체를 제거.

  • Full GC: Young과 Old Generation을 모두 정리하는 작업(성능에 큰 영향을 미침).

 


 

일반적인 개발 업무에서 대부분 JVM의 기본 메모리 관리와 가비지 컬렉션(GC) 설정으로 충분합니다. 메모리 관리 GC 최적화에 신경 쓸 일이 없습니다. 특히 웹 개발은 성능 문제나 메모리 부족이 발생 확률이 낮습니다. (차라리 코드 최적화가 더 도움이 됩니다.)

 

(대규모, 대용량 데이터를 처리하고 서버 자원이 제한적일 때 문제가 발생합니다.)

관련 글

[SQL 입문] 필요한 데이터만 콕 집어 가져올 수 있는 WHERE 절

사용자는 테이블에 있는 모든 데이터를 다 보고 싶어 하지는 않습니다. 오히려 특정 항목에 대한 데이터만 가져오고 싶을 때가 훨씬 많습니다. 예를 들어, 어떤 사용자의 이메일이나 ID는 알고 있는데, 그 사람이 언제 우리 앱에 가입했는지 확인하고 싶다고 가정해 봅시다...

2026년 1월 27일10

SQL에서 SELECT란 무엇인가?

데이터베이스를 거대한 서류 보관함이라고 생각하면 됩니다. 보관함 안에는 수많은 데이터가 차곡차곡 쌓입니다. SELECT는 이 보관함에서 "내가 원하는 정보를 찾아줘!"라고 요청하는 명령어입니다. 이 과정을 전문 용어로 '쿼리(Query)'라고 부릅니다. &nbs...

2026년 1월 26일10

[SQL 기초] "언제 하나씩 다 넣어?" 데이터 한 번에 넣기

개발을 하다 보면 데이터베이스(DB)에 샘플 데이터를 대량으로 넣어야 할 때가 있습니다. 메뉴 100개를 추가해야 하는데 INSERT 문을 100번 쓰고 있다면? 너무 비효율적이죠! 오늘은 SQL에서 여러 데이터를 한 번에 넣는 '다중 삽입(Multiple Inse...

2026년 1월 21일13

SQL 데이터 삽입하기

데이터가 없는 데이터베이스는 연료 없는 로켓과 같습니다. 이제 'Missions' 테이블에 새로운 행(row)을 추가하는 방법을 알아보겠습니다. "삽입(Inserting)"은 '데이터 추가'를 의미합니다. 기존 Missions 테이블 ...

2026년 1월 20일12