+ All Categories
Home > Documents > 64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화64-bit...

64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화64-bit...

Date post: 04-Aug-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
6
ISSN 2383-630X(Print) / ISSN 2383-6296(Online) Journal of KIISE, Vol. 43, No. 1, pp. 34-39, 2016. 1 http://dx.doi.org/10.5626/JOK.2016.43.1.34 이 논문은 2015 한국컴퓨터종합학술대회에서 ‘64-bit 자바스크립트 적시 컴 파일러를 위한 상수 값 생성 최적화의 제목으로 발표된 논문을 확장한 것임 논문접수 : 2015723(Received 23 July 2015) 논문수정 : 2015925†† 정 회 원 비 회 원 : : 삼성전자 소프트웨어센터 책임연구원 (Samsung Electronics) [email protected] (Corresponding author) 삼성전자 소프트웨어센터 책임연구원 [email protected] (Revised 25 September 2015) 심사완료 : 2015104(Accepted 4 October 2015) Copyright2016 한국정보과학회ː개인 목적이나 교육 목적인 경우, 이 저작물 의 전체 또는 일부에 대한 복사본 혹은 디지털 사본의 제작을 허가합니다. 이 때, 사본은 상업적 수단으로 사용할 수 없으며 첫 페이지에 본 문구와 출처를 반드시 명시해야 합니다. 이 외의 목적으로 복제, 배포, 출판, 전송 등 모든 유형의 사용행위 를 하는 경우에 대하여는 사전에 허가를 얻고 비용을 지불해야 합니다. 정보과학회논문지 제43권 제1(2016. 1) 64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화 (Optimizing Constant Value Generation in Just-in-time Compiler for 64-bit JavaScript Engine) 최형규 이제형 †† (Hyung-Kyu Choi) (Jehyung Lee) 자바스크립트는 웹 페이지에서 HTML과 더불어 널리 사용되고 있다. 많은 자바스크립트 수행 엔진들은 성능 향상을 위해 적시 컴파일러를 채택하고 있다. 최근에는 32-bit 뿐만 아니라 64-bit 마이크 로프로세서가 탑재된 다양한 기기가 소개되고 있으며 이를 위한 적시 컴파일러도 개발되고 있다. 하지만 64-bit 적시 컴파일러는 아직 문제점이 많으며, 특히 메모리 주소와 값들이 64-bit을 사용하여 코드의 크 기가 증가하는 문제점이 있다. 본 논문은 64-bit 환경에서 생성되는 코드, 특히 주소와 상수 값들이 더 많 은 공간을 사용함을 보여주고, 적시 컴파일러가 64-bit 값들의 생성을 최적화하여 메모리 사용량을 줄이는 기법들을 제안한다. 이를 V8 자바스크립트 엔진에 적용하여, OctaneSunSpider 벤치마크에서 생성되는 코드의 크기와 성능을 평가하였다. 성능은 각각 3.6%0.32% 향상되었으며, 코드 크기는 0.7%2.8% 감소하였다. 키워드: 자바스크립트, 64 비트, 적시 컴파일러, 상수 값, 코드 생성, 최적화 Abstract JavaScript is widely used in web pages with HTML. Many JavaScript engines adopt Just-in-time compilers to accelerate the execution of JavaScript programs. Recently, many newly introduced devices are adopting 64-bit CPUs instead of 32-bit and Just-in-time compilers for 64-bit CPU are slowly being introduced in JavaScript engines. However, there are many inefficiencies in the currently available Just-in-time compilers for 64-bit devices. Especially, the size of code is significantly increased compared to 32-bit devices, mainly due to 64-bit wide addresses in 64-bit devices. In this paper, we are going to address the inefficiencies introduced by 64-bit wide addresses and values in the Just-in-time compiler for the V8 JavaScript engine and propose more efficient ways of generating constant values and addresses to reduce the size of code. We implemented the proposed optimization in the V8 JavaScript engine and measured the size of code as well as performance improvements with Octane and SunSpider benchmarks. We observed a 3.6% performance gain and 0.7% code size reduction in Octane and a 0.32% performance gain and 2.8% code size reduction in SunSpider. Keywords: JavaScript, 64-bit, just-in-time compiler, constant values, code generation, optimization
Transcript
Page 1: 64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화 35 1. 서 론

