본문 바로가기

jvm

JVM Warm-up 개선 (feat. JIT Compiler) # JVM Warm up ?JVM 서버는 배포 직후 Latency가 존재한다.그 이유는 java는 기본적으로 `compile -> byte code -> interprete` 과정을 거치는 언어이며, compile시 바로 번역되는 전통적인 컴파일 언어보다 초기 실행 속도가 느리기 때문이다. 그래서 java는 이를 JIT 컴파일러를 통해서 극복한다. JVM이 실행될수록 JIT 컴파일러는 최적화를 통해, 자주 호출되는 메소드들을 네이티브 코드로 컴파일하고 캐시에 저장해두어 점차 성능을 향상시킨다.따라서, API가 최초로 구동되고나면 상대적으로 높은 최적화로 컴파일된 메소드들이 많지 않기 때문에, 처음 요청은 느릴 수 밖에 없는 것이다. 물론 클래스 로딩 외에도 다양한 이유가 있을 수 있다. (DB 커넥션 l.. 더보기
[Kubernetes] JVM Heap 메모리 모니터링 (With. Visual VM, jstat) JVM 힙 메모리를 모니터링 해야할 일이 생겼다. 로컬이나 물리장비에 떠있는 서버를 Visual VM 연동을 통해 모니터링 해본 경험은 있지만, Kubernets 환경에서의 Visual VM 연동은 낯설었다. # Visual VM ? - https://visualvm.github.io/ VisualVM: Home News: July 19, 2022: VisualVM 2.1.4 Released This release introduces several heapviewer improvements. From now, VisualVM is available as an optional GraalVM component. See the Release Notes for all changes. The tool can be.. 더보기
JVM Memory와 Garbage Collection JVM Memory에 대해 알아보기 전에 JVM에 대한 구조와 개념을 살펴보자 프로그램이 실행되기 위해서는 Windows나 Linux같은 운영체제가 제어하고 있는 시스템 일부인 메모리(RAM)를 제어할 수 있어야 하는데, Java 이전에 C같은 대부분의 언어로 만들어진 프로그램은 이러한 이유 때문에 OS에 종속되어 실행되게 되었다. Java로 만들어진 프로그램은 JVM이라는 프로그램만 있으면 실행이 가능한데, JVM이 OS에게서 메모리 사용 권한을 할당받고 JVM이 Java 프로그램을 호출하여 실행한다. 이렇게 JVM위에서 동작할 수 있는건 JVM이 Java Byte Code를 OS에 맞게 해석해주는 역할을 해주기 때문이다. 하지만 JVM의 해석을 거치기 때문에 C언어 같은 네이티브 언어에비해 속도가 느.. 더보기