콜스택 : 함수를 호출 할 때 함수의 arguments 와 지역변수로 구성된 스택 프레임을 생성해서 스택에 쌓고 컴파일 시 실행된다.
스택은 stack overflow가 발생 할 수 있고 에러가 발생하면 stack trace(현재 스택 추적 console.trace)를 할 수 있다.
메모리 힙 : 동적으로 메모리를 할당해야 하는 경우는 구조화 되지 않은 공간인 Heap에 할당 되어 런타임에 실행 된다.(object, string)
속도를 높히기 위해 인터프린터 대신 JIT(just in time) 컴파일러를 구현해 놓아서 javascript 코드 실행 시에 byte코드나 중간코드를 구현하지 않고 기계코드로 직접 컴파일 한다.
두가지 컴파일러
full-codegen : 간단하고 빠른 컴파일러
Crankshaft : 복잡하고 최적화하는 컴파일러
내부적으로 여러 스레드를 사용한다.
코드를 가져와 컴파일하고 실행하는 주 스레드.
컴파일을 위한 스레드
런타임에게 어떤 메소드에 시간을 많이 쓸지 알려주는 프로파일러 쓰레드
가비지콜렉터를 다루는 스레드
코드를 실행하면 full-codegen가 바로 기계코드로 변환하고
프로파일러 스레드는 메소드에게 최적화 된 데이터들을 모은다.
Crankshaft는 다른 스레드에서 실행되며
자바스크립트 abstract syntax tree를 static single-assignment 정적 단일 할당 (SSA) 으로 불리는 Hydrogen 로 변환하고 (SSA는 컴파일러 안에서 중간언어로 사용된다)
인라이닝, Hydrogen graph 최적화를 한 후 기계어로 변환한다.