ISSN 2383-630X(Print) / ISSN 2383-6296(Online)

Journal of KIISE, Vol. 43, No. 1, pp. 34-39, 2016. 1

http://dx.doi.org/10.5626/JOK.2016.43.1.34

․이 논문은 2015 한국컴퓨터종합학술 회에서 ‘64-bit 자바스크립트 시 컴

일러를 한 상수 값 생성 최 화’의 제목으로 발표된 논문을 확장한 것임

논문 수 : 2015년 7월 23일

(Received 23 July 2015)

논문수정 : 2015년 9월 25일†

††

정 회 원

비 회 원

:

:

삼성 자 소 트웨어센터 책임연구원

(Samsung Electronics)

[email protected]

(Corresponding author임)

삼성 자 소 트웨어센터 책임연구원

[email protected]

(Revised 25 September 2015)

심사완료 : 2015년 10월 4일

(Accepted 4 October 2015)

CopyrightⒸ2016 한국정보과학회ː개인 목 이나 교육 목 인 경우, 이 작물

의 체 는 일부에 한 복사본 혹은 디지털 사본의 제작을 허가합니다. 이 때,

사본은 상업 수단으로 사용할 수 없으며 첫 페이지에 본 문구와 출처를 반드시

명시해야 합니다. 이 외의 목 으로 복제, 배포, 출 , 송 등 모든 유형의 사용행

를 하는 경우에 하여는 사 에 허가를 얻고 비용을 지불해야 합니다.

정보과학회논문지 제43권 제1호(2016. 1)

64-bit 자바스크립트 시 컴 일러를 한 상수 값 생성 최 화

(Optimizing Constant Value Generation in Just-in-time

Compiler for 64-bit JavaScript Engine)

최 형 규† 이 제 형

††

(Hyung-Kyu Choi) (Jehyung Lee)

요 약 자바스크립트는 웹 페이지에서 HTML과 더불어 리 사용되고 있다. 많은 자바스크립트 수행

엔진들은 성능 향상을 해 시 컴 일러를 채택하고 있다. 최근에는 32-bit 뿐만 아니라 64-bit 마이크

로 로세서가 탑재된 다양한 기기가 소개되고 있으며 이를 한 시 컴 일러도 개발되고 있다. 하지만

64-bit 시 컴 일러는 아직 문제 이 많으며, 특히 메모리 주소와 값들이 64-bit을 사용하여 코드의 크

기가 증가하는 문제 이 있다. 본 논문은 64-bit 환경에서 생성되는 코드, 특히 주소와 상수 값들이 더 많

은 공간을 사용함을 보여주고, 시 컴 일러가 64-bit 값들의 생성을 최 화하여 메모리 사용량을 이는

기법들을 제안한다. 이를 V8 자바스크립트 엔진에 용하여, Octane과 SunSpider 벤치마크에서 생성되는

코드의 크기와 성능을 평가하 다. 성능은 각각 3.6%와 0.32% 향상되었으며, 코드 크기는 0.7%와 2.8%

감소하 다.

키워드: 자바스크립트, 64 비트, 시 컴 일러, 상수 값, 코드 생성, 최 화

Abstract JavaScript is widely used in web pages with HTML. Many JavaScript engines adopt

Just-in-time compilers to accelerate the execution of JavaScript programs. Recently, many newly

introduced devices are adopting 64-bit CPUs instead of 32-bit and Just-in-time compilers for 64-bit

CPU are slowly being introduced in JavaScript engines. However, there are many inefficiencies in the

currently available Just-in-time compilers for 64-bit devices. Especially, the size of code is

significantly increased compared to 32-bit devices, mainly due to 64-bit wide addresses in 64-bit

devices. In this paper, we are going to address the inefficiencies introduced by 64-bit wide addresses

and values in the Just-in-time compiler for the V8 JavaScript engine and propose more efficient ways

of generating constant values and addresses to reduce the size of code. We implemented the proposed

optimization in the V8 JavaScript engine and measured the size of code as well as performance

improvements with Octane and SunSpider benchmarks. We observed a 3.6% performance gain and

