[JAVA] 컴파일러와 인터프리터, 그리고 hotspot

2021. 7. 18. 18:32Web


JVM의 핫스팟에 대해 찾아보다 'JIT 컴파일러'라는 단어를 마추졌다. 

JIT가 Just In Time 인건 안다. 아는데..! 그래서 뭐하는 녀석인가요?!?!

그리고 인터프리터와 컴파일러를 대강은 아는데 점점 혼용해서 사용하는 나를 발견했다.

정확히 모른다는 거다.

주말 개인 공부가 이래서 좋다. 모르면 파 볼 시간이 있다.


컴파일러와 인터프리터

C는 컴파일러, JAVA나 PYTHON은 인터프리터, 인터프리터는 한줄씩 실행하는 건 안다.

근데 JAVA도 컴파일러가 있네요..! 비교 들어갑니다ㅎㅎㅎㅎㅎㅎㅎ

 

컴파일러

-전체 소스코드를 기계어로 변환한다.

-인터프리터보다 수행 시간이 빠르다.

 

인터프리터

-소스코드를 한줄씩 실행한다.

-컴파일러보다 느리다.

-실행 중 에러가 뜨면 다음코드를 실행하지 않어 보안측면에서 유리하다. 

 

JAVA에서 컴파일러와 인터프리터

컴파일러와 인터프리터가 다르건 알겠다. 근데 둘 다 소스코드에서 기계어로 변환한다면 왜 둘 모두를 쓰는걸까?

여기서 우리는 자바의 동작구조를 이해해야한다. 

자바는 플랫폼 독립적인 언어고, 이 모든건 JVM 덕에 가능하다. 그리고 이녀석도 가상이긴 하지만 머신(기계)다.

 

1.  java언어로 작성한 .java파일 실행

2.  컴파일: 자바 컴파일러가 .java를 .class로 변환

3.  .class는 바이트 코드로 작성되어있다. 바이트 코드란 JVM 전용 '기계어'다.

4.  인터프리팅: .class 파일을 당신의 기계(컴퓨터)를 위한 기계어로 변환한다.

 

 

핫스팟 HotSpot

그럼 대체 핫스팟이 뭐길래 컴파일과 인터프리터부터 시작했는가다.

핫스팟은 JVM이다. 음...안드로이드로 비교하면 오레오난 마쉬멜로우 정도? 오라클에서 관리하는 JVM버전이다.

JIT 컴파일과 적응 최적화에 포인트인듯. 설명하려면 우선 JIT컴파일러 이야기부터 해야겠다.

 

JIT 컴파일러

-자주 사용되는 메소드를 미리 컴파일하고 캐시해 두는 것.

  이러면 메모리는 많이 쓰이겠지만 실행시간이 빨라진다.

-이걸 최적화라고 하는 듯.

 

다시 핫스팟

이름 그래로 hot한 spot에 집중한다. 그리고 집중이란게 JIT 컴파일러다. 

이제 위키백과의 핫스팟 정의를 이해할 수 있게됐다.

 

 

참고링크

https://m.blog.naver.com/ehcibear314/221228200531

https://ko.wikipedia.org/wiki/%ED%95%AB%EC%8A%A4%ED%8C%9F_(%EA%B0%80%EC%83%81_%EB%A8%B8%EC%8B%A0)