Java
VM 과 메모리 구조
- 힙과 메서드 영역
- VM 스택
- 네이티브
- pc 레지스터
GC
GC root 개념
C 의 그림자인 finalizer()
도구
JDK imbedded
- jps
- jconsole
- javac
Ecosystem
- gradle
- jmeter
- jfr
유용한 지식들
split() vs. StringTokenizer
타겟이 아주 짧고 delimeter 가 유니코드가 아니라면 StringTokenizer 가 조금 더 빠르다.
그 외엔 split() 이 안정적 성능을 보여준다.
NPE 방어적 코드
- 출신이 확실하지 않은 객체의 메서드를 쓰는걸 피하기
- StringUtils 같은 라이브러리 사용
- Optional 사용
스트림과 Side effect
자바에서 스트림은 보통 두가지
- streaming (갯수가 정의되지 않은 콜렉션 비슷한 것.)
- stream api 를 유한한 콜렉션에 쓰는 것.
첫 번째는 reactor 에서 사용하는 모노 플럭스. (~함수형 프로그래밍) 소스, 싱크 개념.
두 번째도 함수형 프로그래밍인데, 갯수가 정해져 있는 경우에도 쓰는 경우.
대체로 스트림 API 사용하면 보기도 편하고 좋긴 한데, side effect 가 금지되어 있는 점만 주의하면 됨.
Side effect 를 주고 싶으면 스트림 안으로 끌어들이던지, for 문으로 고쳐쓰던지 하면 된다.
비동기 프로그래밍
스프링 프레임워크에선 @Async 를 void 리턴하는 메서드에 달아서 딸깍 만들지만, js 에서 하듯 Future 를 사용해야 할 일이 생길 수 있다고 봄.
스레드를 하나하나 관리하지 않아도 되니 @Async 는 좋은 어노테이션이긴 하다. 그래도 프레임워크 도움 없이는 어떻게 구현하는진 기억해 두고 있어야 함.