KR101064741B1 - 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법 - Google Patents

핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법 Download PDF

Info

Publication number
KR101064741B1
KR101064741B1 KR1020100013631A KR20100013631A KR101064741B1 KR 101064741 B1 KR101064741 B1 KR 101064741B1 KR 1020100013631 A KR1020100013631 A KR 1020100013631A KR 20100013631 A KR20100013631 A KR 20100013631A KR 101064741 B1 KR101064741 B1 KR 101064741B1
Authority
KR
South Korea
Prior art keywords
code
relocation
generated
dynamic compilation
information
Prior art date
Application number
KR1020100013631A
Other languages
English (en)
Other versions
KR20110093522A (ko
Inventor
문수묵
오형석
Original Assignee
서울대학교산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 서울대학교산학협력단 filed Critical 서울대학교산학협력단
Priority to KR1020100013631A priority Critical patent/KR101064741B1/ko
Publication of KR20110093522A publication Critical patent/KR20110093522A/ko
Application granted granted Critical
Publication of KR101064741B1 publication Critical patent/KR101064741B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/311Functional or applicative languages; Rewrite languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45529Embedded in an application, e.g. JavaScript in a Web browser
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명은 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법에 관한 것으로서, 보다 구체적으로는 (a) 동적 컴파일 수행 중, 재배치에 필요한 재배치 정보를 수집하는 단계; (b) 상기 단계 (a)에서 수집된 재배치 정보를, 동적 컴파일 수행 후 생성된 코드와 함께 파일 시스템에 저장하는 단계; (c) 자바스크립트 엔진이 재시작 된 경우, 동적 컴파일을 수행하기 전에 상기 파일 시스템에서 동적 컴파일 대상 구역에 대한 코드의 존재 여부를 확인하는 단계; 및 (d) 상기 단계 (c)에서 코드가 존재하는 것으로 확인되는 경우, 상기 파일 시스템으로부터 상기 코드와 상기 재배치 정보를 읽어 들여 읽어 들인 상기 코드를 상기 재배치 정보를 이용하여 재배치한 후 수행하는 단계를 포함하는 것을 그 구성상의 특징으로 한다.
본 발명에서 제안하고 있는 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법에 따르면, 동적 컴파일 수행으로 생성된 코드와 관련 재배치 정보를 파일 시스템에 저장해 둠으로써, 자바스크립트 엔진이 재시작된 경우 해당 코드에 대한 동적 컴파일을 수행하는 대신에 파일 시스템으로부터 해당 코드와 관련 재배치 정보를 읽어 들여 재배치 과정만 거친 후 해당 코드를 수행할 수 있다. 그 결과, 컴파일 과정 및 컴파일을 위한 자료 수집 과정 없이 빠르게 생성된 코드를 재활용할 수 있다.

Description

핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법{A METHOD FOR REUSING GENERATED CODES FOR HOT-PATH-BASED JAVASCRIPT DYNAMIC COMPILATION}
본 발명은 생성 코드 재활용 방법에 관한 것으로서, 특히 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법에 관한 것이다.
자바스크립트는 웹 페이지에 대해 동적 특성을 부여하는 스크립트 언어로서 널리 사용되고 있다. 웹페이지를 구성하는 HTML 파일에 자바스크립트를 추가하여 페이지를 서버로부터 새로 받아올 필요 없이 서버와 클라이언트 간에 데이터만을 송수신하는 것이 가능해지고, 사용자의 입력에 반응하여 페이지를 변경시킬 수 있다. 이러한 자바스크립트는 C나 Java와 같은 널리 알려진 언어와 달리 변수의 타입이 동적으로 변할 수 있고 수행 중에 함수가 생성 및 수행될 수 있는 등 동적 특성을 많이 가진 언어이다.
동적 언어인 자바스크립트를 수행하기 위하여 자바스크립트 엔진이 사용된다. 자바스크립트 엔진은 일반적으로 웹 브라우저에 내장되어 있으며, 이 중 대표적인 것 중 하나가 TraceMonkey이다.
핫 패스 기반의 자바스크립트 동적 컴파일러를 내장한 TraceMonkey는 기존의 자바스크립트 엔진인 SpiderMonkey를 기반으로 개발되었다. SpiderMonkey는 자바스크립트 코드를 자체적으로 정의한 바이트코드로 변환한 뒤에 해석기(interpreter)를 통해 바이트코드를 수행한다. TraceMonkey는 SpiderMonkey에 동적 컴파일러인 just-in-time compiler(JITC)를 추가한 것이다. 따라서 TraceMonkey는 해석기와 동적 컴파일러를 통해 생성된 기계어 코드를 함께 활용하여 자바스크립트를 수행한다.
TraceMonkey는 자바스크립트를 우선 해석기를 통해 수행하다가 자주 수행되는 경로, 즉 핫 패스라고 판단되면 해당 경로를 추적(Trace)한다. 그리고 추적한 결과를 바탕으로 해당 경로를 컴파일하여 기계어 코드를 생성한 뒤에 수행하는 과정을 거치는 핫 패스 기반의 동적 컴파일러이다. TraceMonkey에서 컴파일을 하는 단위는 반복문(loop)으로, loop을 향후 자주 수행될 핫 패스로 판단하는 것이다.
TraceMonkey는 해석기로 수행하다가 앞으로 되돌아가도록 하는 분기문인 backward 분기문을 만나면 기존에 동적 컴파일러를 통해 생성된 기계어 코드가 메모리 상에 존재하는지 확인한 후, 존재하지 않으면 추적을 시작한다. 이는 backward 분기문을 통해 이동하게 되는 수행 시작점과 해당 backward 분기문의 위치까지를 특별한 상황이 아닌 한 반복해서 수행하게 되며, 이를 통해 loop 구간으로 인식할 수 있는데 이것은 backward 분기문을 loop의 시작점으로 간주하기 때문이다. 추적을 시작하면 우선 해석기로 계속 수행하면서 컴파일에 필요한 정보를 수집하고 컴파일에 필요한 중간 코드를 생성한다. 추적은 처음에 추적을 시작했던 backward 분기문에 다시 도달했을 때 끝나게 되고, 추적 중에 얻은 중간코드와 정보를 바탕으로 기계어 코드를 생성한다.
한편, loop 내에 분기문이 있는 경우에는 loop을 수행할 때 수행 경로가 변할 수 있는데, 이를 처리하기 위해 추적을 통해 얻은 경로로 코드를 확장할 수 있게 구현되었다. 처음 코드를 생성할 때에는 추적을 통해 얻은 경로를 따라 기계어 코드를 생성한다. 도 1은 이러한 분기문이 있는 경우에 생성되는 결과를 보여준다. 분기문으로 인해 자바스크립트 내에서 동일한 블록인 D에 대해서 서로 다른 추적 결과가 생성되기 때문에 반복 생성이 이루어지게 된다.
이렇게 생성된 코드는 backward 분기가 있을 때 해당 경로에 대해 생성된 코드가 있는지를 확인하여 컴파일된 기계어 코드가 있을 때에는 저장된 코드로 수행할 수 있다. 이때 항상 수행할 수 있는 것은 아니고, 사용할 수 있는 조건을 만족해야 한다. 이 조건은 추적 중에 수집되는데, 변수의 타입 등이 포함된다. 이는 자바스크립트가 변수의 타입이 실행 중 변할 수 있는 등 동적 특성을 가지고 있고, 핫 패스 추적 기반의 동적 컴파일을 통해 코드를 생성하여 추적 당시에 수집한 수행 조건을 만족할 때 코드를 이용할 수 있기 때문이다. 이 조건을 만족하여 loop가 반복 수행될 때에는 해석기를 거치지 않고 기계어 코드 내에서 반복 수행된다.
도 2는 이와 같은 핫 패스 기반의 자바스크립트 동적 컴파일러가 수행되는 과정의 흐름도이다. TraceMonkey와 같은 핫 패스 기반의 동적 컴파일러를 사용하는 자바스크립트 엔진은 동적인 언어인 자바스크립트에 대하여 효율적인 코드를 생성할 수 있도록 한다. 그러나 추적 과정에 컴파일을 위한 수행 경로 정보를 수집하고 중간코드를 생성하는 것으로 인해 컴파일 오버헤드가 크다는 문제점이 있다.
또한, 생성된 코드는 메모리에 저장되기 때문에 자바스크립트 엔진이 한번 종료된 후에 다시 기동 된 상황에서 같은 구역을 다시 수행하더라도 코드가 남아있지 않아서 다시 컴파일을 수행해야 한다는 문제점도 있다. 따라서 컴파일 수행을 줄이고 한번 생성된 코드를 최대한 활용할 수 있는 방안이 필요하다.
본 발명은 기존에 제안된 방법들의 상기와 같은 문제점들을 해결하기 위해 제안된 것으로서, 동적 컴파일 수행으로 생성된 코드와 관련 재배치 정보를 파일 시스템에 저장해 둠으로써, 자바스크립트 엔진이 재시작된 경우 해당 코드에 대한 동적 컴파일을 수행하는 대신에 파일 시스템으로부터 해당 코드와 관련 재배치 정보를 읽어 들여 재배치 과정만 거친 후 해당 코드를 수행할 수 있는, 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법을 제공하는 것을 그 목적으로 한다.
상기한 목적을 달성하기 위한 본 발명의 특징에 따른, 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법은,
(a) 동적 컴파일 수행 중, 재배치에 필요한 재배치 정보를 수집하는 단계;
(b) 상기 단계 (a)에서 수집된 재배치 정보를, 동적 컴파일 수행 후 생성된 코드와 함께 파일 시스템에 저장하는 단계;
(c) 자바스크립트 엔진이 재시작된 경우, 동적 컴파일을 수행하기 전에 상기 파일 시스템에서 동적 컴파일 대상 구역에 대한 코드의 존재 여부를 확인하는 단계; 및
(d) 상기 단계 (c)에서 코드가 존재하는 것으로 확인되는 경우, 상기 파일 시스템으로부터 상기 코드와 상기 재배치 정보를 읽어 들여 읽어 들인 상기 코드를 상기 재배치 정보를 이용하여 재배치한 후 수행하는 단계를 포함하는 것을 그 구성상의 특징으로 한다.
바람직하게는, 상기 단계 (a)에서,
재배치 대상 코드들의 위치 정보를 기준으로 각 코드의 재배치 타입 정보 및 재배치를 위해 참고해야 할 값을 수집하여 재배치 정보 테이블을 생성할 수 있다.
더욱 바람직하게는, 상기 단계 (b)에서,
상기 단계 (a)에서 생성된 상기 재배치 정보 테이블을, 저장할 코드에 대한 자바스크립트 파일 이름, 스크립트 상에서의 위치, 생성된 코드, 및 코드 수행 조건 정보와 함께 저장할 수 있다.
더더욱 바람직하게는, 상기 단계 (d)에서,
상기 재배치 정보 테이블에서의 재배치 대상 코드들의 위치 정보, 재배치 타입 정보, 및 재배치를 위해 참고해야 할 값에 기초하여, 읽어 들인 상기 코드를 변경하고, 상기 코드 수행 조건 정보를 통해 코드 수행 조건에 대한 자료 구조를 재생성할 수 있다.
본 발명에서 제안하고 있는 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법에 따르면, 동적 컴파일 수행으로 생성된 코드와 관련 재배치 정보를 파일 시스템에 저장해 둠으로써, 자바스크립트 엔진이 재시작된 경우 해당 코드에 대한 동적 컴파일을 수행하는 대신에 파일 시스템으로부터 해당 코드와 관련 재배치 정보를 읽어 들여 재배치 과정만 거친 후 해당 코드를 수행할 수 있다. 그 결과, 컴파일 과정 및 컴파일을 위한 자료 수집 과정 없이 빠르게 생성된 코드를 재활용할 수 있다.
도 1은 loop 내에 분기문이 있는 경우 및 이 경우에 생성되는 결과를 나타내는 도면.
도 2는 핫 패스 기반의 자바스크립트 동적 컴파일러가 수행되는 과정을 나타내는 흐름도.
도 3은 본 발명의 일 실시예에 따른, 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법의 구성을 나타내는 도면.
도 4는 파일 시스템에 저장해야 할 값들을 나타내는 도면.
도 5는 본 발명의 일 실시예에 따른 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법에 있어서, 핫 패스 기반의 자바스크립트 동적 컴파일러가 수행되는 과정을 나타내는 흐름도.
이하에서는 첨부된 도면을 참조하여 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있도록 바람직한 실시예를 상세히 설명한다. 다만, 본 발명의 바람직한 실시예를 상세하게 설명함에 있어, 관련된 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략한다. 또한, 유사한 기능 및 작용을 하는 부분에 대해서는 도면 전체에 걸쳐 동일 또는 유사한 부호를 사용한다.
덧붙여, 명세서 전체에서, 어떤 부분이 다른 부분과 ‘연결’되어 있다고 할 때, 이는 ‘직접적으로 연결’되어 있는 경우뿐만 아니라, 그 중간에 다른 소자를 사이에 두고 ‘간접적으로 연결’되어 있는 경우도 포함한다. 또한, 어떤 구성요소를 ‘포함’한다는 것은, 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있다는 것을 의미한다.
본 발명에서는, 핫 패스 기반 동적 자바스크립트 컴파일러에서 컴파일 수행을 줄이고 한번 생성된 코드를 종료한 후에도 남겨두어 재사용할 수 있도록 하기 위해 동적 컴파일러를 통해 생성된 코드를 관리하는 부가적인 방법을 제안한다. 본 발명에서 제안하고 있는 방법을 개략적으로 설명하면 다음과 같다.
동적 컴파일을 수행하면 생성된 기계어 코드는 메모리상에 저장되는데, 본 발명에서는 생성된 코드를 파일 시스템에도 추가로 저장한다. 그리고 이렇게 파일 시스템에 저장된 코드는 향후 동적 컴파일러가 종료된 후 새로 시작되어 메모리가 초기화 되더라도 그대로 파일에 남아있게 되므로, 필요할 때에 파일 시스템으로부터 다시 메모리로 불러들이면 컴파일 없이 재사용할 수 있다. 하지만 코드가 생성될 당시와 메모리로 불러들일 때 메모리상의 코드 및 자료구조의 배치가 달라지기 때문에 이러한 위치 정보를 갱신하는 재배치 과정이 필요하다. 이러한 재배치가 필요한 코드는 하나의 컴파일 단위에 대하여 여러 개 생성될 수 있기 때문에 컴파일 시에 재배치에 필요한 정보를 테이블 형식의 자료구조에 모아두었다가 코드를 파일 시스템에 저장할 때 향후 재사용을 위해 코드의 재배치 정보들을 추가로 함께 파일 시스템에 저장한다.
도 3은 본 발명의 일 실시예에 따른, 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법의 구성을 나타내는 흐름도이다. 도 3에 도시된 바와 같이, 본 발명의 일 실시예에 따른, 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법은, (a) 동적 컴파일 수행 중, 재배치에 필요한 재배치 정보를 수집하는 단계(S100), (b) 단계 S100에서 수집된 재배치 정보를, 동적 컴파일 수행 후 생성된 코드와 함께 파일 시스템에 저장하는 단계(S200), (c) 자바스크립트 엔진이 재시작된 경우, 동적 컴파일을 수행하기 전에 파일 시스템에서 동적 컴파일 대상 구역에 대한 코드의 존재 여부를 확인하는 단계(S300), 및 (d) 단계 S300에서 코드가 존재하는 것으로 확인되는 경우, 파일 시스템으로부터 코드와 재배치 정보를 읽어 들여 읽어 들인 코드를 재배치 정보를 이용하여 재배치한 후 수행하는 단계(S400)를 포함하여 구성된다.
단계 S100은, 동적 컴파일 수행 중, 재배치에 필요한 재배치 정보를 수집하는 단계이다. 핫 패스 기반의 동적 컴파일러가 컴파일 수행을 위한 자료 수집을 마친 뒤 컴파일을 수행하면 기계어 코드가 생성되는데, 이 중에는 메모리 상에서의 절대 위치에 영향을 받는 코드가 존재한다. 이러한 코드는 향후 자바스크립트 엔진을 재시작한 후에 코드를 재사용할 때 그대로 사용할 수 없기 때문에 이를 사용 환경에 맞도록 변경할 수 있도록 코드에 관련된 정보를 수집하여 별도의 자료구조(‘재배치 정보 테이블’이라고 함)에 저장해 둔다. 재배치 정보 테이블에는 컴파일러의 컴파일 단위에서 코드의 시작 위치를 기준으로 한 재배치 대상이 되는 코드의 상대적 위치를 바탕으로 해당 위치의 코드가 어떤 경위를 거쳐 생성된 코드인지를 밝히는 재배치 타입 정보와, 재배치를 위해 참고해야 할 값이 테이블 형식으로 저장된다.
재배치 타입은, 예를 들어 생성된 코드의 특정 위치에 대한 주소 값일 경우, 자바스크립트 엔진의 특정 내부 함수 호출을 위한 절대주소 삽입 등이 있다. 이러한 타입에 따라 저장해야 할 값도 달라지는데, 생성된 코드의 특정 위치에 대한 주소 값일 때에는 생성된 코드가 저장되는 메모리 상의 기준이 되는 위치로부터의 offset 값, 내부함수 호출을 위한 절대주소일 경우에는 내부함수를 식별할 수 있는 값이 저장해야 할 값이 된다.
단계 S100에 의해 재배치 정보 수집이 완료되면, 단계 S200에서는 수집된 재배치 정보를, 동적 컴파일 수행 후 생성된 코드(코드 수행 조건 정보 포함)와 함께 파일 시스템에 저장한다. 파일 시스템에 저장할 때에는 해당 코드의 자바스크립트 파일 이름 및 스크립트 상에서의 위치를 알 수 있도록 저장한다. 즉, 파일 시스템에는 자바스크립트 파일 이름, 스크립트 상에서의 위치, 코드, 코드 크기, 코드 수행 조건 정보, 코드 수행 조건 정보 크기, 재배치 정보 테이블, 재배치 정보 테이블 크기가 저장된다. 도 4는 파일 시스템에 저장해야 할 값들을 나타내는 도면이다.
단계 (a)와 단계 (b)를 거쳐, 코드와 코드의 재배치 정보가 파일 시스템에 저장되고 난 후, 핫 패스 기반 동적 컴파일러를 내장한 자바스크립트 엔진이 재시작되고 컴파일을 수행할 가능성이 있는 위치에 도달하였을 때, 수행하고 있는 스크립트 상에서의 위치에 대해 미리 생성된 코드가 있는지 파일 시스템을 확인한다. 이와 같이, 자바스크립트 엔진이 재시작된 경우, 동적 컴파일을 수행하기 전에 상기 파일 시스템에서 동적 컴파일 대상 구역에 대한 코드의 존재 여부를 확인하는 단계가 단계 S300이다.
단계 S300에서 해당 코드가 파일 시스템에 존재하지 않는 것으로 확인되는 경우에는 기존의 방식대로 추적 및 컴파일을 그대로 수행하되, 파일 시스템에 해당 기계어 코드가 존재하는 것으로 확인되면 코드와 재배치 정보를 파일 시스템으로부터 읽어 들여 수행하게 된다. 이와 같이, 단계 S400에서는, 단계 S300에서 코드가 존재하는 것으로 확인되는 경우, 파일 시스템으로부터 해당 코드와 관련 재배치 정보를 읽어 들여 읽어 들인 코드를 재배치 정보를 이용하여 재배치한 후 수행한다. 이때, 코드는 코드 크기만큼 코드 시작위치로부터 파일 시스템에서 읽어 들여 코드 저장 영역에 저장하고, 재배치 정보는 재배치 정보의 위치와 크기를 참조하여 읽어 들인 후에, 코드 저장 영역에 저장해둔 코드에 대해 재배치 정보를 이용한 재배치 과정을 통해 코드를 수정한다. 또한, 코드 수행 조건을 읽어서 자료구조에 저장하는데, 이를 통해 재사용할 수 있는 코드가 메모리 상에 존재하게 되어 코드 수행 조건을 확인한 후 조건을 만족하면 이 코드를 수행하게 된다. 도 5는 이상 설명한 바와 같은, 본 발명의 일 실시예에 따른 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법에 있어서의 전체 흐름을 나타내는 도면이다.
이상 설명한 본 발명은 본 발명이 속한 기술분야에서 통상의 지식을 가진 자에 의하여 다양한 변형이나 응용이 가능하며, 본 발명에 따른 기술적 사상의 범위는 아래의 특허청구범위에 의하여 정해져야 할 것이다.
S100: 동적 컴파일 수행 중, 재배치 정보를 수집하는 단계
S200: 수집된 재배치 정보를, 동적 컴파일 수행 후 생성된 코드와 함께 파일 시스템에 저장하는 단계
S300: 자바스크립트 엔진이 재시작 된 경우, 동적 컴파일을 수행하기 전에 파일 시스템에서 동적 컴파일 대상 구역에 대한 코드의 존재 여부를 확인하는 단계
S400: 코드가 존재하는 것으로 확인되는 경우, 파일 시스템으로부터 코드와 관련 재배치 정보를 읽어 들여 코드를 재배치 정보를 이용하여 재배치한 후 수행하는 단계

Claims (4)

  1. 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법으로서,
    (a) 동적 컴파일 수행 중, 재배치에 필요한 재배치 정보를 수집하는 단계;
    (b) 상기 단계 (a)에서 수집된 재배치 정보를, 동적 컴파일 수행 후 생성된 코드와 함께 파일 시스템에 저장하는 단계;
    (c) 자바스크립트 엔진이 재시작 된 경우, 동적 컴파일을 수행하기 전에 상기 파일 시스템에서 동적 컴파일 대상 구역에 대한 코드의 존재 여부를 확인하는 단계; 및
    (d) 상기 단계 (c)에서 코드가 존재하는 것으로 확인되는 경우, 상기 파일 시스템으로부터 상기 코드와 상기 재배치 정보를 읽어 들여 읽어 들인 상기 코드를 상기 재배치 정보를 이용하여 재배치한 후 수행하는 단계를 포함하며,
    상기 단계 (a)에서,
    재배치 대상 코드들의 위치 정보를 기준으로 각 코드의 재배치 타입 정보 및 재배치를 위해 참고해야 할 값을 수집하여 재배치 정보 테이블을 생성하는 것을 특징으로 하는, 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법.
  2. 삭제
  3. 제1항에 있어서, 상기 단계 (b)에서,
    상기 단계 (a)에서 생성된 상기 재배치 정보 테이블을, 저장할 코드에 대한 자바스크립트 파일 이름, 스크립트 상에서의 위치, 생성된 코드, 및 코드 수행 조건 정보와 함께 저장하는 것을 특징으로 하는, 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법.
  4. 제3항에 있어서, 상기 단계 (d)에서,
    상기 재배치 정보 테이블에서의 재배치 대상 코드들의 위치 정보, 재배치 타입 정보, 및 재배치를 위해 참고해야 할 값에 기초하여, 읽어 들인 상기 코드를 변경하고, 상기 코드 수행 조건 정보를 통해 코드 수행 조건에 대한 자료 구조를 재생성하는 것을 특징으로 하는, 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법.
KR1020100013631A 2010-02-12 2010-02-12 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법 KR101064741B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020100013631A KR101064741B1 (ko) 2010-02-12 2010-02-12 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020100013631A KR101064741B1 (ko) 2010-02-12 2010-02-12 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법

Publications (2)

Publication Number Publication Date
KR20110093522A KR20110093522A (ko) 2011-08-18
KR101064741B1 true KR101064741B1 (ko) 2011-09-15

Family

ID=44930198

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100013631A KR101064741B1 (ko) 2010-02-12 2010-02-12 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법

Country Status (1)

Country Link
KR (1) KR101064741B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170032129A (ko) 2015-09-14 2017-03-22 서울대학교산학협력단 계층 연산자 카탈로그와 분석 태스크의 데이터 플로우 그래프 표현에 기반한 동적 e2e 분석 태스크 최적화, 코드 생성 및 jit 컴파일

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060028567A (ko) * 2004-09-25 2006-03-30 삼성전자주식회사 가상 머신 어플리케이션을 실행하는 방법 및 그 방법을이용한 디지털 방송 수신기
KR20080070337A (ko) * 2007-01-26 2008-07-30 에스케이커뮤니케이션즈 주식회사 자바스크립트기반 웹-클라이언트 어플리케이션프레임워크와 상기 프레임워크를 이용한 웹 컨텐츠 처리방법 및 이를 구현할 수 있는 컴퓨터로 읽을 수 있는 기록매체
KR20090085816A (ko) * 2008-02-05 2009-08-10 재단법인서울대학교산학협력재단 핫스팟 메소드의 동적 컴파일을 위해 수행 시간을 추정하는방법

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060028567A (ko) * 2004-09-25 2006-03-30 삼성전자주식회사 가상 머신 어플리케이션을 실행하는 방법 및 그 방법을이용한 디지털 방송 수신기
KR20080070337A (ko) * 2007-01-26 2008-07-30 에스케이커뮤니케이션즈 주식회사 자바스크립트기반 웹-클라이언트 어플리케이션프레임워크와 상기 프레임워크를 이용한 웹 컨텐츠 처리방법 및 이를 구현할 수 있는 컴퓨터로 읽을 수 있는 기록매체
KR20090085816A (ko) * 2008-02-05 2009-08-10 재단법인서울대학교산학협력재단 핫스팟 메소드의 동적 컴파일을 위해 수행 시간을 추정하는방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170032129A (ko) 2015-09-14 2017-03-22 서울대학교산학협력단 계층 연산자 카탈로그와 분석 태스크의 데이터 플로우 그래프 표현에 기반한 동적 e2e 분석 태스크 최적화, 코드 생성 및 jit 컴파일

Also Published As

Publication number Publication date
KR20110093522A (ko) 2011-08-18

Similar Documents

Publication Publication Date Title
JP3790683B2 (ja) コンピュータ装置、その例外処理プログラム及びコンパイル方法
US8819649B2 (en) Profile guided just-in-time (JIT) compiler and byte code generation
JP4833206B2 (ja) 最適化されたプログラムのためのアンワインド情報の生成
Ahn et al. Improving JavaScript performance by deconstructing the type system
US8522222B2 (en) Tracing just-in-time compilation with pointers to local variables
EP3642709B1 (en) Differentiated static analysis for dynamic code optimization
Bebenita et al. Trace-based compilation in execution environments without interpreters
KR101782995B1 (ko) 자바스크립트 코드 저장 및 최적화를 통한 웹 브라우징 방법 및 장치
Castanos et al. On the benefits and pitfalls of extending a statically typed language JIT compiler for dynamic scripting languages
JP2013504124A (ja) 軽量サービスベースの動的バイナリリライタフレームワーク
CN110888645A (zh) 一种转换为小程序的方法、装置和存储介质
CN103019787A (zh) 函数调用关系确定方法、热补丁升级方法及装置
Leopoldseder et al. Fast-path loop unrolling of non-counted loops to enable subsequent compiler optimizations
KR101064741B1 (ko) 핫 패스 기반의 자바스크립트 동적 컴파일을 위한 생성 코드 재활용 방법
CN105786465A (zh) 一种脚本语言执行方法及装置
JP2014112327A (ja) 変換プログラム、変換装置及び変換方法
CN111796832B (zh) 热补丁文件生成方法、装置、设备及存储介质
Zhuykov et al. Augmenting JavaScript JIT with ahead-of-time compilation
Vandercammen et al. A formal foundation for trace-based JIT compilers
Eichberg BAT2XML: XML-based java bytecode representation
Hunter EmbedDB: Query Optimizations and Code Amalgamation for Simple Distribution
US20240020101A1 (en) System and method for performing self-stabilizing compilation
WO2023155863A1 (en) Methods and devices for compiler function fusion
CN114237612A (zh) 程序代码的编译方法、装置、电子设备及存储介质
JPH11149380A (ja) コンパイラとプログラム最適化方法およびその処理プログラムを記録した記録媒体

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20140822

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170824

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20180820

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20190917

Year of fee payment: 9