* JVM 의 Flag

- Boolean Flag

xx : +FlagName -> 해당 설정 사용

xx : -FlagName -> 해당 설정 미사용

- Parameter Flag

- xx : FlagName = yy => 특정 값으로 Flag 설정


* Logger

- log.log(Level.Fine, "x = " + calcX() + " y = " + calcY());

: 로그 레벨과 관계없이 calcX(), calcY() 를 수행하게 됨

- if (log.isLoggable(Level.Fine)) {

log.log(Level.Fine, "x = {} y = {}", new Object[] { calcX(), calcY()});

  }

: 메서드도 호출되지 않고, 배열 객체의 할당도 일어나지 않는다


* Client 처리율 단위

- TPS (Transactions Per Sec) : 초당 트랜잭션 수

- RPS (Requests Per Sec) : 초당 요청 수

- OPS (Operations Per Sec) : 초당 동작 수


* Unix 분석 도구

- SAR (System Accounting Report)

: vmstat, iostat, prstat 등과 같은 구성 도구


* CPU 사용률

- 사용자 시간

: CPU가 App을 실행하는 시간의 백분율

- 시스템 시간

: CPU가 Kernel 코드를 실행시키는 시간의 백분율 (Disk I/O, Network I/O 등)


> 사용률을 높이면 작업을 처리하는 시간이 단축된다


* 자바 모니터링 도구

- jconsole

: Thread 사용률, Class 사용률, GC 활동내역, JVM 활동 내역을 그래픽 형태로 노출

- jhat

: 메모리 힙 덤프를 읽고 보냄

- jmap

: 힙 덤프와 JVM 메모리 사용률 정보를 제공

- jinfo

: JVM 의 특성에 대해 가시성을 제공하고 일부 시스템 특성을 동적으로 설정

- jstack

: java process 스택 덤프를 생성가능

- jstat

: GC 와 클래스 로딩 활동에 대한 정보 제공

- jvisualvm

: JVM 모니터링 + App 프로파일링 + 힙 덤프 생성


* Compilation

- C++ & Fortran

: source -> (compile) -> Binary (Assembly) -> 특정 CPU 에서 실행됨 (AMd or Intel 등)

- PHP & Perl

: source -> (interpreted) -> Interpreter (한줄씩, Code -> Binary) -> 해당 인터프리터를 가진 CPU 에서 실행됨

- Java

: source -> (compile) -> Assembly (Java Bytecode) -> (execute) -> Java Binary 가 JVM 에서 실행됨


* Hotspot VM



* Tiered Compilation

- C1 Compiler (= Client Compiler)

- C2 Compiler (= Server Compiler)

> JVM 시작 시에는 C1 을 쓰고, 그 다음에 코드가 많이 호출되면 C2를 사용


* Escape Analysis

- Compiler 의 최적화 기법 중의 하나

- 예로, Heap 할당된 객체의 참조가 특정 함수 밖으로 벗어나지 않는다면 (escape 되지 않는다면), Stack 을 사용하는 Local 변수로 최적화 시킨다


* Dangling

- 동적할당(Heap 할당) 에서 Memory 가 해제된 곳을 가리키는 포인터


* Concurrent Collector (CMS, G1 (Garbage First))

- 미사용 객체를 훓어보는동안 App Thread 를 멈추지 않고 처리할 수 있음

+ Recent posts