💻Development
-
[JVM] 컴파일과 최적화 (2) - 백엔드 컴파일과 최적화카테고리 없음 2025. 4. 6. 21:16
바이트코드를 프로그래밍 언어의 중간 표현이라고 생각하면, 컴파일러가 클래스 파일을 로컬 환경(하드웨어 명령어 집합, 운영체제)에 맞는 네이티브 코드로 변환하는 과정을 전체 컴파일 과정의 백엔드로 간주할 수 있음JVM에서 JIT와 AOT 컴파일러는 필수는 아님는 어떤 컴파일러를 제공해야 한다고 규정하지 않았음하지만 백엔드 컴파일러의 컴파일 성능과 최적화 품질은 상용 가상 머신의 우수성을 측정하는 핵심 지표가 됨여기서는 JVM 내부 백엔드 컴파일러의 작업 절차와 원리를 살펴볼 것임따로 명시하지 않는 한 JIT 컴파일러는 핫스팟 VM의 내장 컴파일러를 뜻하고, 가상 머신은 핫스팟 VM을 가리킴주류 JVM들의 백엔드 컴파일러들은 많은 면에서 서로 비슷함 JIT 컴파일러핫스팟 VM과 OpenJ9은 자바 프로그램을..
-
[JVM] 컴파일과 최적화 (1) - 프론트엔드 컴파일과 최적화DevBook/JVM 밑바닥까지 파헤치기 2025. 4. 6. 15:12
'컴파일타임'이라고 하면 뜻이 모호할 수 있음프론트엔드 컴파일러가 *.java 파일을 *.class 파일로 변환하는 과정도 컴파일이고, JVM에서 JIT 컴파일러가 바이트코드를 기계어로 변환하는 과정도 컴파일임. 또한 AOT 컴파일러를 사용하여 특정 하드웨어용 바이너리 코드로 곧바로 컴파일하는 방식도 있음javac와 같은 프론트엔드 컴파일러는 코드 실행 효율 측면의 최적화는 거의 하지 않음성능 최적화를 런타임 컴파일러에 집중하기로 결정했기 때문임javac로 생성하지 않는 클래스 파일(ex. JRuby, 그루비 등으로 작성한 클래스 파일)들도 최적화 효과를 공평하게 누리도록 하기 위해서임한편 '최적화'의 범위를 개발 단계까지 포함시킨다면 javac는 개발자가 작성하는 코드를 단순화하는 등 코딩 효율을 개선..
-
[array] maximum product subarrayAlgorithm/LeetCode 2025. 4. 6. 12:11
✅ Problemhttps://leetcode.com/problems/maximum-product-subarray/description/ ✅ Approach & Solution방식)더보기부분 배열 원소들의 최대 곱 구하기플로우현재 위치에서의 Max, Min을 구한다.subarray 이어야 하므로 연속된 값이 필요하여 현재 위치에서의 Max, Min을 따로 계산함 음수 값에 따라 결과가 달라지기 때문에 Min 값도 트래킹해야 함 (이전까지 음수였고 그 다음 값이 음수이면 곱했을 때 양수가 되는 경우)for문으로 Max, Min을 업데이트한다.Global Max를 구한다. (정답값)class Solution { public int maxProduct(int[] nums) { int max ..
-
[JVM] 바이트코드 실행 엔진DevBook/JVM 밑바닥까지 파헤치기 2025. 4. 5. 17:52
는 바이트코드 실행 엔진의 개념 모델을 정의함가상 머신 구현에서 실행 엔진이 바이트코드를 실행하는 방법은 해석 실행(인터프리터를 통한 실행)과 컴파일 실행(JIT 컴파일러로 네이티브 코드 생성 후 실행) 중 하나임실행 엔진 하나에서 둘 다 포함할 수도, 수준이 다른 여러 JIT 컴파일러를 혼용할 수도 있음여기서는 개념 모델 관점에서 가상 머신의 메서드 호출과 바이트코드 실행에 대해 설명함 런타임 스택 프레임 구조JVM은 메서드를 가장 기본적인 실행 단위로 사용하고, 메서드 호출과 실행을 뒷받침하는 내부 데이터 구조로 스택 프레임을 이용함스택 프레임은 JVM 런타임 데이터 영역에 있는 '가상 머신 스택'의 요소이기도 함스택 프레임에는 메서드의 지역 변수 테이블, 피연산자 스택, 동적 링크, 반환 주소와 같..