G1 GC vs CMS GC
·
JAVA
GC 개요항목CMS GCG1 GC전체 이름Concurrent Mark Sweep GCGarbage First GC기본 전략세대 구분 (Young / Old) + 병행 수집Region 기반 + 논리적 세대 구분 + 병행 수집 + compactSTW(Stop-The-World)일부 발생 (Young GC, Initial Mark 등)일부 발생 (Young GC, Remark 등)단편화 해소❌ 없음✅ 있음 (Evacuation + Compaction)JVM 옵션-XX:+UseConcMarkSweepGC-XX:+UseG1GC (JDK 9 이상 기본값)대상 영역고정된 Young/Old Generation논리적 Young/Old, Region 기반 동적 분할CMS GC 상세 동작구조Heap├── Young Gene..
GC(Garbage Collection)
·
JAVA
📌 GC란?GC는 자바에서 사용되지 않는 객체(= 참조되지 않는 객체)를 Heap 메모리에서 자동으로 회수하는 기능입니다.✅ 목적개발자가 free()나 delete 없이도 메모리 누수를 방지애플리케이션의 안정성 & 유지보수성 향상JVM Heap 메모리 구조 (Generational GC)Heap├── Young Generation│ ├── Eden│ └── Survivor 0│ └── Survivor 1└── Old Generation영역설명Eden객체가 처음 생성되는 공간Survivor 0/1살아남은 객체들이 임시로 이동하는 공간Old여러 번 살아남은 객체들이 올라가는 영역🔍 대부분의 객체는 "금방 죽는다"는 관찰에 기반한 구조 → 세대별 관리Survivor 0/1 두 개로 나뉘는..
Stack vs Heap
·
JAVA
자바에서 Stack 과 Heap ✅ 스택(Stack)과 힙(Heap)은 뭐고, 왜 나뉘는가?자바 프로그램 실행 -> 필요한 데이터를 JVM 에 저장합니다.이때 저장되는 데이터의 성격은 다름 -> JVM 은 크게 Stack 과 Heap으로 나눠서 메모리 관리합니다. 🧮스택(Stack)📌 정의메서드 호출 정보와 지역 변수를 저장하는 공간 → 스레드마다 하나씩 존재합니다.public int add(int a, int b) { int sum = a + b; return sum;}a, b, sum: 모두 지역 변수 → Stack에 저장add() 메서드 호출 정보 (파라미터, 복귀 주소 등) → Stack에 저장⚙️ 작동 방식: LIFO메서드가 호출될 때 → Stack에 쌓임 (Push)메서드가 끝날 때 →..
스레드와 멀티스레드
·
JAVA
스레드는 왜 필요한가? 과거 CPU는 한 번에 하나의 동작만 처리할 수 있었습니다.그러나 사용자는 음악을 들으면서 웹 검색을 하거나, 영상 통화 중에 사진을 전송하는 등 여러 작업을 동시에 실행하기를 원합니다.이를 실현하기 위한 방법이 바로 멀티스레드입니다.멀티스레드는 하나의 프로그램에서 여러 작업을 동시에 처리할 수 있도록 해주는 기술로, 자바를 포함한 현대의 언어 대부분에서 기본적으로 지원됩니다.프로세스와 스레드 프로세스(Process): 실행 중인 하나의 프로그램입니다.스레드(Thread): 프로세스 내에서 실제로 작업을 수행하는 실행 흐름입니다.하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 여러 작업을 동시에 처리하기 위해 스레드를 사용합니다. 예를 들어, 음악 앱에서 한 스레드는 노래 ..
JMM
·
JAVA
📌 1. JMM이란?JMM은 자바 프로그램에서 스레드 간에 메모리를 어떻게 읽고 쓰는지, 즉 공유 변수의 일관성(Consistency)과 동기화 규칙을 정의한 이론적 스펙입니다.🚨 2. 왜 필요한가?❗ 문제: 멀티스레딩에서는 CPU가 성능 최적화를 위해 아래와 같은 동작을 함CPU 명령어 재정렬(Instruction Reordering)캐시 계층 사용 (레지스터/코어 캐시 ↔ 메인 메모리)컴파일러 최적화 (중간 코드 생략, 변수 순서 변경 등)이로 인해 스레드마다 변수의 최신 상태가 다르게 보이는 가시성 문제, 또는 예상하지 못한 실행 순서(Race Condition)가 발생함🎯 그래서 등장한 게 JMM스레드 간에 공유 변수의 읽기/쓰기 순서를 일관성 있게 유지하도록 명확한 규칙(happens-be..
JIT(Just-In-TIme) Complination
·
JAVA
📌 1. 개요 – JIT 컴파일러란?Java는 "한 번 작성하면 어디서나 실행"을 목표로 하기 때문에, Java 코드는 .java → .class로 변환되어 바이트코드로 실행됩니다. JVM은 이 바이트코드를 인터프리팅하면서 실행하지만, 이 방식은 속도가 느립니다. 그래서 등장한 것이 JIT(Just-In-Time) 컴파일러입니다. JIT 컴파일러는 실행 중 자주 호출되는 메서드(Hot Method)를 감지하여, 해당 바이트코드를 Native Code(기계어)로 변환하여 성능을 극적으로 향상시킵니다.⚙️ 2. JIT 컴파일 동작 흐름.java → javac → .class (Bytecode) ↓ JVM이 실행 중 분석 ..