
이번에는 Hotspot VM의 한계와 이를 극복하기 위한 GraalVM에 대해 알아보도록 하겠습니다. 1. Hotspot VM과 JIT 컴파일러(Just-In-Time Compiler) [ C 언어의 동작 방식 ] C, C++, GoLang, Rust 등과 같은 컴파일 언어는 컴파일 과정에서 바로 기계어로 번역하고 실행 파일을 만들어낸다. 그리고 컴파일 시에 코드 최적화까지 진행하여 처리 성능이 상당히 뛰어나다. 대신 생성된 기계어가 빌드 환경(CPU 아키텍처)에 종속적이라서, 플랫폼이 바뀐다면 다시 빌드해야 하는 문제가 있다. [ Java 언어의 동작 방식 ] 자바는 이러한 플랫폼 종속적인 문제를 해결하고자 JVM을 도입하였고, 그래서 동작 과정이 조금 다르다. 만약 우리가 자바 애플리케이션을 실행한다..

이번에는 자바를 컨테이너 환경에서 사용할 때 필요한 XX:+UseContainerSupport 옵션에 대해 알아보도록 하겠습니다. 1. 자바의 컨테이너 환경을 위한 XX:+UseContainerSupport 옵션 [ 자바를 컨테이너 환경에서 구동하는 경우의 문제점 ] 자바는 기본적으로 JVM이라는 가상 머신 위에서 동작을 하게 된다. 그렇기 때문에 자바 애플리케이션을 컨테이너 환경에서 구성한다고 하면, 호스트 OS 위에 컨테이너 위에 JVM이 올라가게 된다. 이러한 구조 때문에 자바는 기본적으로 컨테이너 환경을 제대로 이해하지 못한다. 자바는 기본적으로 GC 쓰레드 수 및 기본 메모리 제한과 같은 런타임 기본값을 설정하기 위해 운영 체제를 쿼리(cgroup)한다. 하지만 문제는 결과가 호스트 머신에 대한..

아래의 내용은 토비님과 토비의 스프링 읽기를 하면서 얘기가 나온 부분을 개인적으로 공부한 후에 정리한 것입니다. 1. JUnit의 진화 과정과 public 접근 제어자 Java 진영에서 사용되는 테스트 프레임워크로는 JUnit이 있다. 오늘날 우리에게 익숙한 JUnit4와 5는 각각 2006년과 2016년에 출시되었다. 그리고 그 이전 버전들도 있는데, 이번에는 JUnit3부터 살펴보고자 한다. Junit3: 2007년 마지막 Release Junit4: 2006년 첫 Release Junit5: 2016년 첫 Release [ Junit3의 규칙과 관례 ] JUnit3를 사용해 테스트를 실행하기 위해서는 몇 가지 규칙 및 관례가 있는데, 크게 다음과 같다. 테스트 클래스는 TestCase 클래스를 상속..

이번에는 Integer.valueOf(127) == Integer.valueOf(127)가 True인 이유에 대해서 알아보도록 하겠습니다. 이 글은 Dzone의 글을 번역 및 정리한 내용입니다. 1. 문제 상황 소개 [ 문제 상황 소개 ] 다음과 같은 테스트 코드가 있다고 할 때, 출력 결과를 예상해보도록 하자. @Test void compareInteger() { Integer num1 = 128; System.out.println(num1 == Integer.valueOf(128)); Integer num2 = 127; System.out.println(num2 == Integer.valueOf(127)); System.out.println(Integer.valueOf(127) == Integer.v..
이번에는 자바8에 추가된 CompletableFuture에 대해 알아보도록 하겠습니다. 1. CompletableFuture에 대한 이해[ Future의 단점 및 한계 ]Java5에 Future가 추가되면서 비동기 작업에 대한 결과값을 반환 받을 수 있게 되었다. 하지만 Future는 다음과 같은 한계점이 있었다.외부에서 완료시킬 수 없고, get의 타임아웃 설정으로만 완료 가능블로킹 코드(get)를 통해서만 이후의 결과를 처리할 수 있음여러 Future를 조합할 수 없음 ex) 회원 정보를 가져오고, 알림을 발송하는 등여러 작업을 조합하거나 예외 처리할 수 없음 Future는 외부에서 작업을 완료시킬 수 없고, 작업 완료는 오직 get 호출 시에 타임아웃으로만 가능하다. 또한 비동기 작업의 응답에..