본문 바로가기

책리뷰/자바최적화

자바최적화 - JVM

728x90
반응형

 

1. 인터프리팅과 클래스로딩

JVM인터프리터 > 'while루프 안에 switch문'

 

java HelloWorld 로 자바 어플리케이션을 실행하면 OS는 가상 머신 프로세스를 구동한다(자바 바이너리)

자바 가상환경이 구성되고 스택머신이 초기화된 다음 class파일이 실행된다.

 

HelloWorld.class의 main()메서드가 진입점인데 제어권을 이 클래스로 넘기려면 가상머신이 실행되기 전에 클래스를 로드해야한다.(자바 클래스로딩)

 

자바프로세스가 초기화되면서 클래스로더가 차례대로 동작하는데 제일먼저 부트스트랩클래스가 자바런타임코어클래스를 로드한다. (java8이전까지는 rt.jar, 9이후부터는 클래스로딩 개념자체가 바뀜) 

부트스트랩 클래스로더의 주임무는 다른 클래스로더가 나머지 시스템에 필요한 클래스를 로드할 수 있게 

최고한의 필수클래스(ex: java.lang.Object, Class, Classload)만 로드한다. 

 

확장클래스로더가 생긴다.

 

부트스트랩 클래스로더를 부모로 설정하고 필요할 때 클래스로딩작업을 부모에게 넘긴다. 

 

어플리케이션 클래스로더가 생성되고 지정된 클래스패스에 위치한 유저클래스를 로드한다. 

 

2. 바이트코드 실행 

자바 소스코드가 실행되기 까지의 변환 과정

첫 단계는 javac를 통해 컴파일 > .class파일로 바꾼다. (최적화는 거의 하지 않는다)

 

바이트코드는 특정 컴퓨터 아키텍처에 특정하지 않고, 이식성이 좋아 JVM지원 플랫폼 어디서든 실행할 수 있다.

 

 

3. JIT 컴파일

프로그램이 성능을 최대로 내려면 네이티브 기능을 활용해 CPU에서 직접 프로그램을 실행시켜야 한다.

핫스팟은 프로그램 단위를 인터프리티드 바이트코드에서 테이티브코드로 컴파일한다. 

이것을 JIT 컴파일이라고 한다.

 

핫스팟은 인터프리티드 모드로 실행하는 동안 모니터링하면서 자주 실행되는 코드파트를 발견해 JIT컴파일을 수행한다. 

 

JIT방식 컴파일은 컴파일러가 해석 단계에서 수집한 추적 정보를 근거로 최적화를 결정한다는게 가장 큰 장점이다. 

 

728x90
반응형