Java(55)
-
Java 12
미리보는 변화 switch 문 개편 이전 버전 DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); String typeOfDay = ""; switch (dayOfWeek) { case MONDAY: case TUESDAY: case WEDNESDAY: case THURSDAY: case FRIDAY: typeOfDay = "Working Day"; break; case SATURDAY: case SUNDAY: typeOfDay = "Day Off"; } 새 버전 typeOfDay = switch (dayOfWeek) { case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> "Working Day"; case SATUR..
2021.09.06 -
Java Heap 메모리 구조
Java 8 이전까지의 Heap 메모리 구조 Young Young 영역은 Eden 영역과 Survivor 영역으로 구성됩니다. Eden 영역은 객체가 Heap에 최초로 할당되는 장소입니다. 만약 Eden 영역이 꽉 차게 되면 객체의 사용중 여부를 따져 만약 사용 중인 객체이면 Survivor 영역으로 넘기고, 사용 되지 않는 객체이면 그냥 남겨 둡니다. 사용 중인 모든 객체가 Survivor 영역으로 넘어가면 Eden 영역을 정리합니다. Survivor 영역은 Eden에서 살아남은 객체들이 잠시 머무르는 공간입니다. Survivor 영역은 두 개로 구성되는데 참조 중인 객체를 이동할 때는 하나의 Survivor 영역만 사용하게 됩니다. Old Young 영역에서 정리되지 않고 계속 사용중인 객체들은 Ol..
2021.08.23 -
GC 모니터링
GC 모니터링이란 GC 모니터링이란 JVM이 어떻게 GC를 수행하고 있는지 알아내는 과정을 말합니다. 예를 들어 Young 영역에 있던 객체를 Old 영역으로 언제 얼마나 이동했는지, stop-the-world가 언제 일어나고 얼마동안 일어났는지 등의 정보를 알 수 있습니다. GC를 모니터링 하는 이유는 JVM이 효율적으로 GC를 수행하는지 파악하고 추가적인 GC 튜닝 작업이 필요한지 확인하기 위해서입니다. GC 모니터링으로 파악한 정보를 바탕으로 애플리케이션을 수정하거나 GC를 튜닝할 수 있습니다. GC 모니터링 방법 jstat jstat은 HotSpot JVM에 있는 모니터링 도구입니다. jstat 이외에 HotSpot JVM 모니터링 도구로는 jps와 statd가 있습니다. Java 애플리케이션을 ..
2021.08.13 -
GC 튜닝
GC 튜닝을 해야하는 이유 일반적으로 Java에서 생성된 객체는 GC가 처리해서 지웁니다. 생성된 객체가 많을수록 GC가 처리해야 하는 대상도 많아지고, GC를 수행하는 횟수도 증가합니다. 즉, 운영하고 만드는 시스템이 GC를 적게 하도록 하려면 객체 생성을 줄이는 작업을 먼저 해야합니다. 만약 애플리케이션 메모리 사용도 튜닝을 많이 해서 어느 정도 만족할 만한 상황이 되었다면, 본격적으로 GC 튜닝을 합니다. GC 튜닝의 목적 Old 영역으로 넘어가는 객체의 수 최소화하기 최신 Java이 아닌 구 버전의 Java는 Eden 영역에서 객체가 처음 만들어지고, Survivor 영역을 오가다가, 끝까지 남아 있는 객체를 Old 영역으로 이동합니다. 간혹, Eden 영역에서 만들어지다가 크기가 커져서 Old ..
2021.08.12 -
Java 10
추가된 기능 로컬 변수 타입 추론 로컬 변수 var를 이용함으로서 컴파일러에게 타입을 추론할 수 있게 되었습니다. public void test() { var message = "Hello, Java 10"; assertTrue(message instance of String); } 로컬 변수 타입 추론은 지역 변수를 초기화하며 선언할 때만 사용할 수 있습니다. var의 잘못된 예시 var n; // var는 초기화 없이 사용할 수 없습니다. var emptyList = null; // 변수 초기화를 null로 할 수 없습니다. var p = (String s) -> s.length() > 10; // 람다 표현식은 명확한 타입 추론을 하기 힘들기 때문에 사용할 수 없습니다. var arr = {1, 2..
2021.08.10 -
Spring Batch Chunk 지향 처리
Chunk란 Spring Batch에서 Chunk란 데이터 덩어리로 작업할 때 각 커밋 사이에 처리되는 row 수를 의미합니다. 즉 Chunk 지향 처리란, 한 번에 하나씩 데이터를 읽어 Chunk라는 덩어리를 만든 뒤, Chunk 단위로 트랜잭션을 다루는 것을 의미합니다. 여기서 Chunk 단위로 트랜잭션을 수행하기 때문에 실패할 경우에는 해당 Chunk 만큼만 롤백이 되고, 이전에 커밋된 트랜잭션 범위까지는 반영이 된다는 것입니다. Chunk 지향 처리의 구조 Reader에서 데이터를 하나 읽어옵니다. 읽어온 데이터를 Processor에서 가공합니다. 가공된 데이터들을 별도의 공간에 모은 뒤, Chunk 단위만큼 쌓이게 되면 Writer에 전달하고 Writer는 일괄 저장합니다. Reader와 Pro..
2021.03.22