회사 테크 블로그에 기고한 글을 옮겨놨습니다. 원본 글 : https://hyperconnect.github.io/2019/10/28/jackson-serialize-for-global-caching.html 안녕하세요, 하이퍼커넥트 Azar API팀의 Fitz 입니다. 이 글에서는 아자르 API에서 로컬 캐싱을 글로벌 캐싱으로 개선하며 데이터의 일관성을 보장하기 위해 Jackson의 직렬화 옵션을 활용한 경험과 Jackson에 개선되었으면 좋겠다고 생각한 점을 Jackson에 이슈업하고 코드로 기여한 경험을 공유합니다. 아자르 API에서는 sticky session을 사용합니다. 그래서 "동일한 유저는 동일한 서버로만 접속한다"라는 것이 보장되어 로컬 캐싱으로 처리하던 로직이 있었습니다. 이 캐싱 로직..
요새 새로운 API를 개발할 때 node.js로 개발하는 비율이 점점 늘어나는 것 같습니다. 저도 node.js를 접해가면서 "다들 노드 쓰니까 나도 써야지" 가 아닌 개발자스럽게 "노드는 이런 장점이 있으니 이런 상황에 적절한 솔루션이 되겠군" 이라는 생각으로 접근해보고자 생각했던 내용을 정리해보았습니다. 1. Blocking / Non-Blocking IO자바의 Blocking IO자바는 IO가 일어날 때마다 스레드가 블록상태가 됩니다. IO는 파일읽기/쓰기 네트워크통신 등의 입출력 행위를 말합니다. 간단한 예로는 데이터베이스로의 CRUD 작업이 있습니다.스레드가 블록상태가 되면 그 스레드는 작업불가 상태이기 때문에 CPU를 사용하지 못합니다. 만약 웹의 상황이라면 하나의 요청을 끝까지 처리한 후에야..
JDK9 버전이 2016년 9월에 정식배포된다 새로 나올 자바 신기술의 세부내용은 다음과 같다 102: Process API Updates 110: HTTP 2 Client 143: Improve Contended Locking 158: Unified JVM Logging 165: Compiler Control 197: Segmented Code Cache 199: Smart Java Compilation, Phase Two 201: Modular Source Code 211: Elide Deprecation Warnings on Import Statements 212: Resolve Lint and Doclint Warnings 213: Milling Project Coin 214: Remove GC ..
기존에는 자동으로 close할 리소스들을 아래와 같이 try문의 괄호 안에서 선언해야했다. try( Resource r1 = new Resource("resouce1"); Resource r2 = new Resource("resource2");){ //...... } 하지만 2016년 초에 발표될 예정인 자바9에서는 아래와 같이 이미 선언된 변수를 괄호안에 써줘도 자동으로 close가 된다. Resource r1 = new Resource("resouce1"); Resource r2 = new Resource("resource2"); try( r1; r2){ //........ }
여태까지의 Garbage Collector는 Young영역과 Heap 영역으로 나뉘었었다.하지만 이 Colletor는 region이라는 여러 사각형이 모인 바둑판같은 모양의 많은 영역으로구성되어 있다. 이 region이라는 구역은 약 2천개정도로 각각 크기는 기본 1MB부터 최대 32MB까지 지정가능하다.이 구역들이 각각 Eden, Survivor, Old의 역할을 번갈아가면서 하고,Humongous라는 영역도 존재한다. Young GC의 수행1. 몇 개의 구역을 선정하여 Young 영역으로 지정2. 이 구역에 객체가 생성되면서 데이터가 쌓인다.3. Young 영역으로 할당된 구역에 데이터가 꽉 차면 GC를 수행한다.4. GC를 수행하고 살아있는 객체만 Survivor 구역으로 이동시킨다. 이렇게 살아남..
Low-Latency Collector로도 알려져있으며 힙 메모리가 클 때 적합하다.Young에 대한 GC는 Parallel Collector와 동일하지만 Old에 대한 GC는 다음의 단계를 거친다. Old영역에 대한 GC1. 초기표시 : 매우 짧은 대기시간으로 살아있는 객체를 찾는다.2. Concurrent 표시 : 서버수행과 동시에 살아있는 객체에 표시3. 재표시 : 2번 단계에서 표시하는 동안 변경된 객체를 다시 표시4. Cuncurrent Sweep : 표시되어 있는 쓰레기들을 정리 이 방식은 밀집단계를 거치지 않기 때문에 메모리를 몰아놓는 작업을 수행하지 않는다.그러므로 GC 이후에 빈공간이 발생하므로 -XX:CMSInitiatingOccupancyFraction=n 옵션으로Old 영역의 %를 ..
JDK 5.0 업데이트6부터 사용가능하며 Young영역에 대한 GC는 Parallel Collector와 동일하다.하지만 Old영역의 GC는 다음의 3단계를 거친다. Old영역의 GC1. 표시 : 살아있는 객체를 식별하여 표시2. 종합 : 이전의 GC에서 살아남은 객체를 모아둔 영역에 살아있는 객체의 위치를 조사3. 밀집 : GC 후 밀집을 수행한다. 수행 이후에는 밀집된 영역과 비어있는 영역으로 나뉜다. 이 방식도 Parallel Collector와 동일하게 여러 CPU를 사용하는 서버에 적합하다. GC에 사용하는 스레드 개수는 -XX:ParallelGCThreads=n 옵션으로 조정가능하고,이 방식을 사용하려면 -XX:+UseParallelOIdGC 옵션을 자바명령에 추가해주면 된다.
Throughtput Collector 라고도 알려져 있는 이 방식의 목표는다른 CPU가 대기 상태로 남아있는 것을 최소화 하는 것이다. 이 방식은 Young의 콜렉션을 병렬로 처리하여 많은 CPU를 사용하기 때문에 GC의 부하를 줄이고프로그램의 처리량을 증가시킬 수 있다. Old영역의 GC는 Serial Collector와 마찬가지로 Mark-sweep-compact 콜렉션 알고리즘을 사용한다.Parallel Collector의 사용을 명시적으로 지정하려면 -XX:+UseParallelGC 옵션을 자바명령에 추가한다.
- Total
- Today
- Yesterday
- 리액트
- 프로세서
- Java8
- gitlab
- 날짜
- react
- 자바
- 람다
- 알람
- Stream
- 퍼포먼스
- 성능
- Java
- javascript
- 컴퓨터 시간
- opensource
- 자바 성능
- Jackson
- 시간
- 클로저
- json
- 메모리
- rambda
- Docker
- RAMDA
- 성능개선
- 자료구조
- 코어
- Swift 2.0
- Clojure
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |