# JIT

32개의 포스트
post-thumbnail

자바스크립트 엔진의 최적화 방식 (AJITC)

목차 > JITC (Just In Time Compiler) JITC in Javascript Adaptive JITC V8 엔진 작동방식 인용 마지막으로 레퍼런스 JITC (Just In Time Compiler) JIT 컴파일러는 컴파일러와 인터프리터의 장점을 합치고자 만들어진 개념입니다. 현재 많이 사용되는 Javascript 엔진은 모두 JITC 방식을 사용합니다. JIT 컴파일러는 처음에 소스코드를 파싱하여 중간언어(IR)인 바이트 코드 형태로 먼저 변환합니다. 인터프리터 모드라면 ? ➡️ 바이트 코드를 하나씩 읽어가며 동작을 수행합니다. JIT 모드라면? ➡️ 생성된 바이트 코드를 기반으로 네이티브 코드로 컴파일합니다. 빠르고 쉬운 이해를 위해 컴파일러와 인터프리터의 차이점을 짚고 넘어가겠습니다. 💻 컴파일러 실행시간 컴파일러는 프로그램 전체를 스캔하여 이를 모두 기계어로 번역합니다. 이 때문에 대개 컴파일러는

2023년 8월 19일
·
0개의 댓글
·
post-thumbnail

[TIL] 자바스크립트는 인터프리터 언어이다?

자바스크립트는 인터프리터 언어이다. 라고 굳게 믿고있었던 나.. 자바스크립트를 다시 공부하면서 자바스크립트 엔진이 JIT 컴파일을 사용한다는 것을 알게되었다. 그러면 인터프리터 언어가 아니냐? 하기엔 또 MDN이 > JavaScript is a lightweight, interpreted, or Just In Time compiled programming language. 인터프리터거나 JIT로 컴파일된 프로그래밍 언어라고 한다. 기본적으로는 인터프리터 언어인데 JIT 컴파일을 지원한다는 뜻인지..🤔 잘 모르겠어서 이에 대해 자세히 알아보기로 했다! 컴파일러와 인터프리터 우선 컴파일러와 인터프리터가 무엇인지에 대해 알아보자. Compiler(컴파일러) 컴파일러는 프로그램 전체를 스캔하여서 고급 언어(사람이 이해할수 있는 언어)를 기계어로 번역한다. 전체를 스캔하기 때문에 초기 스캔 시간이 오래걸리지만, 초기 스캔을 마치면 실행 파일을

2023년 8월 11일
·
1개의 댓글
·

[Dart] dart 입문 (1) - 컴파일 방식, dart 특징

노마드 코더님의 무료강의를 듣고 개인 정리용으로 작성 Dart의 특징 객체지향 언어이다 User interface에 친화적이라 빠르다 UI에 최적화 되어있다 생산적인 개발환경, 모든 플랫폼에서 빠름 Null safety Dart의 Null safety 방식 Dart, flutter 모두 구글에서 제작된 언어로 상호적임. dart를 수정해서 flutter를 빠르게 만들 수 있음 Dart compile Dart엔 dart web, dart native라는 두개의 컴파일러가 존재. dart web: dart로 쓴 코드를 javascript로 변환해주는 컴파일러 dart native: 내가 쓴 dart 코드를 여러 cpu 구조에 맞게 변환 컴파일 방식 JIT(just in time)방식과 AOT(ahead of time) 방식이

2023년 8월 9일
·
1개의 댓글
·

JIT vs AOT Compilation

JIT(Just In Time) image JIT 란? > JIT 컴파일은 소스코드를 즉시 기계어로 변환하는 것이 아닌, 중간 단계의 중간 언어(Intermediate Language 또는 IL)로 컴파일 후, 실행 시점 단계에서 실제 기계어로 컴파일 하는 방식이다. > - 대표적인 JIT 컴파일을 사용하는 언어는 Java, C# 등을 예로 들 수 있다. Strenght / Weekness Strenght 플랫폼 독립성 : JIT 컴파일은 바이트 코드를 실행하는 시점에 해당 플랫폼에 맞는 기계어로 변환하여 실행 최적화 : JIT 컴파일은 런타임에 최적화를 수행 메모리 사용량 : JIT 컴파일은 런타임에 필요한 코드만을 메모리에 올 업데이트와