0.7% code size reduction in Octane and a 0.32% performance gain and 2.8% code size reduction in

SunSpider.

Keywords: JavaScript, 64-bit, just-in-time compiler, constant values, code generation, optimization

Page 2: 64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화 35 1. 서 론

64-bit 자바스크립트 시 컴 일러를 한 상수 값 생성 최 화 35

1. 서 론

자바스크립트 언어는 웹 페이지에 추가 으로 동 인

기능을 추가하기 한 목 으로 1995년에 제안되고, 웹

환경에서 리 사용되는 로그래 언어로 쉽고 웹

라우 환경에서 랫폼에 상 없이 수행 가능하여

리 보 되었다. 1997년에 ECMAScript라는 표 이 정

해졌으며 2015년 재 ECMAScript 6th edition이 발표

되었다[1]. 창기 자바스크립트 엔진은 느린 해석기

(Interpreter)를 이용하여 개발되었으나, 최근 들어 유연

함과 동 인 특성을 가지는 자바스크립트[2,3]의 성능

향상을 하여 시 컴 일러(Just-in-time compiler,

JIT compiler)기술[4-6]을 도입하고 있다. 시 컴 일

러란 자바스크립트를 수행 실제 CPU 에서 동작 가

능한 명령어로 변환하여 해석기를 거치지 않고 바로 수

행 가능하도록 하는 기법이며 거의 모든 환경의 자바스

크립트 엔진이 이를 채택하고 있다. 표 으로 Apple

Safari 라우 에서 사용되는 Webkit의 JavaScript-

Core[7], Google Chrome 라우 에서 사용되는 Blink

의 V8 JavaScript 엔진[8] 그리고 Mozilla Firefox 라

우 가 사용하는 SpiderMonkey가 있다. 더불어 최근

모바일 환경에 64-bit CPU가 도입되어, 모바일 내장형

환경을 한 64-bit 시 컴 일러에 한 개발이 활발

하게 이루어지고 있다.

본 논문은 64-bit 자바스크립트 시 컴 일러가 가

지고 있는 문제 을 분석하고 개선하는 방안을 제시하

고자 한다. 구체 으로는 주소나 숫자를 표 하는 64-bit

값들로 인한 코드 크기 증가 메모리 사용량이 증가

하는 문제 을 분석한 후, 효율 으로 코드와 값을 생성

하여 메모리 사용량을 이며 성능도 향상시키는 방안

을 제안한다.

2. V8 자바스크립트 엔진과 시 컴 일러

V8 자바스크립트 엔진은 Google Chrome 라우 의

자바스크립트 엔진으로 사용되고 있으며 내부에 두 개

의 시 컴 일러를 가지고 있다. 이처럼 여러 단계의

시 컴 일러를 채택하여 사용하는 방법을 adaptive

compilation 기법[4,6]이라 부르며, JavaScriptCore도 이

처럼 여러 시 컴 일러를 채택하고 있다.

두 개의 시 컴 일러는 자바스크립트 코드를 CPU

의 명령어로 항상 변환하는 fast compiler라 불리는 가

볍고 빠르게 동작하는 시 컴 일러와 crankshaft라고

불리는 효율 인 코드를 생성하기 한 최 화 기법들

이 용되는 상 으로 느린 시 컴 일러이다. 추가

으로 본 연구가 진행 되는 동안에 Turbofan이라는

시 컴 일러의 개발이 진행되고 있었다[8].

V8은 JavaScriptCore나 SpiderMonkey와 달리 해석

기(Interpreter) 없이 시 컴 일러만으로 자바스크립트

로그램을 수행하는 구조를 가지고 있으며, 자바스크립

트로 작성된 로그램은 모두 시 컴 일러로 변환된

다. 그 결과 다른 자바스크립트 엔진과 비교하여 시

컴 일러가 요한 역할을 수행한다. 한 시 컴 일

러 자체도 자바스크립트 로그램을 변환하는데 CPU와

메모리 자원을 사용하므로, V8엔진에서는 시 컴 일

러들이 생성하는 코드와 시 컴 일러 자체 성능이 자

바스크립트 로그램 수행 성능을 결정하게 된다.

에서 설명한 V8의 시 컴 일러들은 32-bit과

64-bit을 포함한 다양한 CPU를 한 명령어를 생성할

수 있으며, 본 논문에서는 64-bit CPU인 ARM사의

ARMv8-A CPU를 한 명령어를 생성하는 V8의 시

컴 일러를 선택하여 연구를 진행하 다.

3. ARMv8-A Architecture

ARMv8-A는 ARM사에서 발표한 64-bit을 지원하는

CPU 아키텍처이며 A32와 A64라는 두 가지 ISA(Inst-

ruction Set Architecture)를 지원한다[9]. A32 명령어

들은 기존 32-bit ARM 명령어와 호환성을 가지며,

A64 명령어들은 새로운 64-bit 명령어이다. 본 논문에

서는 A64를 사용하는 AArch64 환경에서 연구를 진행

하 으며 이 환경에서 명령어들은 32-bit이며 범용

register들은 최 64-bit의 크기를 가진다. 그 외에도

floating point와 SIMD(Single Instruction Multiple

Data)를 한 최 128-bit 크기의 register들을 별도로

사용 가능하다.

ARMv8-A를 한 Linux와 Android는 LP64라는 데

이터 모델을 채택하여 long, long long 그리고 주소 값

을 가지는 pointer 타입은 64-bit을 사용하며, int는

32-bit을 사용한다. 그 결과 같은 로그램이더라도 주

소 값을 가지는 pointer는 기존 32-bit 환경과 비교하여

2배인 64-bit의 공간을 필요로 한다. 표 1은 기존 32-bit

환경에서 사용되던 ILP32 데이터 모델과 64-bit환경에

서 사용될 LP64 모델을 비교하고 있다[10].

표 1 타입 별 크기(bits)

Table 1 Size of type (bits)

Type ILP32 LP64

char 8 8

short 16 16

int 32 32

long 32 64

long long 64 64

size_t 32 64

pointer 32 64

Page 3: 64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화 35 1. 서 론

36 정보과학회논문지 제43권 제1호(2016. 1)

4. 64-bit 값 생성 문제 최 화

본 논문에서는 재 64-bi을 한 V8 시 컴 일러

의 구 방식이 지닌 문제 들을 정의하고 이를 해결하

는 방안을 제안하려고 한다.

4.1 주소 값 생성을 최 화

시 컴 일러에 생성한 코드에서는 함수 호출을 한

함수의 주소, 자료 구조에 근하기 한 주소 등 여러

용도로 주소 값을 그림 1과 같이 근하여 읽어 들여 사

용하고 있다. 이 주소 값들은 코드 역에 같이 생성되

며, 자주 사용되는 값들을 V8 엔진에서는 constant pool

이라는 역에 모아서 그림 2의 왼쪽과 같이 생성하고

있다. 하지만 constant pool에는 복된 값들이 여럿 보

이며, 64-bit(8 bytes) 상 4bytes는 0 값을 가지는

경우가 많은 것을 확인할 수 있다. 재 V8 시 컴 일

러는 빠른 코드 생성을 하여 control flow graph를

그림 1 시 컴 일러가 생성한 A64 명령어

Fig. 1 A64 instructions generated from JIT compiler

(a) Original constant pool (b) Optimized constant pool

그림 2 V8 64-bit 시 컴 일러의 Constant pool

Fig. 2 Constant pool of 64-bit JIT compiler in V8

따라가면서 one-pass로 코드를 생성하여 복 된 값을

제거하지 못하고 있다. 그림 1의 3개의 load 명령어 2

개의 명령어는 그림 2의 왼쪽의 constant pool의 다른

치에서 같은 값인 0x0000000053004c81을 읽고 있다.

본 논문에서는 생성한 상수 값들에 한 이력을 유지

하여, basic block 단 를 넘어서 복을 확인하여 기존

에 생성한 같은 값이 있다면 재사용하도록 하 다. 그

결과 그림 2의 오른쪽과 같이 복된 값이 제거된 코드

가 생성된다. 이를 통하여 64-bit 값이 차지하는 공간을

일 수 있으며 수행 시에는 하나의 값을 여러 번 재사

용하여 data cache의 성능도 향상시킬 수 있을 것이다.

4.2 불필요한 64-bit 값 사용 제거

