[2] 실시간 Tick 데이터 처리 성능 개선: JSON 기반 처리의 병목을 Binary 전환으로 해결하기
·
[Spring] - Study/Project - CoinFlow(비트코인 차트)
(글을 읽으시며 잘못된 부분이나 아쉬운 부분이 있다면 댓글 부탁드립니다!!) 환경: AWS T2.micro메모리: 512MB목표: 1분/5분/30분 캔들, 심볼(종목) 100개 확장 고려사용자: 100명 예상 안녕하세요 오늘은 Tick 데이터 처리 과정에서의 병목 지점 분석과 병목 지점중 한 부분인 수많은 객체 생성 문제를 해결한 내용에 대해 이야기 해보려고 합니다. 일단 설명드리기에 앞서, Tick 데이터 데이터 흐름을 간단히 소개드리겠습니다. 흐름은 다음과 같습니다.데이터 파이프라인 흐름(API - Collector - Consumer)외부 API - Collector 모듈 - Consumer 모듈로 이어지는 흐름을 간단하게 나타내봤습니다. 가장 먼저, Collector 모듈이 외부 API 에서 T..
G1 GC vs CMS GC
·
JAVA
GC 개요항목CMS GCG1 GC전체 이름Concurrent Mark Sweep GCGarbage First GC기본 전략세대 구분 (Young / Old) + 병행 수집Region 기반 + 논리적 세대 구분 + 병행 수집 + compactSTW(Stop-The-World)일부 발생 (Young GC, Initial Mark 등)일부 발생 (Young GC, Remark 등)단편화 해소❌ 없음✅ 있음 (Evacuation + Compaction)JVM 옵션-XX:+UseConcMarkSweepGC-XX:+UseG1GC (JDK 9 이상 기본값)대상 영역고정된 Young/Old Generation논리적 Young/Old, Region 기반 동적 분할CMS GC 상세 동작구조Heap├── Young Gene..
GC(Garbage Collection)
·
JAVA
📌 GC란?GC는 자바에서 사용되지 않는 객체(= 참조되지 않는 객체)를 Heap 메모리에서 자동으로 회수하는 기능입니다.✅ 목적개발자가 free()나 delete 없이도 메모리 누수를 방지애플리케이션의 안정성 & 유지보수성 향상JVM Heap 메모리 구조 (Generational GC)Heap├── Young Generation│ ├── Eden│ └── Survivor 0│ └── Survivor 1└── Old Generation영역설명Eden객체가 처음 생성되는 공간Survivor 0/1살아남은 객체들이 임시로 이동하는 공간Old여러 번 살아남은 객체들이 올라가는 영역🔍 대부분의 객체는 "금방 죽는다"는 관찰에 기반한 구조 → 세대별 관리Survivor 0/1 두 개로 나뉘는..
Stack vs Heap
·
JAVA
자바에서 Stack 과 Heap ✅ 스택(Stack)과 힙(Heap)은 뭐고, 왜 나뉘는가?자바 프로그램 실행 -> 필요한 데이터를 JVM 에 저장합니다.이때 저장되는 데이터의 성격은 다름 -> JVM 은 크게 Stack 과 Heap으로 나눠서 메모리 관리합니다. 🧮스택(Stack)📌 정의메서드 호출 정보와 지역 변수를 저장하는 공간 → 스레드마다 하나씩 존재합니다.public int add(int a, int b) { int sum = a + b; return sum;}a, b, sum: 모두 지역 변수 → Stack에 저장add() 메서드 호출 정보 (파라미터, 복귀 주소 등) → Stack에 저장⚙️ 작동 방식: LIFO메서드가 호출될 때 → Stack에 쌓임 (Push)메서드가 끝날 때 →..
JIT(Just-In-TIme) Complination
·
JAVA
📌 1. 개요 – JIT 컴파일러란?Java는 "한 번 작성하면 어디서나 실행"을 목표로 하기 때문에, Java 코드는 .java → .class로 변환되어 바이트코드로 실행됩니다. JVM은 이 바이트코드를 인터프리팅하면서 실행하지만, 이 방식은 속도가 느립니다. 그래서 등장한 것이 JIT(Just-In-Time) 컴파일러입니다. JIT 컴파일러는 실행 중 자주 호출되는 메서드(Hot Method)를 감지하여, 해당 바이트코드를 Native Code(기계어)로 변환하여 성능을 극적으로 향상시킵니다.⚙️ 2. JIT 컴파일 동작 흐름.java → javac → .class (Bytecode) ↓ JVM이 실행 중 분석 ..