-
CompletableFuture에 대한 이해
Future 는 비동기 작업의 결과를 나중에 받을 수 있게 해 준다. 하지만 Future 만으로는 아쉬운 점이 많다. 결과가 필요하면 결국 get() 으로 기다려야 하고, 작업이 끝난 뒤 이어서 실행할 콜백을 자연스럽게 붙이기도 어렵다. 여러 작업을...
/ 13 min readjava -
Callable, Future, ExecutorService에 대한 이해
Thread 와 Runnable 만으로도 새 실행 흐름을 만들 수는 있다. 하지만 실제 애플리케이션에서는 작업이 하나로 끝나지 않는다. 여러 작업을 동시에 실행해야 하고, 실행 결과를 받아야 하며, 실패나 취소도 다뤄야 한다. 매번 new Thread...
/ 13 min readjava -
Thread와 Runnable에 대한 이해
스레드는 하나의 프로그램 안에서 독립적으로 실행되는 흐름이다. JVM은 하나의 애플리케이션 안에서 여러 실행 흐름이 동시에 동작하도록 지원한다. 일반적인 자바 애플리케이션은 main() 메서드를 실행하는 메인 스레드에서 시작하지만, 한 스레드만으로는...
/ 9 min readjava -
Java 애플리케이션에서 첫 요청이 느린 이유: JIT 컴파일러와 JVM Warm-up
Java 기반 애플리케이션에서 첫 요청만 유독 느린 경우가 있다. 서버는 정상적으로 떠 있고, 헬스 체크도 통과했는데 실제 사용자의 첫 API 요청에서 응답 시간이 튀는 식이다. 이 현상은 보통 하나의 원인으로만 설명되지 않는다. 그중 JVM 관점에에...
/ 8 min readengineering backend java -
JVM 튜닝에서 -Xms와 -Xmx를 같은 값으로 두는 이유
프로덕션 서버의 JVM 옵션을 보다가 다음과 같은 설정을 자주 만나게 됐다. 처음 보면 조금 이상하다. Xmx 가 최대 힙 크기라면, 최대값만 넉넉하게 잡아두면 되는 것 아닐까? 왜 굳이 Xms 까지 같은 값으로 맞춰서 JVM이 시작하자마자 큰 힙을...
/ 8 min readjava jvm - Java
ArrayList 컬렉션
ArrayList 컬렉션 ArrayList 는 자바의 컬렉션 프레임워크에서 배열 기반으로 동작하는 List 인터페이스의 구현체 중 하나로 가장 많이 사용되는 컬렉션에 속한다. 이 글에서는 자바의 ArrayList 컬렉션에 대해 다른 컬렉션들과 비교를...
/ 12 min readjava