64-bit 환경에서는 64-bit 정수 연산이 추가 인 오버

헤드 없이 가능하기 때문에, 시 컴 일러가 코드 생성

시 쉽게 큰 정수 타입을 사용할 수 있다. 하지만 64-bit

정수가 반드시 필요하지 않은 경우에도 사용하는 경우

가 있다. 표 인 로 V8 JavaScript 엔진의 fast

compiler에서는 stack의 치를 조정할 때 그림 3의 왼

쪽과 같이 64-bit 값을 x16로 읽어들여 jssp값을 계산

한다. 하지만 이 값은 상수이며, 부분의 경우는 매우

작은 값을 가지는 것이 측되었다.

본 논문에서는 이 을 활용하여, stack의 치를 조정

하는 값을 생성할 때 값의 크기에 따라 32-bit 는

64-bit의 공간을 선택하여 할당 하 으며, 값이 매우 작

아 메모리 공간이 필요 없이 add 명령어의 immediate

field에 encoding이 가능하다면, 그림 3의 오른쪽과 같이

공간 할당 없이 add 명령어를 생성하 다. 그 결과

epilogue에서 불필요한 load 명령어가 제거되었으며, 크

기도 기존 28 bytes (5 instructions * 4 bytes + 8 bytes

(64-bit 값))에서 최소 16 bytes (4 instructions *

4bytes)까지 어들 수 있었다. 분석한 결과 64-bit 값이

실제로 필요한 경우에는 기존 epilogue와 같이 64-bit값

을 한 공간을 확보하고 기존과 같은 코드를 생성한다.

그림 3 비효율 인 epilogue 코드 최 화

Fig. 3 Optimizing inefficient epilogue code

Page 4: 64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화 35 1. 서 론

64-bit 자바스크립트 시 컴 일러를 한 상수 값 생성 최 화 37

4.3 그 외 64-bit 주소 값 사용 문제

주소 값이 64-bit으로 늘어남에 따라 자료 구조에서

pointer 타입을 사용하는 경우 heap 사용량이 늘어나게

된다[11]. 아래 그림 4와 같이 간단한 linked list의 node

자료구조의 경우에도 pointer type인 next가 8 bytes의

공간을 필요로 하여 최소 1.5배의 heap 공간을 사용하

게 되며 추가로 memory address alignment까지 고려

하여 zero-padding이 추가되면 2배의 메모리 공간을 사

용하게 된다. 이처럼 간단한 자료구조의 경우에도 메모

리 사용량이 증가되어 공간뿐만 아니라 필요한 memory

bandwidth도 증가되어 cache, memory bus 등에서 성

능 하가 발생할 수 있다. 더욱이 자바스크립트의 경우

prototype 기반의 객체 지향 언어이기 때문에 객체들은

내부 으로 다양한 주소 값들을 포함하고 있어 성능에

큰 향을 주게 된다.

그림 4 32-bit과 64-bit의 자료구조의 크기

Fig. 4 Size of data structure in 32-bit and 64-bit

5. 실험 결과 분석

5.1 실험 환경

제안한 기법들을 ARMv8-A에서 동작하는 V8 3.29.43

의 64-bit용 시 컴 일러에 용하 다. 메모리 사용

량과 성능을 측정하기 하여 64-bit을 지원하는 Android

5.0 Lollipop 환경에서 실험을 수행하 으며 V8은 Android

NDK r10b를 이용하여 컴 일 하 다. 제안된 기법들은

자바스크립트 벤치마크로 리 사용되는 Octane 2.0과

SunSpider 1.0.2로 실험을 수행하 다.

5.2 코드 크기

시 컴 일러가 생성한 함수들의 코드의 크기를 최

화 기법을 용 과 비교하여 감소한 비율이 큰 순

서로 그림 5와 같이 측정하 다. Octane의 경우 5407

개, SunSpider의 경우 394개의 함수가 변환되었다. 표 2

에서 체 함수기 으로 감소한 코드 비율과 감소된 비

율이 큰 상 10% 함수들의 감소 비율을 계산하 다.

시 컴 일러로 변환된 모든 함수를 기 으로는 Octane

의 경우 0.7%, SunSpider의 경우 2.8% 코드의 크기가

감소하 다. 감소된 비율이 큰 상 10% 함수만 살펴보

면 Octane은 15.8%, SunSpider는 7.4% 었다. Octane

그림 5 함수들의 코드 감소 비율

Fig. 5 Code size reduction ratio of functions

표 2 최 화 용 후 코드 크기 비율

Table 2 Ratio of code size after applying optimization

Top 10% functions All functions

Octane 84.2% 99.3%

SunSpider 92.6% 97.2%

의 경우 그림 5에서 확인할 수 있듯이 최 화의 효과가

함수들마다 큰 차이를 보이고 있어 상 10% 함수에서

는 상 으로 많은 코드가 어듦이 측된 반면 Sun-

Spider의 경우 부분의 함수들이 최 화로 고른 효과

를 얻어 이러한 차이를 보이고 있다.

5.3 성 능

Octane 벤치마크를 이용한 기법 용 후 성능을 그림 6

과 같이 측정하 으며, 체 수는 약 3.6% 향상되었

다. 이는 메모리 사용량이 어든 것과 코드가 어들어

수행된 명령어 개수와 cache 성능 면에서 이득을 보았

다고 추측된다.

그리고 Octane의 개별 측정 결과 Mandreel과

MandreelLatency의 경우 40%가 과하는 개선 수치를

보여주었으나 이는 Octane이 내부의 개별 program을

동작시킬 때 시간 변수를 주어 non-deterministic하게

Page 5: 64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화 35 1. 서 론

38 정보과학회논문지 제43권 제1호(2016. 1)

그림 6 Octane v2 성능 향상

Fig. 6 Performance improvement in Octane v2

그림 7 SunSpider 1.0.2 성능 향상

Fig. 7 Performance improvement in SunSpider 1.0.2

동작시켜 최 화 용 과 후에 다르게 동작하여 수

가 비정상 으로 좋게 나오는 경우가 있어 공정한 비교

를 해 그림 6에서는 제외하 다.

그림 7은 SunSpider 벤치마크의 성능 측정 결과이다.

체 수행 시간은 약 0.32% 개선되었으며, 개별 벤치마

크로는 편차가 크게 나오고 있었다. SunSpider는 Octane

과 비교하여 수행 시간이 매우 짧고 상 으로 은

복잡도를 가지는 로그램들로 구성되어 있으며 메모리

사용량도 상 으로 다. 이러한 특성 때문에 코드의

크기가 어들어 얻을 수 있는 메모리 사용량의 감소에

따른 성능 차이가 게 나타난 것으로 생각된다.

6. 련 연구

기존에 자바스크립트 엔진의 성능을 개선하기 하여

다양한 연구들이 진행되었다[3,5,6]. 우선 시 컴 일러

자체가 효율 인 코드를 생성하는 방법들이 제안되었다

[3,5]. 그 에서 본 논문에서도 언 되었듯이 동 으로

변하는 자바스크립트의 특성 타입이 가지는 문제

을 최 화한 연구가 있었으며[3], 본 논문처럼 CPU 특

성을 효율 으로 활용하는 기법을 제안하는 연구도 있

었다[5]. 더불어 하나 이상의 시 컴 일러를 두어 효

율 으로 시 컴 일러들을 이용하는 방안도 연구되었

다[6]. 마지막으로 자바스크립트 환경은 아니지만 64-bit

자바가상머신(Java Virtual Machine)에서 시 컴 일

러를 활용하여 64-bit 주소 값이 사용하는 공간을 이

는 기법이 연구되었다[11]. 하지만 이 기법은 용 메모

리 리기와 쓰 기 수집기(garbage collector)가 필요

하며, 주소 값을 수행 복원하는 코드도 추가 으로

수행되어야 하여 본 논문이 다루는 내장형 환경보다는

서버 환경에서 활용하도록 제안되었다.

7. 결론 요약

64-bit 기기들이 리 사용됨에 따라 내장형 환경에

서도 64-bit 소 트웨어가 리 사용될 것이다. 하지만

주소나 정수 값 등이 64-bit으로 많은 공간을 사용함에

따라 본 논문에서 살펴본 바와 같이 여러 문제 이 발

