Java17 JIT 컴파일러 동작과정 자바코드를 자바 컴파일러가 컴파일하면 바이트코드(컴파일된 자바코드. JVM이 읽을 수 있는 코드)가 되는데 이를 실행하는 과정에서 인터프리터와 JIT 컴파일러를 실행하는 쓰레드가 같이 돌면서 바이너리 코드(OS들이 읽을 수 있는 바이너리코드)로 변환하게 된다. (바이트코드 실행시 interpreter와 JIT 컴파일러가 동시에 돌아감) JVM 내부의 실행엔진에 있는 인터프리터는 바이트코드 명령어를 하나씩 읽어서 해석하고 실행하는데, 하나하나 해석하면서 실행하기 때문에 느릴 수 있다. JIT 컴파일러는 native code 중에 반복되어 사용되는 코드나 기계어로 변환 시에 많은 리소스가 필요한 부분을 실시간으로 변환해서 기계어로 캐싱해두는 방식으로 최적화를 하기 때문에 인터프리터보다 실행 성능이 좋을 수 .. 2022. 10. 30. JVM 이란? JVM은 자바 가상머신이다.. JRE는 Java api와 JVM으로 구성되어 있고, 여기서 JVM은 자바 애플리케이션을 Class loader를 통해 읽어 자바 API와 함께 실행한다. 자바 바이트코드(.class 파일)를 각 OS별로 특화된 코드로 변환(인터프리터, JIT 컴파일러에서 수행함)하여 네이티브OS에 맞게 머신코드로 변환한 뒤 실행한다. 따라서 JVM은 특정 플랫폼에 종속적이라 할 수 있다. (각 OS별로 다른 JVM 버전이 존재함) 간략한 자바코드 실행순서: 자바코드 → 자바 컴파일러 → 바이트코드 → 인터프리터 or JIT컴파일러 → 바이너리코드 기술적인 정의로서의 JVM은 자바 코드를 실행하고 해당 코드에 대해 런타임 환경을 제공하는 소프트웨어 프로그램에 대한 사양이다. (다양한 버전의.. 2022. 10. 30. Java의 Call by value(Pass by value), Swap 구현 방식 4가지 C++에서의 swap() 유틸리티 함수는 주소값을 교환하는 call by reference 방식으로서 동작한다. tmp 변수를 중간 매개로 주소값(값의 위치)을 서로 교환한다. void swap(int &a, int &b) { int temp = a; a = b; b = temp; } Java에서 primitive type, reference type에 해당하는 값을 저장하는 방식에 차이가 있다. JVM 메모리에서 primitive type은 stack 영역에 저장된다 reference type은 그 객체인 값이 heap 영역에 저장되고, stack 영역에 있는 변수가 객체의 주소값을 가지고 있다. 만약 swap 메서드에서 reference 변수를 파라미터로 넘기게 되면 해당 객체를 가리키는 새로운 변수.. 2022. 10. 9. 자바에서 컬렉션 정렬 시에 사용하는 인터페이스 2가지 - Comparable vs Comparator 자바에서 컬렉션 정렬 시에 필요한 인터페이스로는 Comparable, Comparator가 있다. java.lang.Comparable 인터페이스 - 이 인터페이스를 구현하는 객체 스스로에게 부여하는 한가지 기본 정렬 규칙을 설정한다 Comparable을 구현하고 있는 클래스들은 같은 타입의 인스턴스끼리 서로 비교할 수 있는 클래스이다. (wrapper 클래스, String, Date, File…). 기본 정렬 기준을 구현하는 데에 사용한다. 인터페이스 내의 int compareTo(T o) 메서드는 객체 자기 자신(this)와 매개변수 객체 o를 비교한다 두 객체가 같으면 0, 비교하는 값보다 작으면 음수, 크면 양수를 반환한다 기본적으로 오름차순으로 정렬되는데, 내림차순 or 다른 기준에 따라 정렬하.. 2022. 10. 9. 이전 1 2 3 4 5 다음