https://docs.oracle.com/en/java/javase/17/docs/specs/jvmti.html#bci
What is the JVM Tool Interface? (JVM TI)
- 정의
- Programming interface used by development and monitoring tools
- 역할
- VM state에 access 하기 위한 VM interface 제공
- profiling, debugging, monitoring, thread analysis, coverage analysis
- profiler는 JVM TI를 매개로 JVM과 소통
- 특징
- 2-way interface A ↔ B JVM ↔ Agent
- byte code instrumentation 이용
- profiler가 profiling info 수집하기 위해서는 해당 profiled application의 byte code를 수정해야 함
- 프로파일에 유의미한 부분에 supporting byte code instructions 삽입
- target application의 일반 실행을 방해하지 않고 독립적인 process 제어 가능
Agent
-
정의
-
특징
- event를 통해 발생 사건을 인지
- query & control the application through many functions
- JVM TI 통해 JVM ↔ agent 소통
- agent는 native language (C 계열) 의해 작성되어 있음
- 보통 개발 도구 / 모니터링 도구 개발에 응용 (ex. Lombok, profilers)
-
배포
- dynamic library를 사용하여 배포
- windows - ddl (Dynamic Linked Library)
- linux - shared object (.so file)
-
Statically Linked Agent
- 정의
- agent image가 VM과 결합된 것
- agent가 Agent_OnLoad_L 라는 이름의 함수를 export