가비지컬렉터
Mark and sweep
stack에서 heap객체를 참조할때, 참조하지 않는 heap 객체를 unreachable Object 라고 하고, 가비지콜렉터의 제거 대상이 된다.
이때 제거하는 작업을 sweep이라고 하고, reachable Object와 같이 참조하는 객체를 스캔하고 구분하는 작업을 Mark라고 한다.
가비지 컬렉터의 동작
Eden이란 영역에서 채워지면 survival0로 이동(Minor 가비지컬렉터), 여기서 또 채워지면 age를 증가한 채로 survival1로 이동, 이 작업들을 반복하다가 특정 age에 도달하면, (old generation영역으로 이동시킴 : 프로모션이라고 한다., Major 가비지컬렉터)
가비지컬렉터 종류
- Serial GC GC를 처리하는 스레드가 1개이다. , Compact과정이 추가되어서 (파편화된 메모리를 한곳에 모아준다)
- Paraller GC GC를 처리하는 스레드가 여러개이다. Serial GC보다 빠르게 객체를 처리할 수 있다. Parallel GC는 메모리가 충분하고 코어의 개수가 많을 때, 사용하면 좋다.
- Concurrent Mark Sweep GC Stop-The-World === GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. Stop-the-world가 발생하면, GC를 실행하는 스레드를 제외한 나머지 스레드는 모두 작업을 멈춘다., GC 작업을 완료한 이후에 중단한 작업을 다시 시작한다. CMS GC에서는 Stop-the-world 시간을 줄이면서 효율을 높인다.=== 애플리케이션 응답시간이 빨라야 할때 CMS GC를 사용한다. 다른 GC 방식보다 메모리와 CPU를 더 많이 사용한다. Compaction단계가 제공되지 않는다.
- G1 GC 각 영역을 Region영역으로 나눈다. GC가 일어날때 전체영역(Eden,survival,old generation)을 탐색하지 않는다. 응답시간 빠름!
캐시(Cache)
session - redis
JWT할때 redis쓰면 안됨
프로그램
작업의순서, 연주회,음악회 a set of instructions
프로세스
프로그램 엑시큐션 (program in execution)
스레드
프로세스의 덩어리 a segment of a process
node.js
이벤트루프만 싱글스레드로 작동
node.js프로그램은 멀티스레드처럼 작동 이벤트루프만 개발자가 관여하고 나머지 스레드는 프로그램에서 관여한다.
포인터
램의 주소
메모이제이션 피보나치
memoization const memo = []; memo[0] = memo[1] = 1; const fibo(n) { return fibo(n-1) + fibo(n-2) }
CDN
cloudflare akamai aws 자주 소비되는 서비스를 가까운곳에 위치시키므로 빠르게 이용가능.