본문 바로가기

Java22

Java - K8S를 활용한 JVM WarmUp 문제점 K8S 환경에서 운영 중인 스프링 어플리케이션을 자주 배포 하다 보니, 배포 직후 속도가 느려진다는 문제점을 찾았다. 자바 어플리케이션은 최초 실행됐을 때 속도가 느리다는 특징이 있다. JVM은 컴파일된 바이트코드(클래스파일)를 필요할 때마다 클래스로더를 통해 JVM에 로딩해서 사용하고, 인터프리터 방식을 사용하기 때문에 인터프리터가 최적화(JIT 컴파일러) 될 시간이 필요하다. 배포 후 사용하다 보면 웬만한 클래스들은 로드가 완료되고, JIT 컴파일러도 동작하면서 속도가 점차 개선이 된다. 하지만 서비스 업데이트, 패치 등의 이유로 배포할 때마다 다시 속도가 느려지게 된다. 어떻게 이 문제를 해결할 수 있을까? JVM WarmUp JVM 웜업은 위에서 말한 JVM의 특징이자 단점을 최소화시키기.. 2023. 6. 19.
Java - Metaspace란? Metaspace란? Metaspace는 Java 8부터 새로 생긴 영역으로, 기존에는 Heap의 PermGen 영역이 담당하던 부분을 대체하고, 힙 영역에서 네이티브 메모리 영역으로 이전하게 되었다. Metaspace에는 기존의 PermGen과 거의 똑같이 Java class들이 런타임에 알아야 할 모든 정보를 가지고 있다. 클래스로더가 기존에는 PermGen의 메소드 영역에 클래스 메타데이터들을 올렸다면 이제는 Metaspace에 로드한다. Klass structure: 자바 런타임의 클래스 상태들을 가지고 있는 정보들, VTable과 ITable을 포함 Method 메타데이타 : 바이트코드, 메소드 정보, 예외 테이블, 상수, 등등 상수 풀 JIT을 위한 메소드 카운터 어노테이션 String Poo.. 2023. 1. 15.
Java - Lombok 주의사항 2 - @EqualAndHashCode Lombok 주의사항 2 - @EqualAndHashCode 지난 시간에는 @AllArgsConstructor와 @RequiredArgsConstructor를 사용할 때 주의 사항에 대해서 알아보았다. 오늘은 @EqualAndHashCode를 사용할 때 주의사항에 대해서 알아보도록하겠다. @EqualAndHashCode @EqualAndHashCode를 사용하면 자동으로 hashCode()와 equals() 메소드를 생성해 준다. equals()는 필드값들을 비교해서 동일한 객체인지 판단하고 hashCode()는 필드값들을 사용해서 해시코드를 생성해주는 메소드이다. @EqualAndHashCode로 문제가 될 수 있는 부분은 hashCode()인데 예시를 통해 어떤 문제가 생길 수 있는지 확인해보자. (.. 2022. 9. 19.
Java - Lombok 주의사항 1 @AllArgsConstructor @RequiredArgsConstructor Lombok 사용시 주의사항 지난 시간에는 Lombok에서 주로 사용하는 기능들에 대해서 알아보았다. Lombok을 잘 사용하면 참 편리하지만 Java가 그렇게 단순한 언어는 아니다보니 무분별하게 사용하면 예기치 못한 문제를 마주칠 수 있다. 이번 시간에는 Lombok을 사용할 때 반드시 알고 주의해야할 사항들에 대해서 알아보도록하겠다. 오늘은 @AllArgsConstructor 와 @RequiredArgsConstructor을 사용할 때 주의할 점에 대해서 알아보겠다. Lombok의 기본에 대해서 궁금하다면 이전 글을 참고하길 바란다. https://today-devstart.tistory.com/34 Java - Lombok이란? Boilerplate 코드들 Java를 사용하기 위해서는 엄청나게 많은.. 2022. 9. 18.