본문 바로가기

자바5

JVM(with 컴파일 과정) 1. 자바자바는 OS에 독립적인 특성을 가지고 있습니다. 그게 가능한 이유는 JVM(Java Virtual Machine) 때문입니다. JVM의 어떤 기능 때문에 OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보겠습니다.2. 컴파일 과정자바 소스코드가(.java) 자바 컴파일러(javac)를 통해 자바 바이트 코드로 변환됩니다.(.class)컴파일된 바이트코드(.class)를 JVM의 클래스로더(Class Loader)에게 전달합니다.클래스 로더는 동적로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data Area의 Method Area), 즉 JVM의 메모리에 올립니다.메모리에 올리는 과정은 총 3가지 과정을 거칩니다.. 2025. 1. 16.
자바 가비지 컬렉션 CMS → G1 GC → ZGC 버전 별 발전과정 1. Java의 GC 발전 과정 개요Java에서 GC(Garbage Collector)는 메모리 관리를 자동화하여 개발자가 메모리 할당 및 해제를 직접 처리하지 않아도 되도록 합니다. 초기에는 Serial GC와 Parallel GC가 사용되었지만, 애플리케이션의 규모와 성능 요구사항이 증가함에 따라 CMS (Concurrent Mark Sweep), G1 GC (Garbage First), ZGC (Z Garbage Collector) 등이 도입되었습니다.각 GC는 Java의 메모리 관리와 Pause Time을 줄이고 성능을 향상시키기 위해 설계되었습니다.2. CMS (Concurrent Mark Sweep)2.1 동작방식Initial Mark: 살아있는 객체를 찾기 위한 초기 마킹 (STW 발생)Ol.. 2025. 1. 10.
자바 버전 별 선택 이유 LTS(Long Term Support) 버전을 선택하는 것이 안정적인 운영에 유리하기 때문에 LTS 버전만 기록하겠습니다.Java 8 : 2030년 12월까지Java 11 : 2026년 9월까지Java 17 : 2029년 9월까지Java 21 (2031년까지 지원)Java 8 (LTS)선택 이유:안정성이 매우 높고 레거시 시스템과 호환성 우수Lambda와 Stream API 도입으로 함수형 프로그래밍 지원서드파티 라이브러리 지원이 가장 풍부Java 11 (LTS)Spring Boot 2.x의 권장 버전 - Spring Framework 5 -가비지 컬렉터 성능 향상Java 11의 기본 가비지 수집기는 G1GC(가비지 우선 가비지 수집기)전체 힙을 일정 크기로 나누어 영역 별로 가장 많은 가비지가 쌓인 .. 2025. 1. 10.
올바른 Optional 사용법 🤔 Optional 사용목적Optional은 메서드의 리턴 타입으로 Null일 수도 있음을 명확히 표현하는 용도Optional 사용하기 전 주의반환 값에서 Null을 반환할 수 있다고 알릴 때 Optional을 사용한다고 했습니다. 그러나 애초에 Null을 반환하는 행위 자체가 안티 패턴입니다. Optional을 사용하기 전에 Null을 반환하는 메소드를 수정하는 것이 좋습니다. ex) 빈 값 반환, -1 반환😲 Optional 올바른 사용법1. Optional 객체에 null를 할당하지마라반환 값을'null'로 반환할 경우 서비스 로직에서NullPointerException이 발생할 수 있기 때문에 Optional을 사용합니다. 즉, 서비스 로직에서 Optional을 반환받으면 Optional이 감.. 2024. 12. 21.
일급컬렉션을 쓰는 이유 일급컬렉션 Collection을 Wrapping하면서, 그 외 다른 멤버 변수가 없는 상태를 일급 컬렉션이라 합니다. 1. 비지니스에 종속적인 자료구조 6개의 숫자로만 이루어져야만 하고 6개의 숫자는 서로 중복되지 않아야만 하는 이런 자료구조가 없을까요? 없으니 저희가 직접 만들면 됩니다. 타인이 읽었을 때 자료형을 만들고 계산하는 로직을 본다면 어떤 비지니스 요구사항에 의해서 만든지 직관적으로 이해하기 힘듭니다. 일급컬렉션을 이용한다면 비지니스 요구사항중 관련되 것들을 한 곳에서 관리할 수 있어 타인이 이해하기 편합니다. 2. 불변 불변이 중요한 이유는? ⇒ 규모가 커질 수록 객체가 절대 값이 바뀔일이 없다는 게 보장되면 코드를 수정하는데 사이드 이펙트가 최소화 되기 때문입니다. @Test public.. 2023. 11. 2.