2024/12/19 8

[JVM 밑바닥까지 파헤치기] 3-1. 가비지 컬렉터와 메모리 할당 전략: 회수

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다1. 참조참조 타입정의 및 설명GC 수집 시점주요 용도Strong Reference코드에서 객체를 직접 가리킴❌ 참조가 있는 한 GC 대상 아님일반 객체 참조Soft Reference메모리 부족 시에만 수집되는 참조⚠️ 메모리 부족 시 GC 대상캐시Weak Reference강한 참조가 없으면 즉시 수집될 수 있음✅ GC 대상 (강한 참조 없을 경우 즉시)메모리 누수 방지임시 객체 관리Phantom Reference수집된 후에만 감지 가능한 참조. 객체 생명주기 끝을 추적할 때 사용✅ 객체 수집 후 ReferenceQueue에 등록정리/리소스 해제 후 처리 예시) Soft Reference더보기더보기SoftReference softRef..

Java 2024.12.19

[JVM 밑바닥까지 파헤치기] 2. 자바 메모리 영역과 메모리 오버플로

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 1. 런타임 데이터 영역영역 이름설명주요 특징 및 구성 요소메서드 영역클래스 수준 메타데이터 저장- 클래스 버전, 필드, 메서드, 런타임 상수 풀 포함└ 런타임 상수 풀컴파일 시 생성된 상수 및 심볼 정보 저장- String.intern() 등이 사용됨힙 (Heap)객체 인스턴스가 저장되는 가장 큰 영역- GC 관리 대상- Young/Old 세대로 분할└ Young Generation새로운 객체가 생성되는 영역- Eden, Survivor 구역└ Old Generation장기 생존 객체 저장- Full GC 대상└ TLAB각 스레드 전용의 객체 할당 공간- 동시 할당 충돌 방지, 성능 향상 목적JVM 스택메서드 호출 시마다 생성되는 ..

Java 2024.12.19

[JVM 밑바닥까지 파헤치기] 1. 자바 기술 시스템 소개

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다 1. 자바 가상 머신 제품군제품명시기/기반주요 기능 및 특징단점 및 한계점Sun Classic VMJDK 1.0 (최초 상용)- 순수 인터프리터 방식 실행- 실행 효율이 낮음Exact VM초기 JVM 중- 정확한 메모리 관리- 메모리의 특정 주소 접근 가능- 최신 정보 및 활용 예시 부족HotSpot VMOpenJDK 기본 JVM- 핫 코드 감지- JIT 컴파일- 온스택 치환- 메모리 사용량 증가 가능성- 상황에 따라 성능 편차GraalVMLLVM 기반Java SE 호환- 다중 언어 지원 (Java, Kotlin, JS, Python 등)- 중간언어 변환 방식- 추가 비용 없음- 실험적 기능 존재- 일부 언어는 제한적 지원 가능 2...

Java 2024.12.19

[헤드퍼스트 디자인 패턴] 12-6. 비지터 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. 비지터 패턴다양한 객체에 새로운 기능을 추가할 경우 구성요소Visitor새로운 기능을 추가하는 객체각 객체의 accept 메소드를 호출하여 자신을 전달 ConcreteVisitor각 Element에 대해 수행할 작업 정의 Elementaccept() 메서드를 정의한 객체자신이 받아들일 수 있는 비지터를 정의 장점객체의 구조를 변경하지 않음새로운 기능 추가 용이비지터만 추가하면 됨 2. MenuMenuComponent// 메뉴 항목을 나타내는 요소 클래스public abstract class MenuComponent { public abstract void accept(MenuVisitor visitor);} Menupubl..

Java/Design Pattern 2024.12.19

[헤드퍼스트 디자인 패턴] 12-5. 프로토타입 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다1. 프로토타입 패턴어떤 객체의 인스턴스를 만들 때 자원이 많이 들거나 복잡할 경우 장점성능기존 인스턴스를 복사 (생성 X)클라이언트 코드에서 어떤 클래스의 인스턴스를 만드는지 모름 2. GameMonster// Prototype 인터페이스public interface Monster extends Cloneable { Monster clone(); void display(); // 몬스터의 모양을 화면에 표시}// 기본 몬스터 클래스public class DefaultMonster implements Monster { private String shape; // 몬스터의 모양 private String color;..

Java/Design Pattern 2024.12.19

[헤드퍼스트 디자인 패턴] 12-4. 플라이웨이트 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다1. 플라이웨이트 패턴객체를 최대한 재사용하여 메모리를 절약하는 디자인 패턴인스턴스 하나로 여러 개의 가상 인스턴스를 제공하고 싶을 경우 구성 요소Intrinsic State여러 객체 간에 공유되는 상태불변 Extrinsic State공유되지 않고 개별 객체에 따라 달라지는 상태호출 시 클라이언트가 전달 2. TreeManagerimport java.util.ArrayList;import java.util.List;public class TreeManager { private final List trees = new ArrayList(); // 나무 추가 (외재적 상태를 포함한 TreeLocation 객체 생성) pub..

Java/Design Pattern 2024.12.19

[헤드퍼스트 디자인 패턴] 12-3. 책임 연쇄 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다1. 책임 연쇄 패턴1개의 요청을 2개 이상의 객체에서 처리해야 할 경우 사용되는 패턴 객체 사슬순차적으로 요청을 처리함자신이 처리할 수 있는 요청만 처리나머지는 다음 객체에 위임 장점요청을 보낸 쪽과 받는 쪽을 분리할 수 있음사슬을 동적으로 수정할 수 있음 2. RemoteControlpublic class RemoteControl { private Handler handlerChain; public void setHandlerChain(Handler handlerChain) { this.handlerChain = handlerChain; } public void pressButton(String r..

Java/Design Pattern 2024.12.19

[헤드퍼스트 디자인 패턴] 12-2. 빌더 패턴

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다 1. 빌더 패턴제품의 생산 단계를 캡슐화하여 여러 단계로 나눠서 만들도록 하는 패턴클라이언트는 추상 인터페이스로 제품을 단계적으로 생산 장점유연한 디자인이 필요할 경우여러 조합이 발생할 수 있음생성자가 너무 많아짐명확하게 객체를 생성할 수 있음제품의 내부 구조를 클라이언트로부터 보호할 수 있음 2. VacationVacationBuilderpublic class Vacation { private String date; private String destination; private String accommodation; private List activities; // Private constructor ..

Java/Design Pattern 2024.12.19