전체보기(194)
-
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 -
Elastic Search
Elastic Search의 개념 Elasticsearch란 아파치 루씬(Lucene) 기반의 오픈소스 실시간 분산 검색 엔진으로 JSON 기반의 비정형 데이터 분산 검색 및 분석을 지원합니다. 설치와 서버 확장이 매우 편리하며, 실시간 검색 서비스 지원, 분산 및 병렬처리, 그리고 멀티테넌시 기능을 제공하고 다양한 기능을 플러그인 형태로 구현하여 적용할 수 있는 것이 큰 특징입니다. 또한 클러스터로 구성할 수 있기 때문에 검색 대상의 용량이 증가했을 때 대응하기가 매우 수월합니다. Elastic Search의 검색이 빠른 이유 Elastic Search와 RDB의 비교 Elastic Search는 기존의 RDBMS와 데이터를 저장하는 방식이 다릅니다. 각 text들이 포함된 document들을 나열된 ..
2021.07.14 -
Vuex
Vuex란 Vuex란 Vue.js의 상태관리를 위한 패턴이자 라이브러리입니다. Vue.js의 반응성 체계를 효율적으로 활용하여 화면을 업데이트 한다는 특징이 있습니다. 애플리케이션의 모든 컴포넌트에 대한 중앙 집중식 저장소 역할을 하며 예측 가능한 방식으로 상태를 변경할 수 있습니다. Vuex가 필요한 이유 컴포넌트 사이에 용이한 데이터 전달 복잡한 애플리케이션에서 컴포넌트 개수가 많아지면 컴포넌트 간에 데이터 전달이 어려워집니다. Vuex는 이를 해결하기 위해 데이터 통신을 한 곳에서 중앙 집중식으로 관리하기 때문에 데이터 전달을 용이하게 합니다. 컴포넌트 사이의 데이터 흐름 파악 Vue의 컴포넌트 방식인 props, event emit 때문에 중간에 거쳐가야 할 컴포넌트가 많아지거나 이를 피하기 위해..
2021.06.01