2023년 7월 25일
·
2개의 댓글
·
post-thumbnail

[Java] JDK, JRE, JVM, JIT

JVM(Java Virtual Machine) JVM은 자바 가상머신(Java Virtual Machine)의 약자입니다. Java Byte Code 를 OS 에 맞게 해석 해주는 역할을 합니다. 컴파일러가 .java → .class 바이트 코드로 변환하면 JVM이 OS가 바이트 코드를 이해할 수 있도록 해석해줍니다. 그래서 JVM은 플랫폼에 의존적입니다. 하지만 컴파일된 바이너리 코드는 어떤 JVM에서도 동작시킬 수 있습니다. JVM 구조 JRE(Java Runtime Environment) JRE는 자바 실행환경(Java Runtime Envi

2023년 6월 1일
·
0개의 댓글
·
post-thumbnail

[네이버클라우드캠프] -22일차(프로그래밍 개론 02)

Java : hybrid 방식 = compile + iterprete 방식 Interprete 방식 중 V8 모델 특징 V8은 Google Chrome 및 Node.js에서 사용하는 고성능 오픈 소스 JavaScript 및 웹 어셈블리 엔진 다른 언어와 달리 V8 엔진은 컴파일러와 인터프리터를 모두 사용하며 저스트 인 타임(JIT)을 진행 코드 처리에는 기본적으로 세 가지 단계가 포함: >코드 구문 분석 코드 컴파일 코드 실행 1 . 구문 분석 단계: 구문 분석 단계에서 코드는 해당 토큰으로

2023년 5월 23일
·
0개의 댓글
·
post-thumbnail

#2 - 자바스크립트 엔진/동작 원리/제약사항

🏎 자바스크립트 엔진 자바스크립트 엔진(JavaScript engine)은 자바스크립트 코드를 실행하는 프로그램 또는 인터프리터이다. 최초의 엔진은 단순한 인터프리터였지만, 모든 현대적 엔진은 JIT(Just-in-time) 또는 런타임 컴파일을 사용하여 성능을 향상시키고 있다. 🤔 JIT 방식은 무엇? JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법을 말한다. JIT 컴파일러는 실행 시점에서 인터프리트 방식으로 기계어 코드를 생성하면서 캐싱(메모리에 데이터를 임시 저장 후 불러쓰는 것)한다. 그렇기에 같은 함수가 여러 번 불릴 때 매번 기계어 코드를 생성하는 것을 방지할 수 있다. 이런 측면에서 JIT 컴파일러는 인터프리트 방식과 정적 컴파일 방식을 혼합한 방식으로 볼 수 있다. 💪 자바스크립트 엔

2023년 5월 23일
·
0개의 댓글
·

Python을 더욱 빠르게!

파이썬은 어떻게 작동할까? Python 언어는 컴파일이 아닌 인터프리터 언어로 구분이 된다. 그렇다면 컴파일은 무엇이고, 인터프리터는 뭐란 말인가? 컴파일 언어(C, C++): 컴파일 언어로 작성된 코드를 실행하기 위해선 먼저 코드를 컴파일하고, 컴파일된 실행파일을 실행 해야한다. 장점: 실행속도가 무지 빠르다. 단점: 코드를 간단하게 수정하더라도, 수정할 때마다 컴파일이 필요하다. 인터프리터 언어(Python): 인터프리터 언어는 컴파일 단계없이 바로 코드를 실행할 수 있다! 장점: 코드 수정 시 결과 보기가 굉장히 용이하다. 단점: 실행속도가 컴파일 언어 대비 매우 매우 느리다. 그렇다면, 인터프리터 언어는 어떻게 작동할까? CPython vs PyPy 인터프리터 언어는 어떻게 작동하냐에 따라 CPython과 PyPy 방식이 등장한다. PyPy라는 말은 코딩 테스트할 때 기본 파이썬보다 빠르다 정도로만 알고 있었을 것이

2023년 5월 12일
·
0개의 댓글
·
post-thumbnail

JIT Compiler(feat.C1,C2 Compiler)

정적 컴파일과 동적 컴파일 컴파일러에서 프로그램 코드를 기계어로 변환할 수 있는 시점은 2가지가 있다. 👉 프로그램 실행 전 👉 프로그램 실행 중 실행시점 전에 기계어로 변환 하는 컴파일러를 정적 컴파일러라고 하고, 실행중 기계어로 변환하는 컴파일러를 동적 컴파일러(인터프리터 언어)라 한다. > 인터프리터 Interpreter는 컴파일러처럼 고레벨언어를 기계어(저레벨언어)로 해석해주는 번역 프로그램입니다. 컴파일러는 전체 소스코드를 보고 명령어를 수집하고 재구성하는 반면 인터프리터는 소스코드의 각 행을 연속적으로 분석하며 실행합니다. 때문에 일반적으로 각 행마다 실행하는 인터프리터보다는 컴파일러가 더 빠릅니다. 자바스크립트와 파이썬이 대표적인 인터프리터 언어고, C,C++은 컴파일언어, 자바는 컴파일러와 인터프리터 모두 해당됩니다. [출처](

2023년 5월 6일
·
0개의 댓글
·
post-thumbnail

Dart 기본 지식

Dart Dart Compiler Dart Native ARM32 ARM64 x86_64 Dart Web JavaScript Machine code JIT just-in-time 개발 도중 결과를 바로 확인 가능 AOT ahead-of-time 개발 이후 빌드시 빠른 실행 가능 Null Safety Dart 설치 (Windows) https://dartpad.dev/ 웹 에디터 기본 설치 방법 Chocolatey 설치 Dart 설치

2023년 3월 27일
·
0개의 댓글
·
post-thumbnail

[Dart] 컴파일 방식 이해하기

플랫폼별 컴파일 Dart의 컴파일러 기술을 사용하면 다양한 방식으로 코드를 실행할 수 있다. ✅ 네이티브 플랫폼 모바일 및 데스크톱 장치를 대상으로 하는 앱의 경우 Dart에는 컴파일 기능이 있는 과 기계 코드 생성을 위한 컴파일러가 모두 포함되어 있다. ✅ 웹 플랫폼 웹을 대상으로 하는 앱의 경우 Dart는 개발 또는 프로덕션 목적으로 컴파일할 수 있다. 웹 컴파일러는 Dart를 JavaScript로 변환한다. > 플랫폼 별로 컴파일러를 다르게 사용하기 때문에 Flutter에서 거의 모든 플랫폼으로 개발이 가능하다. Dart Web Dart Web을 사용하면 JavaScript로 구동되는 웹 플랫폼에서 Dart 코드를 실행할 수 있다. Dart Web을 사용하면 Da

2023년 1월 31일
·
0개의 댓글
·

Spring Boot의 버전 별 특징 (JIT vs AOT)

안녕하세요 오늘은 Spring boot의 최신 버전인 3.0.1 버전의 특징과 새롭게 추가된 AOT에 대해서 JIT과의 비교를 통해 알아보는 시간을 갖도록 하겠습니다. 출처 : https://docs.spring.io/spring-boot/docs/3.0.0/reference/html/native-image.html#native-image Spring boot 3.x 버전부터 GraalVM Native Image를 제공합니다. GraalVM이란 어플리케이션의 성능 및 효율성을 크게 향상시키는 고성능 런타임으로 JVM과 마찬가지로 Java 바이트코드를 기계어로 컴파일합니다. GraalVM의 컴파일러는 객체 할당을 효과적으로 제거해서 추상화된 프로그램에서 큰 성능을 발휘할 수 있다고 합니다. ![](https

2023년 1월 9일
·
0개의 댓글
·

Why dart?

왜 다트를 사용하는가? **1. UI 최적화 생산적인 개발환경 모든 플랫폼에서 빠른 언어** 다트에는 두 가지 컴파일러가 있다. Dart Web : Dart코드를 javascript로 변환해주는 컴파일러 Dart Native : Dart코드를 CPU의 아키텍처에 맞춰 변환해주는 컴파일러 다트를 IOS, Android, Windows, Linux, Mac으로 컴파일 할 수 있는 이유 다트의 컴파일 방식 JIT : just-in-time (배포할 때) AOT : ahead-of-time (개발할 때) AOT (ahead-of-time) 코딩을 다 하고나서 컴파일을 할 CPU 아키텍처를 선택해야 함. 컴파일을 먼저하고 그 결과물인 바이너리를 배포하는 방식. 시간이 오래걸림. 화면 개발을 하는데 좋은 방식이 아님. 버튼 하나 바꾸는데 컴파일이 너무 오래걸리면 개발하다가 화가 많이 날거니까. JIT (just-in-time) Dart

2022년 12월 29일
·
0개의 댓글
·

2022.12.2 TIL

JIT 컴파일 JIT 컴파일 또는 동적 번역, Dynamic Translation 은 프로그램을 실행하는 시점에 기계어로 번역하는 컴파일 기법이다. 또 다른 방식으로 인터프리트 방식은 실행 중 프로그래밍 언어를 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행하는 기법이다. Garbage Collection 프로그램을 개발하다 보면 유효하지 않은 메모리인 Garbage 가 발생하게 된다. C언어는 free() 라는 함수를 통해 직접 메모리를 해제해주어야 한다. 하지만 Java 나 Kotlin 에서는 JVM의 Garbage Collector가 주기적으로 불필요한 메모리를 알아서 정리해준다. 대신 Java에서 명시적으로 불필요한 데이터를 표현하기 위해서 일반적으로 null을 선언해준다. > 물론 Java에서도 System.gc()를 이용해 호출할 수 있지만, 해당 메소드는 시스템의 성능에 매우 큰 영향을 미치므로 절대

2022년 12월 2일
·
0개의 댓글
·
post-thumbnail

[Java를 실행하면 어떻게 진행이 되나요?] 2-2. JVM-Execution Engine

🔍 Java 실행 과정 오늘은 두 번째 항목인 Execution Engine에 대해서 알아보자 ✔ Class Loader Execution Engine Runtime Data Area GarbageCollector 🔍 Execution Engine 말 그대로 실행 엔진이다. 그럼 실행 엔진은 이제 Class Loader에 의해서 메모리 영역으로 전달된 바이트 코드들을 실행할때 동작할 거라는 걸 의미로 짐작해서 생각해볼 수 있었다. 이렇게 바이트 코드들을 바로 실행하는 건 불가능하다! 왜냐하면 CPU는 바이트 코드를 이해하지 못하기에 기계어로 번역하는 과정이 필요하다! 그렇게 하기 위한 방법에는 대표적으로 2가지 방법이 있다고 한다. Inte

2022년 11월 29일
·
0개의 댓글
·
post-thumbnail

JIT(Just In Time Compiler)

Java 코드는 어떻게 실행될까? Java 코드는 두 번의 컴파일 과정을 거쳐 실행된다. 첫번째로 컴파일 환경에서 JAVAC Compiler에 의해 자바 코드(.java)를 바이트 코드(.class)로 변환하는 변환되며, 두번째로 JVM 상에서 런타임 환경에서 바이트 코드를 기계어(Native Code)로 변환시킨다. 이때 바이트코드를 기계어로 번역하는 컴파일러가 JIT 컴파일러이다. 정적 컴파일과 동적 컴파일 프로그램 코드가 기계어로 변환되는 시점은 크게 프로그램 실행 전, 프로그램 실행 중으로 구분된다. 프로그램 실행 전에 기계어로 변환하는 것을 정적 컴파일이라 하고, 프로그램 실행 중에 기계어로 변환하는 것을 동적 컴파일이라 한다. 정적 컴파일을 사용하는 언어는 C, C++이 있다.

2022년 10월 30일
·
0개의 댓글
·

JS V8 Engine

자바스크립트 >- 가벼운 스크립트 언어 인터프리터를 이용해 런타임 시 코드를 한줄 한줄 번역해서 실행하는 언어이다. 일급함수를 가진 프로그래밍 언어이다. 웹페이지, Node.js(브라우저 외부환경) 뿐 아니라 자바스크립트 엔진이 있는 어떤 곳에서도 자바스크립트 언어 사용 가능하다. Prototype-based 로 해서 멀티 패러다임이 가능하고 싱글 스레드 환경 동적언어 JS V8엔진? V8은 웹 브라우저를 만드는데 기반을 제공하는 구글에서 개발한 오픈소스 자바스크립트 엔진이다. V8은 자바스크립트 코드를 실행 전에 최적화된 머신 코드로 컴파일하는 엔진이다. 즉, V8은 자바스크립트 코드를 받아 컴파일하고 실행하는 C++ 프로그램이다. 크롬 브라우저와 노드 js에서 사용된다. V8은 왜 생겨났는가? 웹 브라우저 내부에서 자바스크립트의 속도 개선을 위해서 고안되었다. = 자바스크립트 엔진은 웹 특성상 유

2022년 8월 24일
·
0개의 댓글
·
post-thumbnail

Java 실행 과정, 컴파일러 그리고 메모리 영역에 대하여

예전에 간단하게 [JVM에 대해서 정리] (https://velog.io/@pjh612/JAVA-JVM%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC) 해봤었는데, 이번에 팀원들과 스터디를 통해 다시 한번 공부를 하면서 복습도 하고 여러가지 새로운 것들을 알게되어 정리하고자 한다. 자바의 실행 과정 .java파일을 자바 컴파일러가 바이트 코드인 .class 파일로 변환 시킨다. 실행 시, 클래스 로더는 바이트 코드로 변환된 클래스들을 로드, 링크하여 JVM에 탑재 시킨다. 실행 엔진은 클래스 로더로 메모리 영역에 탑재된 바이트 코드를 실행한다. 실행 엔진은 내부에서 바이트 코드를 기계어로 변환 시켜 실행을 한다. 인터프리터 & JIT 컴파일러 자바 실행 엔진은 런타임 시점에 인터프리터 방식으로 한 줄씩 바이트 코드를 읽어 실행 시킨다. 한 줄씩 읽는 인터프리터의 특징 때문에 속도가 느리다. 그럼에도 기본 변환 방식을 컴파일 방식

2022년 5월 22일
·
0개의 댓글
·
post-thumbnail

Flutter 🔥 reload가 가능한 이유

Hot Reload란? > 플러터가 내세우는 큰 장점중 하나이다. > 이 기능을 사용하면 코드를 수정했을때 즉각적으로 변경 사항들을 앱에 적용할 수 있으며 이때 매우 빠른 속도로 적용되기 때문에 개발할때 아주 편하고 효율적이다. > 한번 맛보면 Hot reload가 되지 않는 개발 환경에서는 매우 불편해진다... 스프링... Hot Reload의 작동원리 > hot reload가 실행되면 현재 실행되고 있는 Dart 가상머신(VM)에 변경된 소스를 전달한다. 그러면 가상머신은 새로운 버전의 필드 및 함수로 클래스를 업데이트한 후 위젯트리를 재빌드한다. 이때 state를 유지하며 main() 이나 initState는 다시 실행되지 않는다. 그 이유는 hot reload 과정에서는 state 객체를 새로 생성하지 않고 웨젯만 리빌드하기 때문이다. Hot Reload가 가능한 이유 > 먼저 플러터는 디버그 모드에서 hot reload가 가능하고

2022년 3월 28일
·
0개의 댓글
·
post-thumbnail

JVM 이해하기

1. JVM이란 무엇인가 > JVM : Java Virtual Machine(자바가상머신) 사람이 에디터로 .java파일을 생성하면 기계가 알 수 없는 고급언어 파일이 된다. 이 파일을 기계가 읽을 수 있게 변환하는 작업을 Compile(컴파일)이라고 하며, Compile된 파일은 bytecode(바이트 코드)로 이루어진 .class 파일이 된다. 하지만 bytecode는 기계어가 아니기 때문에 OS에서 실행 할 수 없다. bytecode로 이루어진 .class 파일을 실행하기 위해서 JVM이 필요하다. 정리하면 JVM란 .java를 실행하기 위한 가상 머신이다. JVM은 결코 단순치 않다. java파일을 실행하기 위해서 여러가지 절차를 거친다. JVM의 대한 자세한 설명은 아래 **[5. JVM 구성 요소](https://velog.io/@chori/JVM%EC%8B%A4%ED%96%89-%EA%B3%BC%EC%

2021년 11월 1일
·
1개의 댓글
·