생할 수 있다. 본 논문에서는 복된 주소 값을 재활용

하도록 하여 코드의 크기를 이는 방법과 상수 값의

크기에 따라서 다른 코드를 생성하도록 하여 ARMv8-A

Android환경에서 평가해보았다. 그 결과 코드의 크기는

벤치마크에서 최 2.8% 어들었으며, 성능은 최

3.6% 향상됨을 확인할 수 있었다. 본 논문에서는 일부

64-bit 값만을 최 화 하고 있으므로, 향후 더 많은

64-bit의 크기를 가지는 타입을 최 화하면 메모리 사용

량뿐만 아니라 64-bit 내장형 환경에서 성능향상도 기

할 수 있을 것으로 보인다.

References

[ 1 ] Ecma International (2015, Jun.). ECMAScript 2015

Language Specification (6th ed.) [Online]. Available:

http://www.ecma-international.org/publications/files

/ECMA-ST/Ecma-262.pdf (downloaded 2015, Jul. 10)

[ 2 ] G. Richards, S. Lebresne, B. Burg, J. Vitek, "An

Analysis of the Dynamic Behavior of JavaScript

Programs," Proc. of the 2010 conference on Pro-

gramming Language Design and Implementation,

pp. 1-12, 2010

[ 3 ] W.-K. Jung, Y.-W. Kim and S.-M. Moon, "An

Optimization for JavaScript Just-in-Time Compiler

Using Variable Type Hint," Proc. of the KIISE

Korea Computer Congress 2014, pp. 1400-1402, 2014.

(in Korean)

[ 4 ] J. Aycock, "A brief history of just-in-time," ACM

Computing Surveys, Vol. 35, Issue 2, pp. 97-113,

2003.

[ 5 ] J. Nah, H. Kim, H. Kim, G. J, J. Lee, "Imple-

mentation of Register Allocator for JavaScript JIT

Compiler," Proc. of the KIISE Korea Computer

Congress 2011, pp. 194-197, 2011. (in Korean)

[ 6 ] H. Park, Y.-H. Yoo, S.-M. Moon, "Performance

Analysis of Adaptive Compilation In V8 CrankShaft

JavaScript Engine," Proc. of the KIISE Korea Com-

Page 6: 64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화64-bit 자바스크립트 적시 컴파일러를 위한 상수 값 생성 최적화 35 1. 서 론

64-bit 자바스크립트 시 컴 일러를 한 상수 값 생성 최 화 39

puter Congress 2011, pp. 202-205, 2011. (in Korean)

[ 7 ] JavaScriptCore - Webkit [Online]. Available: http://

trac.webkit.org/wiki/JavaScriptCore

[ 8 ] V8 JavaScript Engine [Online]. Available: http://

code.google.com/p/v8/

[ 9 ] ARM Limited (2015, Mar. 25). ARMv8-A Reference

Manual (Issue A.f) [Online]. Available: http://info-

center.arm.com/help/topic/com.arm.doc.ddi0487a.f/in

dex.html (downloaded 2015, Jul. 10)

[10] ARM Limited (2015, Mar. 24). ARM Cortex-A Series

Programmer’s Guide for ARMv8-A [Online]. Avail-

able: http://infocenter.arm.com/help/index.jsp?topic=

/com.arm.doc.den0024a/ch05s01s03.html (downloaded

2015, Jul. 10)

[11] K. Venstermans, L. Eeckhout, K. Bosschere, "Ob-

ject-relative addressing: compressed pointers in

64-bit java virtual machines," Proc. of the 21st

European conference on Object-Oriented Program-

ming (ECOOP'07), pp. 79-100, 2007.

최 형 규

2000년 서울 학교 기공학부 학사. 2002

년 서울 학교 기컴퓨터공학부 석사

2014년 서울 학교 기컴퓨터공학부 박

사. 재 삼성 자 소 트웨어센터 책임

연구원. 심분야는 컴 일러 최 화, Java-

Script엔진 최 화, 가상머신 최 화, 메

모리 리

이 제 형

2009년 서울 학교 기컴퓨터공학부 박

사. 재 삼성 자 소 트웨어센터 책임

연구원. 심분야는 컴 일러 최 화, JS

engine 최 화


Recommended