KR20040063923A - Jit 컴파일러를 구비한 가상 계산기, 그 동작 방법 및그 가상 계산기를 구비한 단말 장치 - Google Patents

Jit 컴파일러를 구비한 가상 계산기, 그 동작 방법 및그 가상 계산기를 구비한 단말 장치 Download PDF

Info

Publication number
KR20040063923A
KR20040063923A KR10-2004-7006877A KR20047006877A KR20040063923A KR 20040063923 A KR20040063923 A KR 20040063923A KR 20047006877 A KR20047006877 A KR 20047006877A KR 20040063923 A KR20040063923 A KR 20040063923A
Authority
KR
South Korea
Prior art keywords
code
byte
native code
compilation
native
Prior art date
Application number
KR10-2004-7006877A
Other languages
English (en)
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 후지쯔 가부시끼가이샤
Publication of KR20040063923A publication Critical patent/KR20040063923A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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/45516Runtime code conversion or optimisation

Abstract

JIT 컴파일러를 구비한 가상 계산기에 관한 것이다. 바이트 코드를 보유하는 바이트 코드 보유 영역과, 바이트 코드를 순차적으로 해석하여 실행하는 수단과, 상기 바이트 코드를 가상 계산기가 직접 실행할 수 있는 네이티브 코드로 컴파일하는 컴파일러와, 그 네이티브 코드를 보유하는 네이티브 코드 보유 영역, 및 바이트 코드의 어드레스로부터 생성된 태그 정보와, 바이트 코드가 컴파일된 네이티브 코드의 네이티브 코드 영역에서의 어드레스를 보유하는 검색 테이블을 구비한다.

Description

JIT 컴파일러를 구비한 가상 계산기, 그 동작 방법 및 그 가상 계산기를 구비한 단말 장치{JIT COMPILER-EQUIPPED VIRTUAL COMPUTER, OPERATION METHOD THEREOF, AND TERMINAL APPARATUS HAVING THE VIRTUAL COMPUTER}
최근, 인터넷의 보급에 의해 네트워크를 통하여 프로그램을 실행하는 시스템이 실용화되고 있다. 특히, Java 언어는, 예를 들면 휴대 전화기 상에서 실행되는 프로그램 등으로서 응용되어, 급속히 확대되고 있다.
그러나, Java 언어는 실행되는 플랫폼을 선택하지 않는 가상 계산기의 프로그램(이하, 「바이트 코드」라고 기재함)으로서 배부되므로, 휴대형 무선 통신 기기의 프로세서에서는 직접 실행할 수 없어, 에뮬레이션 등의 기술에 의해 실행을 행하고 있다.
본 발명은 Java와 같은 가상 계산기의 바이트 코드를 휴대 전화기, PDA 등에 이용하여, 메모리가 적은 휴대형 무선 통신 기기 상에서 고속으로 동작시키는 것이 가능한 JIT 컴파일러를 구비한 가상 계산기에 관한 것이다.
이하, 도 21 내지 도 24를 참조하여 종래의 기술에 대하여 설명한다.
도 21은 가상 계산기의 코드인 바이트 코드를 해석, 실행하는 인터프리터의 처리 흐름도이다. 이하, 도 21에 기초하여, 인터프리터의 처리를 설명한다. 또, S1∼S6은 각 처리 단계를 나타낸다.
종래, 가상 계산기의 바이트 코드를 실행하는 수단으로서, 소프트웨어에 의해 바이트 코드를 순차적으로 해석, 실행하는 인터프리터 방식이 알려져 있었다. 그러나, 이 인터프리터 방식에서는 바이트 코드의 명령을 하나씩 실행하기 때문에, 처리 속도가 느리다. 구체적으로는, 다음과 같다.
우선, 바이트 코드의 명령 페치를 행하고(S1), 페치한 명령을 디코드한다(S2). 그리고, 디코드한 결과가 명령의 실행이면, 그 명령을 실행하고(S3, S4), S1의 처리로 이행한다. 또한, 디코드한 결과가 분기이면, 분기 처리를 행하고(S5), S1의 처리로 이행한다. 또한, 디코드한 결과가 메소드 호출이면(S6), 메소드 호출을 행하고(S6), S1의 처리로 이행한다. 이후, 마찬가지로 하여, 명령마다 처리를 행한다.
도 22를 참조하여 종래 일반적으로 사용되고 있는 JIT 컴파일러에 대하여 설명한다.
도 22는 인터프리터와 JIT 컴파일러를 조합하였을 때의 처리 흐름도이다. 이하, 도 22에 기초하여, 인터프리터와, 종래 일반적으로 사용되고 있는 JIT 컴파일러(휴대 전화기에서는 사용되지 않고, 퍼스널 컴퓨터 등에서 사용되고 있음)를 조합하였을 때의 처리를 설명한다. 또, S11∼S20은 각 처리 단계를 나타낸다. 또한, S11∼S16은 인터프리터의 처리이고, S17∼S20이 JIT 컴파일러의 처리이다.
상기 인터프리터의 처리 속도가 느린 것을 해결하는 방법으로서, JIT(Just-in-Time) 컴파일러를 사용하는 방법이 일반적으로 사용되고 있었다. 이 JIT 컴파일러는 바이트 코드를 네이티브 코드로 컴파일한다. 이에 의해, 어플리케이션은 직접 그 머신의 프로세서로 실행할 수 있게 되어, 고속 실행이 가능하게 된다.
일반적으로, JIT 컴파일러는 다운로드한 어플리케이션 프로그램의 클래스, 또는 실행을 개시한 메소드라는 단위로 컴파일을 행한다. 즉, 메소드의 바이트 코드 전체를 컴파일한다. 또한, 컴파일한 네이티브 코드는 메모리(프로그램 상의 저장 영역) 상에 저장되어, 다시 실행을 행할 때에는 재이용되고, 첫번째 실행 시에는 컴파일의 오버헤드가 있지만, 두번째부터는 이 오버헤드없이 고속으로 실행할 수 있다. 구체적으로는, 다음과 같이 된다.
우선, 바이트 코드의 명령 페치를 행하고(S11), 페치한 명령을 디코드한다(S12). 그리고, 디코드한 결과가 실행이면, 그 명령을 실행하고(S13, S14), S11의 처리로 이행한다. 또한, 디코드한 결과가 분기이면, 분기 처리를 행하고(S15), S11의 처리로 이행한다. 또한, 디코드한 결과가 메소드 호출이면, 메소드 호출을 행하고(S16), 컴파일이 종료되었는지를 판단한다(S17).
그 결과, 컴파일이 종료되지 않았으면, 컴파일을 해야 하는지를 판단하고(S18), 컴파일해야 하지 않으면, S11의 처리로 이행하지만, 컴파일해야 하면, 메소드로 호출한 코드를 JIT 컴파일러에 의해 컴파일하여 네이티브 코드를 생성하여, 네이티브 코드의 저장 영역에 저장하고(S19), 네이티브 코드를실행한다(S20). 네이티브 코드의 실행 중, 메소드 호출이 있으면, S16의 처리로 이행하고, 메소드의 처리가 종료하면, S11로 이행한다. 또한, S17의 처리에서, 컴파일이 종료되면, S20의 처리로 이행한다. 이후, 마찬가지로 하여 처리를 행한다.
또, 상기 바이트 코드(bytecode)는, Java에서 개발한 소프트의 바이너리 표현 형식으로서 미국 선 마이크로 시스템이 정한 Java 가상 머신(가상 계산기)의 머신 코드를 말한다. 또한, 바이트 코드를 머신이 직접 실행할 수 있는 네이티브 코드로 변환하는 소프트웨어를 「JIT(Just-in-time) 컴파일러」라고 한다.
또한, 「메소드」(Method)는, 오브젝트 지향 프로그래밍에 있어서, 오브젝트가 실행하는 조작의 방법을 기술한 프로그램(서브 루틴과 동일한 의미)을 의미한다.
도 23은 종래의 가상 계산기를 구비한 단말 장치의 구성을 나타내는 도면이다.
도 23에서, 참조 부호 51은 서버이다. 참조 부호 52는 서버(51)에 구비되어 있는 JAVA 어플리케이션 프로그램이다. 참조 부호 53은 JAVA 컴파일러로서, JAVA 어플리케이션 프로그램을 컴파일하는 것이다. 참조 부호 54는 출력부로서, JAVA 컴파일러에 의해 컴파일된 바이트 코드를 네트워크에 출력하는 것이다.
참조 부호 61은 단말 장치이다. 참조 부호 62는 입력부로서, 서버(51)로부터 송신되는 바이트 코드를 입력하는 것이다. 참조 부호 63은 메모리의 바이트 코드 보유 영역으로서, 입력된 바이트 코드를 보유하는 것이다. 참조 부호 64, 65는 바이트 코드로 컴파일된 메소드이다. 참조 부호 66은 가상 계산기이다. 참조 부호 71은 인터프리터이다. 참조 부호 73은 JIT 컴파일러이다. 참조 부호 3은 네이티브 코드 영역으로서, JIT 컴파일러에 의해 컴파일된 네이티브 코드를 보유하는 메모리의 영역이다. 참조 부호 80은 CPU이다. 참조 부호 81은 연산 결과를 보유하는 메모리의 연산 결과 보유 영역이다. 참조 부호 82는 출력부로서, 연산 처리된 결과를 출력하는 것이다.
도 23에서, 서버(51)로부터 송신되어 온 바이트 코드는 입력부(62)에 의해 입력되고, 바이트 코드 보유 영역(63)에 바이트 코드 어드레스에 의해 보유된다. 인터프리터(71)는 바이트 코드를 해석하여 실행한다. 디코드한 결과가 메소드이면, JIT 컴파일러(73)는 바이트 코드 보유 영역으로부터 바이트 코드 명령을 입력하여 컴파일한다. 컴파일된 네이티브 코드는 네이티브 코드 보유 영역(3)의 네이티브 코드 어드레스에 보유된다.
CPU(80)에 의해 연산된 결과는 메모리의 연산 결과 보유 영역(81)에 보유되어, 출력부(82)에 의해 출력된다.
도 24는 종래의 가상 계산기를 구비한 전화기의 구성을 나타내는 도면이다.
도 24에서, 도 22와 동일한 번호는 동일한 것을 나타낸다. 도 24에서, 서버(51)로부터 송신되어 온 바이트 코드는 입력부(62)에 의해 입력되고, 바이트 코드 보유 영역(63)에 바이트 코드 어드레스에 의해 보유된다. 인터프리터(71)는 바이트 코드를 순차적으로 해석하여, 디코드된 바이트 코드를 CPU(81)는 연산 처리한다. 연산 처리된 결과는 메모리의 연산 결과 보유 영역(81)에 보유되어, 출력부(82)에 의해 출력된다.
상기와 같은 종래의 가상 계산기는, 다음과 같은 과제가 있었다.
휴대 전화기나 PDA 등의 휴대형 무선 통신 기기에서는 사용할 수 있는 메모리 용량이 한정되어 있으며, 컴파일한 코드를 전부 메모리 상에 저장할 수는 없다. 또한, 상기 휴대형 무선 통신 기기에서의 소프트웨어의 실행은 게임 등의 대화형의 어플리케이션이 많아, 응답성을 높이기 위해서는 컴파일에 그다지 시간을 들일 수는 없다.
특히, 상기 휴대형 무선 통신 기기에 탑재된 프로세서에서는 처리 능력이 비교적 낮기 때문에, 큰 프로그램을 컴파일하면, 실행 중인 프로그램이 일순간 멈춰 보이는 경우도 있다. 또한, 한 번밖에 실행되지 않은 바이트 코드인 경우, 컴파일하는 시간의 오버헤드 때문에, 인터프리터로 실행하는 것보다 느려진다.
본 발명은 이러한 종래의 과제를 해결하여, 한정된 메모리 용량으로 처리의 고속화를 도모하여, 응답 성능의 향상을 도모하는 것을 목적으로 한다.
〈발명의 개시〉
본 발명은 상기한 목적을 달성하기 위해서, 다음과 같이 구성된 것이다.
(ⅰ) 본 발명의 가상 계산기는, 바이트 코드를 보유하는 바이트 코드 보유 영역과, 바이트 코드를 순차적으로 해석하여 실행하는 수단과, 상기 바이트 코드를 가상 계산기가 직접 실행할 수 있는 네이티브 코드로 컴파일하는 컴파일러와, 그 네이티브 코드를 보유하는 네이티브 코드 보유 영역을 구비한 메모리 상의 가상 계산기로서, 상기 바이트 코드의 어드레스로부터 생성된 태그 정보와, 그 바이트 코드가 컴파일된 네이티브 코드의 네이티브 코드 영역에서의 어드레스를 보유하는 검색 테이블을 구비하도록 하였다.
(ⅱ) 본 발명의 가상 계산기의 동작 방법은, 바이트 코드를 보유하는 바이트 코드 보유 영역과, 바이트 코드를 순차적으로 해석하여 실행하는 수단과, 상기 바이트 코드를 가상 계산기가 직접 실행할 수 있는 네이티브 코드로 컴파일하는 컴파일러와, 그 네이티브 코드를 보유하는 네이티브 코드 보유 영역을 구비한 메모리 상의 가상 계산기의 동작 방법으로서, 검색 테이블에 바이트 코드의 어드레스로부터 생성된 태그 정보와 그 바이트 코드가 컴파일된 네이티브 코드의 네이티브 코드 영역에서의 어드레스를 보유하여, 검색 테이블을 검색함으로써 바이트 코드의 컴파일의 필요 여부를 판정하도록 하였다.
(ⅲ) 본 발명의 단말 장치는, 바이트 코드를 보유하는 바이트 코드 보유 영역과, 바이트 코드를 순차적으로 해석하여 실행하는 수단과, 상기 바이트 코드를 가상 계산기가 직접 실행할 수 있는 네이티브 코드로 컴파일하는 컴파일러와, 그 네이티브 코드를 보유하는 네이티브 코드 보유 영역을 갖는 메모리 상의 가상 계산기를 구비하고, 상기 바이트 코드의 어드레스로부터 생성된 태그 정보와, 그 바이트 코드가 컴파일된 네이티브 코드의 네이티브 코드 영역에서의 어드레스를 보유하는 검색 테이블을 구비하도록 하였다.
상기한 바와 같은 본 발명은, 바이트 코드의 어드레스로부터, 컴파일되어 있는지의 여부를 판단하기 위한 정보와, 컴파일된 네이티브 코드의 어드레스를 검색하는 검색 테이블을 구비하고 있다.
따라서, 상기 검색 테이블을 검색함으로써 컴파일되어 있는지의 여부를 판단하거나, 컴파일되어 있는 경우에, 해당하는 네이티브 코드의 저장 어드레스를 검색하는 것이 용이하게 된다. 또한, 메소드의 사용 빈도가 높은 일부만을 컴파일하고, 보유할 수 있다. 그 때문에, 네이티브 코드를 생성하여 저장하기 위해서 사용하는 메모리가 제한되는 휴대 단말 장치라도, 적은 메모리로 컴파일할 수 있어, 처리를 고속화할 수 있다.
본 발명은 JIT 컴파일러를 구비한 가상 계산기에 관한 것이다. 본 발명의 가상 계산기는 단말 장치 또는 휴대 전화기나 무선 통신 기능을 갖는 휴대 정보 단말기(PDA) 등의 휴대형 무선 통신 기기에 이용 가능한 것이다.
도 1은 본 발명의 가상 계산기를 구비하는 단말 장치의 구성을 나타내는 도면.
도 2는 본 발명의 제1 실시 형태의 예 1의 흐름도를 나타내는 도면.
도 3은 본 발명의 제1 실시 형태의 예 2의 흐름도를 나타내는 도면.
도 4는 본 발명의 제1 실시 형태의 동작 설명도.
도 5는 본 발명의 제2 실시 형태의 동작 설명도.
도 6은 본 발명의 제2 실시 형태의 흐름도를 나타내는 도면.
도 7은 본 발명의 제3 실시 형태의 동작 설명도.
도 8은 본 발명의 제3 실시 형태의 흐름도를 나타내는 도면.
도 9는 본 발명의 제4 실시 형태의 동작 설명도.
도 10은 본 발명의 제5 실시 형태의 실행 제어 수단과 그 흐름도를 설명하는 도면.
도 11은 본 발명의 제6 실시 형태의 실행 제어 수단과 그 흐름도를 설명하는 도면.
도 12는 본 발명의 제7 실시 형태의 실행 제어 수단과 그 흐름도를 설명하는 도면.
도 13은 본 발명의 제8 실시 형태의 실행 제어 수단과 그 흐름도를 설명하는 도면.
도 14는 본 발명의 제9 실시 형태의 동작 설명도.
도 15는 본 발명의 제9 실시 형태의 흐름도를 나타내는 도면.
도 16은 본 발명의 제10 실시 형태의 동작 설명도.
도 17은 본 발명의 제10 실시 형태의 흐름도를 나타내는 도면.
도 18은 본 발명의 제11 실시 형태의 설명도.
도 19는 본 발명의 각 실시 형태에 있어서의 검색 테이블과 네이티브 코드 영역의 관계를 나타내는 도면.
도 20은 본 발명의 제12 실시 형태를 나타내는 도면으로서, 본 발명의 가상 계산기를 구비한 휴대 전화기의 구성을 나타내는 도면.
도 21은 종래의 인터프리터의 처리 흐름도.
도 22는 종래의 인터프리터와 JIT 컴파일러를 조합하였을 때의 처리 흐름도.
도 23은 종래의 가상 계산기를 구비한 단말 장치를 나타내는 도면.
도 24는 종래의 가상 계산기를 구비한 휴대 전화기를 나타내는 도면.
〈발명을 실시하기 위한 최량의 형태〉
이하, 본 발명의 실시 형태를 도면에 기초하여 상세히 설명한다. 또, 이하에 설명하는 가상 계산기는, 프로그램 상에서만 실현되는 가상적인 계산기로서, 상기 휴대형 무선 통신 기기 내의 메모리에 저장된 프로그램을, 내부의 프로세서(CPU, 또는 MPU)가 실행함으로써 실현되는 가상 머신이다.
따라서, 이하에 설명하는 흐름도에서 표현된 처리는, 전부 상기 프로그램 상에서 실행되는 것이다. 그 때문에, 가상 계산기 상의 메모리, 코드 캐쉬, 검색 테이블 등은 모두 상기 프로그램 상에서 실현되는 것이다.
본 발명의 제1 실시 형태의 설명
본 발명의 제1 실시 형태는, 가상 계산기의 바이트 코드를 소프트웨어로 해석·실행하는 기능을 갖고, 메모리 상에, 용량이 제한된 네이티브 코드의 저장 영역으로서 코드 캐쉬를 갖고, 바이트 코드를 실행할 때에, JIT 컴파일러에 의해 바이트 코드를 가상 계산기가 직접 실행할 수 있는 네이티브 코드로 컴파일하여 코드 캐쉬에 저장한 후, 그 네이티브 코드를 실행하는 JIT 컴파일러(이하, 단순히 「컴파일러」라고도 기재함)를 구비한 가상 계산기에 관한 것으로, 바이트 코드의 어드레스로부터 컴파일되어 있는지의 여부를 판단하기 위한 정보(후술함)와, 컴파일된 네이티브 코드의 어드레스를 검색하는 검색 테이블을 구비하고 있다.
그리고, 컴파일을 행할 때에 네이티브 코드의 저장 영역에 빈 부분이 없으면, 이미 저장 완료된 컴파일 코드를 파기하여 상기 저장 영역에 빈 영역을 만들고, 검색 테이블을 갱신하는 것이다.
도 1은 본 발명의 가상 계산기를 구비한 단말 장치의 구성을 나타낸다. 도 1에서, 참조 부호 2는 검색 테이블이다. 참조 부호 3은 네이티브 코드 영역으로서, 네이티브 코드를 보유하는 메모리의 영역이다.
참조 부호 61은 단말 장치이다. 참조 부호 62는 입력부로서, 서버(51)로부터 송신되는 바이트 코드를 입력하는 것이다. 참조 부호 63은 메모리의 바이트 코드 보유 영역으로서, 입력된 바이트 코드를 보유하는 것이다. 참조 부호 64, 65는 바이트 코드로 컴파일된 메소드이다.
참조 부호 66은 가상 계산기이다. 참조 부호 71은 인터프리터이다. 참조 부호 72는 컴파일 실행 제어 수단으로서, 검색 테이블 검색 수단(76)의 검색 결과에 따라 컴파일의 필요 여부를 판정하고, 반드시 실행되는 부분, 또는 이용 빈도가 높은 명령 등만의 컴파일, 또는 일정량의 명령만 컴파일하거나, 또는 일정 시간만 컴파일하는 등과 같이 부분적으로 컴파일하는 것을 판정하는 것이다. 참조 부호 73은 JIT 컴파일러이다. 참조 부호 80은 CPU이다. 참조 부호 81은 연산 결과를 보유하는 메모리의 연산 결과 보유 영역이다. 참조 부호 82는 출력부로서, 연산 처리된 결과를 출력하는 것이다. 참조 부호 74는 태그 생성 수단으로서, 검색 테이블(2)에 태그를 생성하고, 바이트 코드의 네이티브 코드 영역(3)의 바이트 코드 어드레스를 태그에 기입하는 것이다. 참조 부호 75는 네이티브 코드 등록 수단으로서, JIT 컴파일러로 생성된 네이티브 코드의 네이티브 코드 영역에서의 어드레스를 대응 바이트 코드에 대응하는 검색 테이블의 태그에 등록하는 것이다. 참조 부호 76은 검색 테이블 검색 수단으로서, 검색 테이블을 검색하고, 바이트 코드가 컴파일되어 네이티브 코드 영역에 보유되어 있는지를 판정하는 것이다. 참조 부호 78은 네이티브 코드 실행 수단으로서, 검색 테이블 검색 수단(76)의 검색 결과에 따라, 네이티브 코드 영역(3)에 보유되어 있는 네이티브 코드를 실행하는 것이다.
도 1에서, 인터프리터(71)는 처리 시퀀스의 선두 바이트 코드에 대응시켜, 태그 생성 수단(74)에 의해 태그를 생성한다. 또는 바이트 코드마다 태그를 생성한다. 네이티브 코드 등록 수단(75)은 JIT 컴파일러(73)에 의해 바이트 코드가 컴파일되어 네이티브 코드가 생성되면, 그 바이트 코드의 태그에 대응시켜 네이티브 코드 어드레스를 검색 테이블(2)에 등록한다. 검색 테이블 검색 수단(76)은 검색 테이블(2)의 태그에 해당 바이트 코드가 등록되어 있는지를 판정한다. 검색 테이블 검색 수단(76)이, 검색 테이블(2)에 대상의 바이트 코드에 대응하는 네이티브 코드가 등록되어 있는 경우(히트)에는, 네이티브 코드 실행 수단(78), 네이티브 코드에 의해 처리를 실행한다.
서버(51)로부터 송신되어 온 바이트 코드는 입력부(62)에 의해 입력되고, 바이트 코드 보유 영역(63)에 해당 바이트 코드의 어드레스인 바이트 코드 어드레스에 보유된다. 인터프리터(71)는 바이트 코드를 해석하여 실행한다. 디코드한 결과가 메소드이고, 검색 테이블 검색 수단(76)의 검색 테이블의 검색 결과가, 네이티브 코드가 컴파일 완료되어 있는 경우에는, 네이티브 코드 실행 수단(78), 네이티브 코드에 의해 처리를 실행한다. 검색 테이블 검색 수단(76)의 검색 테이블의 검색 결과가 네이티브 코드가 컴파일되어 있지 않은 경우에는, 컴파일 실행 제어 수단(72)의 지시는 명령, 메소드 등을 부분 컴파일을 하는 것을 JIT 컴파일러에 지시한다. JIT 컴파일러(73)는 부분적으로 컴파일한다. JIT 컴파일러에 의해 컴파일된 네이티브 코드는 네이티브 코드 보유 영역(3)의 그 네이티브 코드의 네이티드 코드 어드레스에 보유된다. 또한, 네이티브 코드 등록 수단(75)은 컴파일된 바이트 코드 대응 태그에 대응하는 네이티브 코드 어드레스를 대응시켜 등록한다(검색 테이블(2)에의 등록은 컴파일 시퀀스의 블록의 최초의 명령만으로 충분함).
CPU(80)에 의해 연산된 결과는 연산 결과 보유 영역(81)에 보유되고, 출력부(82)에 의해 출력된다.
도 2는 본 발명의 가상 계산기의 제1 실시 형태의 예 1의 흐름도를 나타낸다. 도 2에 기초하여, 본 발명의 제1 실시 형태를 설명한다. 또, S31∼S40은 각 처리 단계를 나타낸다. 이 처리에서는 모든 바이트 코드를 대상으로 하여 컴파일되어 있는지를 체크하는 예로서, 가상 계산기 상의 처리이다.
우선, 모든 바이트 코드에 대하여, 검색 테이블 상의 태그(tag) 정보를 이용하여(상세한 설명은 후술함) 컴파일이 종료되었는지를 판단하고(S31), 컴파일이 종료되지 않았으면, 컴파일해야 할지를 판단하고(S32), 컴파일해야 하지 않는다고 판단한 경우에는 바이트 코드 명령의 페치를 행하고(S33), 페치된 명령의 디코드를 행한다(S34).
그 결과, 실행이면(S35, S36) 그 명령을 실행하고, S31의 처리로 이행한다. 또한, 분기이면(S37) 분기 처리를 행하고, S31의 처리로 이행한다. 또한, 메소드 호출이면(S38), 메소드 호출을 행하고, S31의 처리로 이행한다.
또한, 상기 S32의 처리에서, 컴파일해야 한다고 판단한 경우에는 부분적으로 컴파일하고, 네이티브 코드를 생성하여 네이티브 코드 저장 영역에 저장하고(S39), 네이티브 코드를 실행하여(S40), S31의 처리로 이행한다. 또한, S31의 처리에서, 컴파일이 종료되면, S40의 처리로 이행한다. 상기 처리에서, S31∼S38은 인터프리터의 처리이고, S39, S40이 JIT 컴파일러에 의한 처리이다.
도 3은 본 발명의 가상 계산기의 제1 실시 형태의 예 2의 흐름도를 설명한다. 이하, 도 3에 기초하여, 본 발명의 제1 실시 형태의 예 2를 설명한다. 또, S41∼S50은 각 처리 단계를 나타낸다.
이 처리에서는 분기, 메소드 호출 등의 실행 제어가 도중에 끊기는 시점에서, 컴파일의 체크를 행한다. 일반적인 JIT 컴파일러와의 차이로서는 컴파일을 메소드 단위로 행하지 않고, 이하에 설명하는 제5, 제6, 제7 및 제8 실시 형태 등의 조건으로, 컴파일을 중단하는 것이 특징이다.
우선, 바이트 코드 명령의 페치를 행하고(S41), 명령 디코드를 행한다(S42). 그 결과, 실행이면(S43, S44) 그 명령을 실행하여, S41의 처리로 이행한다. 또한, 분기이면(S45) 분기 처리를 행하고(S45), 메소드 호출이면(S46) 메소드 호출을 행한다.
그리고, 분기 또는 메소드 호출을 행한 경우, 컴파일이 종료되었는지를 판단하고(S47), 컴파일이 종료되지 않으면, 컴파일해야 할지를 판단한다(S48). 그 결과, 컴파일해야 하지 않는다고 판단한 경우에는 S41의 처리로 이행한다.
또한, 컴파일해야 한다고 판단한 경우에는 도중까지 컴파일을 행하여, 네이티브 코드를 생성하여 네이티브 코드 저장 영역에 저장한다(S49). 그리고, 네이티브 코드를 실행하여(S50), S47의 처리, 또는 S46의 처리로 이행한다.
도 4는 본 발명의 가상 계산기의 제1 실시 형태의 동작 설명도이다. 도 4에서, 참조 부호 1은 비교기, 참조 부호 2는 검색 테이블, 참조 부호 3은 네이티브코드 영역이다. 참조 부호 71은 인터프리터, 참조 부호 72는 컴파일 실행 제어 수단, 참조 부호 73은 JIT 컴파일러이다. 참조 부호 74는 태그 생성 수단, 참조 부호 75는 네이티브 코드 등록 수단이다. 참조 부호 76은 검색 테이블 검색 수단이다.
본 발명은 검색 테이블(2), 태그 생성 수단(74), 네이티브 코드 등록 수단(75), 검색 테이블 검색 수단(76)에 의해 네이티브 영역(3)에 대하여 캐쉬 메모리와 마찬가지의 동작을 하는 것이다. 이하의 설명에서, 코드 캐쉬는 네이티브 코드 영역(3)에 대응하는 것이다. 참조 부호 78은 네이티브 코드 실행 수단이다.
도 4에서, 상기한 바와 같이 컴파일이 종료하였는지를 조사하여 판단하기 위해서, 검색 테이블(2)이 사용된다. 이 검색 테이블(2)은 태그(tag)와, 네이티브 코드의 어드레스(코드 캐쉬(3) 내의 네이티브 코드 영역의 어드레스)와의 대응 정보를 등록할 수 있게 되어 있으며, 네이티브 코드의 어드레스로부터 코드 캐쉬(3)의 네이티브 코드 영역의 데이터를 검색할 수 있게 되어 있다.
또한, 검색 테이블(2)은 바이트 코드 어드레스(상위 M 비트+하위 N 비트로 함)의 하위 N 비트를 이용하여 태그(tag)를 검색함으로써, 네이티브 코드의 어드레스를 검색할 수 있게 되어 있다. 그리고, 바이트 코드 어드레스의 상위 M 비트를 비교기(1)에 입력함과 함께, 검색 테이블의 태그(tag) 정보를 비교기(1)에 입력하여, 양자가 일치하는지의 비교를 자동적으로 행하게 되어 있다. 검색 일치(히트)인 경우에는, 네이티브 코드 실행 수단(78)에 네이티브 코드 보유 영역에 보유되어 있는 네이티브 코드에 의해 명령이 실행된다.
상기 비교의 결과, 양자가 일치(hit)한 경우, 비교기(1)로부터 일치 출력이 나오고, 이 일치 출력 신호에 의해 컴파일 완료라고 판단할 수 있게 되어 있다.
본 발명의 제1 실시 형태는 다음과 같은 특징을 갖는 것이다. 검색 테이블(2)을 검색함으로써 컴파일되어 있는지의 여부를 판단하거나, 컴파일되어 있는 경우에, 해당하는 네이티브 코드의 저장 어드레스(코드 캐쉬(3) 내의 네이티브 코드 영역의 어드레스)를 검색하는 것이 용이하게 된다.
그 결과, 바이트 코드를 네이티브 코드로 컴파일함으로써, 어플리케이션 프로그램의 실행 시간을 빨리 할 수 있게 된다. 또한, 종래의 JIT 컴파일러가 네이티브 코드를 생성하여 저장하기 위해서 사용하는 메모리가 제한되어, 적은 메모리 용량이라도 처리를 고속화할 수 있다.
다음으로, 본 발명의 제2 실시 형태를 설명한다. 본 발명의 제2 실시 형태는, 제1 실시 형태에서 검색 테이블(2) 상 또는 코드 캐쉬(3) 상에 명령의 실행 횟수를 계수하는 실행 카운터를 설치하고, 가상 계산기의 코드인 바이트 코드를 실행할 때에, 실행 카운터의 값이 미리 정한 특정 횟수보다 작으면 인터프리터로 실행하고, 상기 특정 횟수보다 크고, 빈번하게 실행되는 바이트 코드는 JIT 컴파일러에 의해 컴파일하여 실행하도록 한 것이다.
도 5는 본 발명의 제2 실시 형태의 구성과 동작을 설명하는 도면이다. 도 5에서, 참조 부호 71은 인터프리터이다. 참조 부호 72는 컴파일 실행 제어 수단(선택 처리 수단)이다. 참조 부호 73은 JIT 컴파일러이다. 참조 부호 78은 네이티브 코드 실행 수단이다. 컴파일 실행 제어 수단(72)에 있어서, 참조 부호 91은 카운터값 판정부로서, 검색 테이블(2)에 기록되어 있는 카운터값을 읽는 것이다. JIT 컴파일러(73)에 있어서, 참조 부호 92는 카운터 갱신 수단으로서, 카운터값을 갱신하는 것이다. 참조 부호 100은 컴파일 수단이다.
도 5에서, 인터프리터(71)는 바이트 코드의 어드레스가 태그에 등록되어 있지 않으면, 태그에 바이트 코드의 어드레스를 등록하여, 실행 카운터를 클리어한다. 또한, 인터프리터(71)는 태그에 바이트 코드 어드레스가 등록 완료이지만, 컴파일 완료가 아닌 경우에는 실행 카운터의 카운트값을 가산한다. 카운트값 판정부(91)는 카운트값을 판정하여, 특정 횟수에 도달해 있지 않으면, 인터프리터가 바이트 코드의 명령을 실행한다. 바이트 코드의 발생 횟수가 특정 횟수에 달한 경우에는 카운트값 판정 수단(91)이 그것을 판정하면, 컴파일 실행 제어 수단(72)의 컴파일 지시에 의해 JIT 컴파일러(73)는 대상의 바이트 코드를 컴파일하여, 네이티브 코드가 네이티브 코드 영역(3)에 보유된다. 또한, 그 네이티브 코드 어드레스가 그 명령에 대응하는 태그에 등록된다. 검색 테이블(2)에 네이티브 코드 어드레스가 등록된 후에는, 바이트 코드의 실행은 검색 테이블 검색 수단(76)에 의한 검색 테이블(2)의 검색 히트에 의해, 네이티브 코드 영역의 대응하는 네이티브 코드에 의해 명령이 실행된다.
도 5에 도시한 바와 같이, 검색 테이블(2)은 태그(tag)와, 실행 카운터와, 네이티브 코드의 어드레스를 대응시킨 정보가 저장되어 있으며, 네이티브 코드의 어드레스로부터 코드 캐쉬(3)의 네이티브 코드 영역의 어드레스를 검색할 수 있게 되어 있다.
또한, 검색 테이블(2)은 바이트 코드 어드레스(상위 M 비트+하위 N 비트로 함)의 하위 N 비트를 이용하여 태그(tag)를 검색함으로써, 네이티브 코드 어드레스를 검색할 수 있게 되어 있다. 그리고, 바이트 코드 어드레스의 상위 M 비트를 비교기(1)에 입력함과 함께, 검색 테이블의 태그(tag) 정보를 비교기(1)에 입력하여, 양자가 일치(hit)하는지의 비교를 행한다. 검색 히트인 경우에는, 네이티브 코드 실행 수단(78)에 의해 네이티브 코드에 의해 처리가 실행된다.
상기 비교의 결과, 양자가 일치(hit)한 경우, 비교기(1)로부터 일치 출력이 나오고, 이 일치 출력 신호에 의해 컴파일 완료라고 판단한다. 이러한 검색 테이블(2)을 이용하여, 바이트 코드를 실행할 때에, 컴파일 실행 제어 수단(72)은 검색 테이블 검색 수단(76)의 검색 결과가 미스 히트인 경우에 실행 카운터의 카운트값을 판정하여, 실행 카운터의 값이 특정 횟수보다 작으면 인터프리터(종래의 처리)로 실행하도록 하여, 특정 횟수보다 확실히 빈번하게 실행되는 바이트 코드는 JIT 컴파일러에 컴파일할 것을 지시한다. 또, 상기 실행 카운터는 코드 캐쉬(네이티브 코드 영역)(3)에 설치해도 된다.
도 6은 본 발명의 가상 계산기의 제2 실시 형태의 흐름도로서, 컴파일 선택 처리 흐름도이다. 이하, 도 6에 기초하여, 본 발명의 제2 실시 형태의 컴파일의 선택 처리를 설명한다. 또, S61∼S75는 각 처리 단계를 나타낸다.
이 처리는 인터프리터의 처리(S61∼S67)와, JIT 컴파일러에 의한 컴파일러의 처리(S71∼S75)로 나뉘어져 있다. 인터프리터의 처리에서는 컴파일 완료인지 판단하고(S61), 컴파일 완료가 아니면, 테이블 등록 완료(도 4의 검색 테이블(2)의 tag에 등록되어 있는지)를 판단한다(S62). 그 결과, 테이블 등록 완료가 아니면, 태그(tag)에 어드레스 등록을 행하고(S63), 실행 카운터를 클리어한다(S64). 다음으로, 명령 페치를 행하고(S65), 디코드를 행하여(S66), 실행한다(S67). 그리고, S61의 처리로 이행한다.
S62의 처리에서 테이블 등록 완료라고 판단한 경우에는, 검색 테이블(2)의 실행 카운터를 UP(+1)하고(S71), 미리 정한 특정 횟수보다 큰지를 판단한다(S72). 그 결과, 특정 횟수보다 작으면, S65로 이행하여 인터프리터로 실행하여, 특정 횟수 이상인 경우에는 S73으로 이행하여 JIT 컴파일러에 의해 바이트 코드를 컴파일하여 네이티브 코드를 생성하여, 코드 캐쉬(3)에 등록한다. 또한, 이 때, 검색 테이블(2)에도 필요한 정보(네이티브 코드의 어드레스)를 등록한다(S74). 다음으로, 상기 네이티브 코드를 실행하고(S75), S61로 이행한다.
또한, S61의 처리에서 컴파일 완료라고 판단한 경우에는 S75로 이행하여, 네이티브 코드를 실행한다.
본 발명의 제2 실시 형태는 다음의 특징을 갖는다. 일반적으로, 컴파일 처리는 시간을 요하기 때문에, 그다지 실행되지 않는 바이트 코드는 컴파일하여 실행하는 것보다, 인터프리터로 실행하는 쪽이 전체의 처리 속도가 오른다. 그 때문에, 본 발명의 제2 실시 형태에 따르면, 그다지 실행되지 않는 바이트 코드는 컴파일되지 않기 때문에, 전체의 속도를 높일 수 있다.
도 7(a), (b)는 본 발명의 가상 계산기의 제3 실시 형태의 동작 설명도이다. 도 7(a)는 제1회째 액세스의 검색 테이블의 상태를 나타낸다. 도 7(b)는 제2회째액세스 검색 테이블의 상태를 나타낸다.
본 발명의 제3 실시 형태는 본 발명의 제2 실시 형태와 같은 실행 카운터를 사용하지 않고 컴파일의 선택을 행하는 예로서, 검색 테이블에 첫번째의 실행 시에는 바이트 코드 어드레스만을 등록(검색 테이블(2)의 tag에 등록)하고, 네이티브 코드의 어드레스의 등록은 특별한 컴파일의 처리를 행하는 함수(컴파일 또는 처리의 선두 어드레스), 또는 숫자 0으로 해두고, 첫번째는 인터프리터로 실행하고, 두번째는 컴파일하여 실행하는 예이다.
도 7(a)는 제1회째 액세스를 나타낸다. 도 7(a)에서, 참조 부호 71은 인터프리터, 참조 부호 79는 검색 테이블 정보 등록 수단으로서, 인터프리터(71)의 처리에 의해 검색 테이블의 네이티브 코드 어드레스의 등록 영역에 기록을 행하는 것이다. 제1회째 액세스에서는, 검색 테이블(2)에 바이트 코드 어드레스가 미등록이므로, 인터프리터(71)의 처리에 의해 바이트 코드를 등록하여, 검색 테이블(2)의 네이티브 코드 어드레스를 등록하는 영역에 0 또는 특별한 컴파일 처리를 행하는 함수를 기입한다. 그리고, 인터프리터(71)의 처리에 의해 바이트 코드를 실행한다.
도 7(b)는 제2회째 동작 설명도이다. 참조 부호 71은 인터프리터, 참조 부호 721은 실행 제어 수단으로서, 첫번째는 인터프리터로 실행하고, 두번째는 상기 바이트 코드를 가상 계산기가 직접 실행할 수 있는 네이티브 코드로 컴파일하는 컴파일러인 JIT 컴파일러에 의해 컴파일하여 실행하는 것이다. 참조 부호 73은 JIT 컴파일러이다. 제2회째에 그 바이트 코드의 처리가 발생한 경우에는 검색테이블(2)의 네이티브 코드 어드레스 영역에 0 또는 특별한 함수가 등록되어 있다. 실행 제어 수단(721)은 그것을 판정하여, JIT 컴파일러(73)에 컴파일 실행을 지시한다. 컴파일로 생성된 네이티브 코드는 네이티브 코드 보유 영역(3)에 보유되어, 네이티브 코드에 의해 실행된다. 또한, 네이티브 코드 등록 수단(75)에 의해, 검색 테이블(2)에 네이티브 코드 어드레스가 등록된다. 이후, 그 바이트 코드의 처리가 발생하면, 검색 테이블 검색 수단의 검색 결과가 히트되어, 그 네이티브 코드에 의해 실행된다.
도 8은 본 발명의 제3 실시 형태의 컴파일 선택 처리 흐름도이다. 또, S81∼S94는 각 처리 단계를 나타낸다.
이 처리는 인터프리터의 처리(S81∼S86)와, 컴파일러의 처리(S91∼S94)로 나뉘어져 있다. 인터프리터의 처리에서는, 우선 A부터 시작하여 테이블 등록이 완료되었는지를(검색 테이블(2)에 등록되어 있는지를) 판단하고(S81), 등록이 완료되어 있지 않으면(첫번째), 인터프리터에 의한 처리를 행한다. 이 경우, 검색 테이블(2)의 태그(tag)에 바이트 코드 어드레스(바이트 코드의 어드레스만)를 등록한다(S82).
다음으로, 네이티브 코드 어드레스에, 엔트리 B를 등록하여(S83), 명령 페치를 행하고(S84), 디코드를 행한다(S85). 그리고, 디코드한 명령을 실행하고(S86), S81의 처리로 이행한다.
또한, S81의 처리에서, 테이블 등록 완료라고 판단한 경우(두번째)에는 JIT 컴파일러에 의한 처리를 행한다. 이 경우, 네이티브 코드 어드레스로점프하고(S91), 엔트리 B로부터 JIT 컴파일러에 의한 컴파일을 행하고(S92), 네이티브 코드 어드레스 등록을 행한다(S93). 그리고, 네이티브 코드를 실행하고(S94), S8의 처리로 이행한다.
또한, 상기 S91의 처리 결과에 의해, S94로 이행하여 네이티브 코드를 실행하고(S94), S81의 처리로 이행한다.
본 발명의 제3 실시 형태는 다음의 특징을 갖는 것이다. 컴파일 처리는 시간을 요하기 때문에, 한 번밖에 실행되지 않는 바이트 코드는 컴파일하여 실행하는 것보다 인터프리터로 실행하는 쪽이 빠르다. 따라서, 상기한 바와 같이 처리를 행함으로써, 어플리케이션 프로그램의 전체의 실행 속도를 빨리 할 수 있다. 또한, 상기 본 발명의 제2 실시 형태와 비교하여, 실행 카운터를 위한 영역이 필요 없어, 메모리를 절약할 수 있다.
본 발명의 제4 실시 형태를 설명한다. 본 발명의 제4 실시 형태는, 본 발명의 제1 실시 형태에서 검색 테이블은 컴파일되어 있는지만의 정보(태그의 정보)를 갖고, 네이티브 코드의 어드레스는 갖지 않는다. 네이티브 코드의 네이티브 코드 영역에서의 어드레스는, 바이트 코드의 어드레스로부터 계산하여 구한다.
도 9는 본 발명의 제4 실시 형태의 검색 테이블과 네이티브 코드 영역의 구성을 나타낸다. 이 검색 테이블(2)에는 태그(tag)만 저장되어 있다. 이 경우, 바이트 코드 어드레스의 하위 N 비트를 이용하여 검색 테이블(2)을 액세스함과 함께, 상기 N 비트의 하위 어드레스를 연산기(4)에 의해 정수배, 예를 들면, 8배(×8)하여, 그 값에 의해 네이티브 코드의 네이티브 코드 영역(3)에 있어서의 어드레스를설정한다.
또한, 검색 테이블(2)은 바이트 코드 어드레스(상위 M 비트+하위 N 비트로 함)의 하위 N 비트를 이용하여 태그(tag)를 검색할 수 있게 되어 있다. 그리고, 바이트 코드 어드레스의 상위 M 비트를 비교기(1)에 입력함과 함께, 검색 테이블의 태그(tag) 정보를 비교기(1)에 입력하여, 양자가 일치하는지의 비교를 행한다. 상기 비교 결과, 양자가 일치한 경우, 비교기(1)로부터 일치 출력이 나오지만, 이 일치 출력 신호에 의해 컴파일 완료로 판단한다. 어드레스는 바이트 코드의 하위 N 비트를 기초로 연산기(4)에 의해 연산한 값으로부터 구한다.
본 발명의 제4 실시 형태는 다음의 특징을 갖는다. 제4 실시 형태에 따르면, 바이트 코드의 어드레스를 기초로, 컴파일되는 네이티브 코드의 메모리 상의 어드레스가 일의적으로 결정된다. 그 때문에, 검색 테이블(2)로부터 네이티브 코드의 어드레스를 색인할 필요가 없다. 또한, 후술하는 네이티브 코드 영역에서의 네이티브 코드의 치환 시에는, 파기해야 할 네이티브 코드를 찾을 필요가 없어, 치환 처리를 단순하게 행할 수 있다.
본 발명의 제5 실시 형태를 설명한다. 본 발명의 제5 실시 형태는, 제1 실시 형태에서 컴파일 시간을 단축(응답성을 향상)하기 위해서, 컴파일하는 범위를 제한하도록 한 것이다. 처리 도중이라도, 바이트 코드의 특정한 명령(분기 명령, 메소드 호출 등)을 검출하면, 거기까지를 컴파일하여, 처리를 중단하는 명령(네이티브 코드의 분기 명령이나 인터럽트 명령)을 생성하고(네이티브 코드의 최종 코드 후에, 분기 명령이나 인터럽트 명령을 생성하고), 나머지는 컴파일하지 않도록 한것이다.
도 10(a)는 본 발명의 가상 계산기의 제5 실시 형태의 컴파일 실행 제어 수단(72)의 구성이다. 본 발명의 제5 실시 형태의 검색 테이블 등은 도 4의 제1 실시 형태와 마찬가지이다. 참조 부호 20은 처리 제한 수단으로서, 특정 명령을 판정하고, 특정 명령을 검출한 시점에, 컴파일의 실행을 중지하는 것이다. 참조 부호 21은 특정 명령 판정 수단으로서, IF 조건문에 있어서의 THEN의 처리, RETURN 명령 등의 명령을 판정하는 것이다. 참조 부호 25는 컴파일 완료 지시 수단으로서, 컴파일을 종료하는 지시를 하는 것이다.
도 10(b)는 본 발명의 제5 실시 형태의 컴파일 실행 제어 수단(72)과 JIT 컴파일러에 의한 컴파일의 흐름도이다. S1에서 컴파일한다. S2, S3에서 특정 명령을 검출하였는지 판정하여, 검출하지 않으면 S1에서 컴파일을 계속한다. S3에서 특정 명령을 검출하면, S4에서 컴파일을 종료한다.
즉, 가상 계산기에 있어서, 컴파일 시간을 단축하기 위해서, 컴파일하는 범위를 제한하여, 처리의 도중이라도, 바이트 코드의 특정한 명령을 검출하면, 거기까지를 컴파일하여 처리를 중단하는 명령을 생성하고, 나머지는 컴파일하지 않도록 처리를 제한하는 처리 제한 수단(20)을 구비하고 있다.
본 발명의 제5 실시 형태는 다음의 특징을 갖는다. 반드시 실행하는 부분만이 컴파일되어 효율이 좋다. 예를 들면, "IF 조건 THEN 처리"와 같은 바이트 코드의 열을 컴파일할 때, 「조건」을 처리하는 부분만 컴파일을 행하고, 「처리」의 부분은 컴파일하지 않는다.
이 경우, 종래는 메소드 전체를 컴파일하고 있었기 때문에, 전혀 실행하지 않는 부분도 컴파일하고 있었다. 이에 대하여, 제5 실시 형태에서는 반드시 실행하는 부분만을 컴파일하기 때문에, 컴파일에 소비되는 시간 낭비가 없어 고속이다. 또한, 메모리의 소비도 억제된다. 또한, 어플리케이션 프로그램의 응답성을 향상시킬 수 있다. 즉, 일반적으로 컴파일하고 있는 동안에는 어플리케이션 프로그램의 실행은 정지한다. 그러나, 본 발명에서는 컴파일은 실행에 반드시 필요한 부분만을 행하기 때문에, 컴파일을 위해서 어플리케이션 프로그램을 정지하는 시간을 단축할 수 있다.
본 발명의 제6 실시 형태를 설명한다. 제6 실시 형태는 컴파일 시간의 단축을 행하는 것으로, 제5 실시 형태에서, 특정한 명령의 검출 외에, 바이트 코드의 양으로 컴파일을 중단한다. 예를 들면, 100명령 컴파일한 곳에서 컴파일을 중단한다. 또, 제6 실시 형태는, 제5 실시 형태와 마찬가지로 특정한 명령에 의해 컴파일을 중단시키는 조건도 구비하는 것이다.
도 11(a)는 본 발명의 가상 계산기의 제6 실시 형태의 컴파일 실행 제어 수단의 구성을 나타낸다. 도 11(a)에서, 참조 부호 72는 컴파일 실행 제어 수단이다. 참조 부호 20은 처리 제한 수단이다. 참조 부호 21은 특정 명령 판정 수단이다. 참조 부호 22는 명령 수 카운트 수단으로서, 컴파일된 명령 수는 카운트하는 것이다. 참조 부호 25는 컴파일 완료 지시 수단이다.
도 11(a)의 구성에서, 명령 수 카운트 수단(22)은 컴파일한 명령 수를 카운트한다. 컴파일 완료 지시 수단(25)은 명령 카운트 수가 소정값에 달하였을 때에컴파일의 종료를 지시한다. 소정의 명령 수에 달하기까지의 동안에, 특정 명령이 발생하였을 때에는 그 명령이 발생한 시점에 컴파일을 종료한다.
도 11(b)는 본 발명의 제6 실시 형태의 컴파일 실행 제어 수단과 JIT 컴파일에 의한 컴파일의 흐름도이다. 컴파일의 처리(S1)에 있어서, 종료 조건에 해당하는 특정 명령을 검출하였는지를 판정한다(S2, S3). 특정 명령이 검출되면 처리를 종료한다(S6). 특정 명령이 검출되지 않으면, 컴파일한 명령 수를 판정한다(S4, S5). 소정의 컴파일 수에 달하고 있지 않으면, S1에서 컴파일을 계속하고, 소정의 명령 수에 달하면 컴파일을 종료한다(S6).
본 발명의 제6 실시 형태는 다음과 같은 특징을 갖는다. 반드시 실행하는 부분만을 컴파일하므로, 생성하는 네이티브 코드에 낭비가 없어, 메모리의 소비가 억제된다. 또한, 어플리케이션 프로그램의 응답성을 향상시킬 수 있다. 즉, 일반적으로 컴파일하고 있는 동안에는 어플리케이션 프로그램의 실행은 정지한다. 그러나, 본 발명에서는 컴파일은 실행에 필요한 부분만을 행하기 때문에, 컴파일을 위해 어플리케이션 프로그램을 정지하는 시간을 단축할 수 있다. 또한, 명령 수의 조건이라도 컴파일을 제한하고 있기 때문에, 메모리의 소비를 확실하게 억제할 수 있다.
도 12(a)는 본 발명의 가상 계산기의 제7 실시 형태의 컴파일 실행 제어 수단의 구성이다. 본 발명의 제7 실시 형태는 컴파일 시간의 단축을 행하는 예로서, 제5 실시 형태에서, 특정한 명령의 검출 외에, 생성한 네이티브 코드의 양으로 컴파일을 중단한다. 예를 들면, 컴파일이 128워드분만큼 네이티브 코드를 생성하면,컴파일을 중단한다. 또, 제7 실시 형태는 제5 실시 형태와 마찬가지로, 특정 명령의 검출에 의해 컴파일을 중단시키는 조건을 구비하고 있다.
도 12(a)에서, 참조 부호 72는 컴파일 실행 제어 수단이다. 참조 부호 20은 처리 제한 수단이다. 참조 부호 21은 특정 명령 판정 수단이다. 참조 부호 23은 워드 수 카운트 수단으로서, 컴파일된 워드수(컴파일된 기계어 워드 수)를 카운트하는 것이다. 참조 부호 25는 컴파일 완료 지시 수단이다.
도 12(a)의 구성에서, 워드 수 카운트 수단(23)은 워드 수를 카운트한다. 컴파일 완료 지시 수단(25)은 워드 수가 소정값에 도달하였을 때에 컴파일의 종료를 지시한다. 소정의 명령 수에 도달하기까지의 동안에, 컴파일을 종료하는 특정 명령이 발생하였을 때에는 그 명령이 발생한 시점에 컴파일을 종료한다.
도 12(b)는 본 발명의 제7 실시 형태의 컴파일 실행 제어 수단과 JIT 컴파일러에 의한 컴파일의 처리의 흐름도를 나타낸다. 컴파일의 처리(S1)에서, 종료 조건에 해당하는 특정 명령을 검출하였는지를 판정한다(S2, S3). 특정 명령이 검출되면 처리를 종료한다(S6). 특정 명령이 검출되지 않으면, 컴파일한 워드 수를 판정한다(S3, S4). 소정의 컴파일 수에 도달해 있지 않으면, S1에서 컴파일을 계속하고, 소정의 워드 수에 도달하면 컴파일을 종료한다(S6).
본 발명의 제7 실시 형태는 다음의 특징을 갖는다. 본 발명의 제6 실시 형태는 다음과 같은 특징을 갖는다. 반드시 실행하는 부분만을 컴파일하기 때문에, 생성하는 네이티브 코드에 낭비가 없어, 메모리의 소비가 억제된다. 또한, 어플리케이션 프로그램의 응답성을 향상시킬 수 있다. 즉, 일반적으로 컴파일하고 있는동안에는 어플리케이션 프로그램의 실행은 정지된다. 그러나, 본 발명에서 컴파일은 실행에 필요한 부분만을 행하기 때문에, 컴파일을 위해서 어플리케이션 프로그램을 정지하는 시간을 단축할 수 있다. 또한, 워드 수의 조건이라도 컴파일을 제한하고 있기 때문에, 메모리의 소비를 확실하게 억제할 수 있다.
본 발명의 제8 실시 형태에 대하여 설명한다. 본 발명의 제8 실시 형태는 컴파일 시간의 단축을 행하는 예로서, 특정한 명령의 검출 외에, 시간에 의해 컴파일을 중단한다. 예를 들면, 컴파일러가 컴파일의 처리에 100㎳ 소비하면, 컴파일을 중단한다. 또, 본 발명의 제8 실시 형태는 제4 실시 형태와 마찬가지로, 특정 명령의 검출에 의해 컴파일을 중단시키는 조건을 구비하는 것이다.
도 13(a)는 본 발명의 가상 계산기의 제8 실시 형태의 컴파일 실행 제어 수단의 구성을 나타낸다. 참조 부호 72는 컴파일 실행 제어 수단이다. 참조 부호 20은 처리 제한 수단이다. 참조 부호 21은 특정 명령 판정 수단이다. 참조 부호 24는 컴파일 시간 카운트 수단으로서, 컴파일을 개시하고 나서의 시간을 카운트하는 것이다. 참조 부호 25는 컴파일 완료 지시 수단이다.
도 13(a)의 구성에서, 컴파일 시간 카운트 수단(24)은 컴파일 시간을 카운트한다. 컴파일 완료 지시 수단(25)은 컴파일 시간이 소정값에 도달하였을 때에 컴파일의 종료를 지시한다. 소정의 컴파일 시간에 도달하기까지의 동안에, 컴파일을 종료하는 특정 명령이 발생하였을 때에는 그 명령이 검출된 시점에 컴파일을 종료한다.
도 13(b)는 제8 실시 형태의 컴파일 실행 제어 수단과 JIT 컴파일러에 의한컴파일의 흐름도를 나타낸다. 컴파일의 처리(S1)에서, 종료 조건에 해당하는 특정 명령을 검출하였는지를 판정한다(S2, S3). 특정 명령이 검출되면 처리를 종료한다(S6). 특정 명령이 검출되지 않으면, 컴파일 시간을 판정한다(S4, S5). 소정의 컴파일 시간에 도달해 있지 않으면 S1에서 컴파일을 계속하고, 소정의 컴파일 시간에 도달하면 컴파일을 종료한다(S6).
본 발명의 제8 실시 형태는 다음의 특징을 갖는다. 본 발명의 제6 실시 형태는 다음과 같은 특징을 갖는다. 반드시 실행하는 부분만을 컴파일하기 때문에, 생성하는 네이티브 코드에 낭비가 없어, 메모리의 소비가 억제된다. 또한, 어플리케이션 프로그램의 응답성을 향상시킬 수 있다. 즉, 일반적으로 컴파일하고 있는 동안에는 어플리케이션 프로그램의 실행은 정지된다. 그러나, 본 발명에서 컴파일은 실행에 필요한 부분만을 행하기 때문에, 컴파일을 위해서 어플리케이션 프로그램을 정지하는 시간을 단축할 수 있다. 또한, 컴파일 시간의 조건이라도 컴파일을 제한하고 있기 때문에, 메모리의 소비를 확실하게 억제할 수 있다.
본 발명의 제9 실시 형태를 설명한다. 본 발명의 제9 실시 형태는 코드 캐쉬의 치환을 행하는 것으로, 코드 캐쉬(네이티브 코드 영역(3))에 빈 부분이 없어졌을 때, 코드 캐쉬(네이티브 코드 영역(3))의 선두부터 순서대로 네이티브 코드를 파기하는 예이다. 이 치환은 FILO(First In Last Out) 방식으로 가장 오래 전에 컴파일한 코드부터 순서대로 파기하도록 해도 된다.
도 14는 본 발명의 가상 계산기의 제9 실시 형태의 검색 동작의 설명도이다. 도 14에서, 참조 부호 1은 비교기, 참조 부호 2는 검색 테이블, 참조 부호 3은 네이티브 코드 영역, 참조 부호 73은 JIT 컴파일러이다. JIT 컴파일러(73)에 있어서, 참조 부호 100은 컴파일 수단, 참조 부호 101은 캐쉬 블록 치환 수단이다.
제9 실시 형태는 초기값으로서, P1: 명령 생성 포인터는 코드 캐쉬의 선두, P2: 해방 포인터는 코드 캐쉬의 말미를 가리켜 둔다. 실행이 진행(컴파일이 몇 번이나 행해짐)됨에 따라, 코드 캐쉬(3)는 작은 블록으로 나뉘고, 블록의 선두에 태그(tag) 포인터(검색 테이블에의 포인터)와, 넥스트(next) 포인터(다음의 블록을 가리키는 포인터)가 저장된다.
블록의 남은 부분은 네이티브 코드를 저장하는 명령 영역이다. 넥스트(next) 포인터는 포인터일 필요는 없고, 블록의 절단 부분을 알 수 있으면 된다.
도 15는 본 발명의 제9 실시 형태의 흐름도로서, 코드 캐쉬 치환 처리의 흐름도이다. 또, S101∼S111은 각 처리 단계를 나타낸다.
이 처리는 컴파일의 처리가 한창일 때에 코드 캐쉬(3)의 치환 처리를 행하는 예이다. 우선, 생성하는 영역의 태그(tag) 포인터에 검색 테이블(2)에의 태그(tag) 포인터를 설정한다(S101). 설정하는 영역은 도 14의 P1(명령 생성 포인터)에 의해 지시된다. S102, S103, S104, S105가 컴파일 처리의 메인 루프로서, 바이트 코드로부터 네이티브 코드를 생성하는 처리이다.
다음으로, JIT 컴파일의 컴파일 처리에 의해, 바이트 코드로부터 네이티브 코드로의 변환을 행한다(S102). 변환 후의 네이티브 코드를 코드 캐쉬(3)에 저장하기 전에, 명령 생성 포인터와 해방 포인터의 값을 비교(명령 생성 포인터<해방포인터의 조건을 만족하고 있는지의 여부를 비교)함으로써(S103), 유효한 코드를 덮어쓰기하지 않는지 체크한다.
그 결과, 명령 생성 포인터가 해방 포인터보다 작으면, 모두 해방 완료된 영역이므로, 코드 캐쉬(3)에 네이티브 코드를 생성하여 기입한다(S104). 이 때, 명령 생성 포인터를 진행시킨다. 다음으로, 컴파일 완료 조건을 충족시켰는지의 여부를 판단한다(S105).
그 결과, 컴파일 완료 조건을 충족시키지 않으면, S102의 처리로 이행하여, 컴파일 처리를 계속한다. 또한, 컴파일 완료 조건을 충족시키면, 생성한 네이티브 코드를 1개의 블록으로 구성한다. 이 경우, 생성한 영역의 넥스트 포인터에, 명령 생성 포인터의 값을 설정한다(S106).
또한, S103의 처리에서, 상기 조건을 충족시키고 있지 않은 경우, 즉 명령 생성 포인터가 해방 포인터와 동일하거나, 또는 큰 경우, 유효 블록을 해방할 필요가 있다. 따라서, 해방 포인터가 코드 캐쉬의 마지막을 가리키고 있는지(해방 포인터<코드 캐쉬의 말미의 조건을 만족하고 있지 않은지)를 체크한다(S107).
그 결과, 해방 포인터가 코드 캐쉬의 마지막을 가리키고 있는 경우에는, 해방 포인터를 코드 캐쉬(3)의 선두에 설정하고(S108), 명령 생성 포인터를 코드 캐쉬(3)의 선두의 블록의 명령 영역에 설정한다(S109). 이 처리에 의해, 코드 캐쉬(3)의 선두로 되돌아가 블록의 해방을 행한다.
다음으로, 해방 포인터가 나타내는 태그(tag) 포인터로부터 검색 테이블(2)의 태그(tag)를 클리어한다(S11O). 그리고, 상기 S110의 처리에 의해, 검색 테이블의 태그(tag)가 무효화되어, 해방 포인터가 나타내는 블록이 실제로 해방된다. 다음으로, 해방 포인터를 다음의 포인터(next 포인터)로 설정하여(S111), S104의 처리로 이행한다. 이 처리로, 해방 포인터가 다음의 블록을 가리키게 된다.
S107에서 해방 포인터<코드 캐쉬의 말미의 조건을 만족하고 있는 경우에는 상기 S110의 처리에 의해, 해방 포인터가 나타내는 태그 포인터로부터 검색 테이블의 태그(tag)를 무효화하여, 해방 포인터가 나타내는 블록이 실제로 해방된다. 다음으로, 해방 포인터를 다음의 포인터(next 포인터)로 설정하여(S111), S104의 처리로 이행한다. 이 처리로, 해방 포인터가 다음의 블록을 가리키게 된다.
또, 상기한 흐름도에서, FILO(First In Last Out) 방식으로 가장 오래 전에 컴파일한 코드부터 순서대로 파기하는 경우에는, S108에서, 해방 포인터를 가장 오래된 블록의 선두에 설정한다.
본 발명의 제9 실시 형태는 다음의 특징을 갖는다. 코드 캐쉬부터 검색 테이블에의 포인터를 가짐으로써, 캐쉬 블록의 사이즈를 가변 길이로 할 수 있어, 메모리를 유효하게 활용할 수 있게 된다. 이 포인터가 없는 경우라도, 검색 테이블 전체를 조사하여 캐쉬를 무효화할 수 있지만, 검색 테이블 전체를 조사하는 것은 처리량이 많아, 컴파일에 시간을 낭비하지만, 본 발명의 제9 실시 형태에 따르면, 코드 캐쉬(네이티브 코드 영역)의 일부를 무효화할 수 있기 때문에, 코드 캐쉬의 무효화를 고속으로 행할 수 있다.
도 16은 본 발명의 가상 계산기의 제10 실시 형태의 코드 캐쉬의 치환 처리의 설명도이다. 도 16에서, 참조 부호 72는 컴파일 실행 제어 수단이다. 참조 부호 91은 카운터값 판정 수단이다. 참조 부호 73은 JIT 컴파일러이다. 참조 부호 92는 카운트 갱신 수단으로서, 바이트 코드(명령)를 인터프리터에 의해 실행하는 횟수, 및 그 컴파일된 네이티브 코드가 액세스되는 횟수를 카운트하고, 실행 카운터의 카운트값을 갱신하는 것이다. 참조 부호 100은 컴파일 수단이다. 참조 부호 102는 네이티브 영역 파기 수단이다. 참조 부호 78은 네이티브 코드 실행 수단이다.
본 발명의 제10 실시 형태에서, 코드 캐쉬(3)에 빈 부분이 없어졌을 때, 카운트값 판정 수단(91)은 검색 테이블(2)의 실행 카운터를 값이 작은 것을 스캔하여, 파기 수단(102)은 실행 카운터의 값의 작은 것부터 순서대로 파기한다. 실행 카운터는 컴파일 직후에는 적당한 큰 값을 설정해 두고, 실행할 때마다 실행한 코드에 대응하는 카운터를 증가하도록 하여, 파기할 때에, 전체의 카운터값을 감소시킨다.
도 17은 본 발명의 제10 실시 형태의 흐름도이다. 이하, 도 17에 기초하여 제10 실시 형태의 처리를 설명한다. 또, S121∼S136은 각 처리 단계를 나타낸다. 또한, S121∼S131의 처리는 도 6에 도시한 제2 실시 형태의 S61∼S75의 처리와 동일하다.
인터프리터의 처리에서는 컴파일이 종료하였는지를 판단하고(S121), 컴파일이 종료가 아니면, 테이블 등록 완료(도 5의 검색 테이블(2)의 tag에 등록되어 있는지의 여부)를 판단한다(Sl22). 그 결과, 테이블 등록 완료가 아니면, 태그(tag)에 어드레스 등록을 행하고(S123), 실행 카운터를 클리어한다(S124).
다음으로, 명령 페치를 행하고(S125), 디코드를 행하여(S126), 상기 처리와 마찬가지로 하여 명령을 실행한다(S127). 그리고, S121의 처리로 이행한다.
또한, 상기 S122의 처리에서 테이블 등록 종료라고 판단한 경우에는, 검색 테이블(2)의 실행 카운터를 UP(+1)하고(S129), 미리 정한 특정 횟수보다 큰 지를 판단한다(S130). 그 결과, 특정 횟수보다 작으면, S125로 이행하여 인터프리터로 실행하고, 특정 횟수 이상인 경우에는 JIT 컴파일러에 의해 바이트 코드를 컴파일하여 네이티브 코드를 생성하고(S131), 생성한 네이티브 코드를 코드 캐쉬(3)에 등록한다(S132).
또한, 이 때, 검색 테이블(2)의 실행 카운터를 설정한다. 다음으로, 상기 S132의 처리에서 등록한 네이티브 코드를 실행하고(S133), S121의 처리로 이행한다. 또한, S121의 처리에서, 컴파일 완료라고 판단한 경우에는 검색 테이블(2)의 실행 카운터를 UP(+1)하고(S128), S133의 처리로 이행한다.
한편, 상기 S131의 처리에서, 네이티브 코드를 생성한 경우, 코드 캐쉬(3)에 빈 부분이 있는지의 여부를 판단하고(S134), 빈 부분이 있으면, S131의 처리로 되돌아간다. 그러나, 코드 캐쉬(3)에 빈 부분이 없으면, 실행 카운터 전체를 스캔하여, 개개의 실행 카운터를 감소시킨다(S135). 그리고, 실행 횟수가 적은 엔트리를 파기하여, 코드 캐쉬(3)에 빈 부분을 작성하고(S136), S131의 처리로 되돌아간다.
본 발명의 제10 실시 형태는 다음의 특징을 갖는다. 빈번하게 실행되는 네이티브 코드가 파기되기 어려워진다. 그러나, 빈 영역이 단편화하여, 네이티브 코드 상에서 단편화한 개소에의 불필요한 분기 명령이 필요하게 된다.
본 발명의 제11 실시 형태를 설명한다. 본 발명의 제11 실시 형태는 코드 캐쉬(3)의 단편화된 빈 영역을 채우는 예로서, 본 발명의 제10 실시 형태에서, 코드 캐쉬(3)의 빈 영역의 단편화가 일어난다. 이 때에, 네이티브 코드의 덩어리를 이동(리로케이션)함으로써, 컴파일러가 한 번에 생성하는 코드를 하나로 통합한다.
도 18(a)는 본 발명의 가상 계산기의 제11 실시 형태의 동작 설명도이다. 참조 부호 3은 리로케이션 전의 네이티브 코드 영역이고, 참조 부호 3'는 리로케이션 후의 네이티브 코드 영역이다. 참조 부호 90은 리로케이션 수단이다. 리로케이션 수단(90)은 공백 영역 A, C를 검출하여, 공백 영역을 채우는 처리를 행한다. 도 18(b)은 제11 실시 형태의 리로케이션의 흐름도이다. 리로케이션 수단은 공백 부분을 리로케이션의 처리로 공백 부분을 검출하면, 그 공백 영역의 선두 어드레스를 공백 영역의 다음의 네이티브 코드의 저장되어 있는 덩어리 영역의 선두 어드레스로 치환한다(S2). 또한, 그 네이티브 코드 영역의 덩어리의 최종 어드레스를 이동 후의 최종 어드레스로 치환한다(S3).
본 발명의 제11 실시 형태는 다음의 특징을 갖는다. 단편화에 의해 분단된 명령의 사이에 불필요한 분기 명령을 삽입할 필요가 없어진다. 실행하는 명령 열이 코드 캐쉬 상에 분단되지 않고, 하나로 되기 때문에, 명령 캐쉬가 효율적으로 사용되어, 성능이 향상된다.
도 19(a), (b)는 본 발명의 각 실시 형태에서, 검색 테이블의 히트율의 향상을 도모하기 위한 설명도이다.
본 발명의 검색 테이블의 태그는, 네이티브 코드 영역의 명령마다 태그를 생성하는 경우와, 컴파일의 시퀀스 단위로 태그를 생성하는 경우의, 어느 경우에도 적용할 수 있는 것이다. 도 19(a)는 명령마다 태그를 생성하는 경우를 나타낸다. 도 19(b)는 컴파일의 시퀀스마다 태그를 생성하는 경우를 나타낸다.
도 19(a)와 같이 컴파일한 모든 바이트 코드 명령의 어드레스를 검색 테이블에 등록하면, 검색 테이블의 엔트리 수에는 제한이 있기 때문에, 검색 테이블(2)을 덮어쓰기하는 기회가 증가한다. 그 때문에, 컴파일 완료임에도 불구하고, 검색 테이블로부터 삭제되는 네이티브 코드가 증가하여, 검색 실패할 비율이 커져, 불필요한 컴파일을 행하는 경우가 있다. 컴파일한 명령 시퀀스의 선두만을 등록하면, 이러한 폐해를 방지할 수 있다.
도 20은 본 발명의 가상 계산기를 구비한 휴대 전화기의 구성을 나타낸다. 본 발명의 가상 계산기는 메모리 용량에 작은 휴대 무선 통신 기기에 이용할 수 있는 것이다. 도 20은 휴대 무선 통신 기기의 예로서 휴대 전화기에 응용한 것을 도시한다. 본 발명에 직접 관련된 부분 이외의 구성은 도시를 생략하고 있다.
도 20에서, 참조 부호 C는 휴대 전화기이다. 참조 부호 62는 입력부로서, 서버(51)로부터 송신되는 바이트 코드를 입력하는 것이다. 참조 부호 63은 메모리의 바이트 코드 보유 영역으로서, 입력된 바이트 코드를 보유하는 것이다. 참조 부호 64, 65는 바이트 코드에 컴파일된 메소드이다. 참조 부호 66은 가상 계산기이다. 참조 부호 71은 인터프리터이다. 참조 부호 72는 컴파일 실행 제어 수단이다. 참조 부호 73은 JIT 컴파일러이다. 참조 부호 3은 네이티브 코드 영역으로서, 네이티브 코드를 보유하는 메모리의 영역이다. 참조 부호 80은 CPU이다. 참조 부호 81은 연산 결과를 보유하는 메모리의 연산 결과 보유 영역이다. 참조 부호 82는 출력부로서, 연산 처리된 결과를 출력하는 것이다. 참조 부호 74는 검색 테이블 생성 수단으로서, 검색 테이블(75)을 생성하는 것이다. 참조 부호 76은 검색 테이블 검색 수단으로서, 검색 테이블을 검색하여, 바이트 코드가 컴파일되어 네이티브 코드 영역에 보유되어 있는지를 판정하는 것이다. 참조 부호 78은 네이티브 코드 실행 수단이다.
도 20의 가상 계산기의 구성의 동작은 도 1의 가상 계산기와 마찬가지이므로 설명은 생략한다.
본 발명은, 바이트 코드의 어드레스로부터 컴파일되어 있는지의 여부를 판단하기 위한 정보와, 컴파일된 네이티브 코드의 어드레스를 검색하는 검색 테이블을 구비하고 있다. 그 때문에, 검색 테이블을 검색함으로써 컴파일되어 있는지의 여부를 판단하거나, 컴파일되어 있는 경우에, 해당하는 네이티브 코드의 저장 어드레스를 검색하는 것이 용이하게 된다. 그 결과, 바이트 코드를 네이티브 코드로 컴파일함으로써, 어플리케이션 프로그램의 실행 시간을 빨리 할 수 있게 된다. 또한, 종래의 JIT 컴파일러가 네이티브 코드를 생성하여 저장하기 위해서 사용하는 메모리가 제한되어, 적은 메모리라도 처리를 고속화할 수 있다.
그 때문에, 본 발명은 가상 계산기는 휴대 전화기, PDA 등의 메모리가 적은 휴대형 무선 통신 기기에 적용할 수 있어, 그와 같은 기기를 고속으로 동작시키는 것을 가능하게 한다.

Claims (22)

  1. 바이트 코드를 보유하는 바이트 코드 보유 영역과, 바이트 코드를 순차적으로 해석하여 실행하는 수단과, 상기 바이트 코드를 가상 계산기가 직접 실행 가능한 네이티브 코드로 컴파일하는 컴파일러와, 해당 네이티브 코드를 보유하는 네이티브 코드 보유 영역을 구비한 메모리 상의 가상 계산기로서,
    상기 바이트 코드의 어드레스로부터 생성된 태그 정보와, 해당 바이트 코드가 컴파일된 네이티브 코드의 네이티브 코드 영역에서의 어드레스를 보유하는 검색 테이블을 구비하는 것을 특징으로 하는 가상 계산기.
  2. 제1항에 있어서,
    상기 검색 테이블 상, 또는 상기 네이티브 코드 영역에, 명령의 실행 횟수를 계수하기 위한 실행 카운터를 설치하고,
    바이트 코드를 실행할 때에, 상기 실행 카운터의 값을 조사하여, 미리 정한 특정 횟수보다 작은 경우에는 바이트 코드를 순차적으로 해석하여 실행하는 수단인 인터프리터로 실행하고,
    상기 특정 횟수 이상인 경우에는 해당 컴파일러에 의해 바이트 코드를 컴파일하고 나서 실행하는 컴파일 실행 제어 수단을 구비하는 것을 특징으로 하는 가상 계산기.
  3. 제1항에 있어서,
    상기 검색 테이블에, 첫번째의 실행 시에 바이트 코드의 어드레스만 등록하고, 네이티브 코드의 어드레스의 등록은 특별한 값, 또는 숫자 0을 등록해 두는 검색 테이블 정보 등록 수단과,
    첫번째는 인터프리터로 실행하고, 두번째는 상기 바이트 코드를 가상 계산기가 직접 실행 가능한 네이티브 코드로 컴파일하는 컴파일러인 JIT 컴파일러에 의해 컴파일하여 실행하는 실행 제어 수단을 구비하는 것을 특징으로 하는 컴파일러를 구비한 가상 계산기.
  4. 제1항에 있어서,
    컴파일 시간을 단축하기 위해서, 컴파일하는 범위를 제한하여, 처리의 도중이라도, 바이트 코드의 특정한 명령을 검출하면, 거기까지를 컴파일하여 처리를 중단하는 명령을 생성하고, 나머지는 컴파일하지 않도록 처리를 제한하는 컴파일 실행 제어 수단을 구비하는 것을 특징으로 하는 가상 계산기.
  5. 제1항에 있어서,
    상기 코드 캐쉬에 빈 부분이 없어졌을 때, 코드 캐쉬의 선두부터 순서대로 네이티브 코드를 파기하는 제1 파기 수단을 구비하는 것을 특징으로 하는 가상 계산기.
  6. 제1항에 있어서,
    상기 코드 캐쉬에 빈 부분이 없어졌을 때, FILO 방식으로 가장 오래 전에 컴파일한 코드부터 순서대로 파기하는 제2 파기 수단을 구비하는 것을 특징으로 하는 가상 계산기.
  7. 제1항에 있어서,
    상기 검색 테이블은 컴파일되어 있는지를 판단할뿐인 정보를 갖고, 네이티브 코드의 어드레스는 바이트 코드의 어드레스로부터 계산하여 구하는 연산 수단을 구비하는 것을 특징으로 하는 가상 계산기.
  8. 제4항에 있어서,
    컴파일 실행 제어 수단은 특정한 명령의 검출 외에, 바이트 코드의 양으로 컴파일을 중단하는 것을 특징으로 하는 가상 계산기.
  9. 제4항에 있어서,
    컴파일 실행 제어 수단은 특정한 명령의 검출 외에, 생성한 네이티브 코드의 양으로 컴파일을 중단하는 것을 특징으로 하는 가상 계산기.
  10. 제4항에 있어서,
    컴파일 실행 제어 수단은 특정한 명령의 검출 외에, 시간에 의해 컴파일을중단하는 것을 특징으로 하는 가상 계산기.
  11. 바이트 코드를 보유하는 바이트 코드 보유 영역과, 바이트 코드를 순차적으로 해석하여 실행하는 수단과, 상기 바이트 코드를 가상 계산기가 직접 실행 가능한 네이티브 코드로 컴파일하는 컴파일러와, 그 네이티브 코드를 보유하는 네이티브 코드 보유 영역을 구비한 메모리 상의 가상 계산기의 동작 방법으로서,
    검색 테이블에 바이트 코드의 어드레스로부터 생성된 태그 정보와, 그 바이트 코드가 컴파일된 네이티브 코드의 네이티브 코드 영역에서의 어드레스를 보유하고, 검색 테이블을 검색함으로써 바이트 코드의 컴파일의 필요 여부를 판정하는 것을 특징으로 하는 가상 계산기의 동작 방법.
  12. 제11항에 있어서,
    상기 검색 테이블 상, 또는 상기 네이티브 코드 영역에, 명령의 실행 횟수를 계수하기 위한 실행 카운터를 설치하고, 바이트 코드를 실행할 때에, 상기 실행 카운터의 값을 조사하여, 미리 정한 특정 횟수보다 작은 경우에는 바이트 코드를 순차적으로 해석하여 실행하는 수단인 인터프리터로 실행하고, 상기 특정 횟수 이상인 경우에는 그 컴파일러에 의해 바이트 코드를 컴파일하고 나서 실행하는 것을 특징으로 하는 가상 계산기의 동작 방법.
  13. 제11항에 있어서,
    컴파일 시간을 단축하기 위해서 컴파일하는 범위를 제한하여, 처리의 도중이라도, 바이트 코드의 특정한 명령을 검출하면, 거기까지를 컴파일하여 처리를 중단하는 명령을 생성하고, 나머지는 컴파일하지 않도록 처리를 제한하는 것을 특징으로 하는 가상 계산기의 동작 방법.
  14. 제11항에 있어서,
    상기 코드 캐쉬에 빈 부분이 없어졌을 때, 코드 캐쉬의 선두부터 순서대로 네이티브 코드를 파기하는 것을 특징으로 하는 가상 계산기의 동작 방법.
  15. 제11항에 있어서,
    상기 코드 캐쉬에 빈 부분이 없어졌을 때, FILO 방식으로 가장 오래 전에 컴파일한 코드부터 순서대로 파기하는 것을 특징으로 하는 가상 계산기의 동작 방법.
  16. 제11항에 있어서,
    상기 검색 테이블은 컴파일되어 있는지를 판단할뿐인 정보를 갖고, 네이티브 코드의 어드레스는 바이트 코드의 어드레스로부터 계산하여 구하는 것을 특징으로 하는 가상 계산기의 동작 방법.
  17. 제13항에 있어서,
    특정한 명령의 검출 외에, 바이트 코드의 양으로 컴파일을 중단하는 것을 특징으로 하는 가상 계산기의 동작 방법.
  18. 제13항에 있어서,
    특정한 명령의 검출 외에, 생성한 네이티브 코드의 양으로 컴파일을 중단하는 것을 특징으로 하는 가상 계산기의 동작 방법.
  19. 제13항에 있어서,
    특정한 명령의 검출 외에, 시간에 의해 컴파일을 중단하는 것을 특징으로 하는 가상 계산기의 동작 방법.
  20. 바이트 코드를 보유하는 바이트 코드 보유 영역과, 바이트 코드를 순차적으로 해석하여 실행하는 수단과, 상기 바이트 코드를 가상 계산기가 직접 실행 가능한 네이티브 코드로 컴파일하는 컴파일러와, 그 네이티브 코드를 보유하는 네이티브 코드 보유 영역을 갖는 메모리 상의 가상 계산기를 구비한 단말 장치로서,
    상기 바이트 코드의 어드레스로부터 생성된 태그 정보와, 그 바이트 코드가 컴파일된 네이티브 코드의 네이티브 코드 영역에서의 어드레스를 보유하는 검색 테이블을 구비하고 있는 것을 특징으로 하는 단말 장치.
  21. 제20항에 있어서,
    단말 장치는 휴대 단말 장치인 것을 특징으로 하는 단말 장치.
  22. 제20항에 있어서,
    단말 장치는 휴대 무선 통신 기기인 것을 특징으로 하는 단말 장치.
KR10-2004-7006877A 2001-11-07 2002-11-07 Jit 컴파일러를 구비한 가상 계산기, 그 동작 방법 및그 가상 계산기를 구비한 단말 장치 KR20040063923A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JPJP-P-2001-00341577 2001-11-07
JP2001341577A JP3808755B2 (ja) 2001-11-07 2001-11-07 Jitコンパイラを備えた仮想計算機
PCT/JP2002/011599 WO2003040918A1 (fr) 2001-11-07 2002-11-07 Ordinateur virtuel equipe d'un compilateur jit, procede de fonctionnement correspondant, et dispositif terminal comprenant cet ordinateur virtuel

Publications (1)

Publication Number Publication Date
KR20040063923A true KR20040063923A (ko) 2004-07-14

Family

ID=19155584

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2004-7006877A KR20040063923A (ko) 2001-11-07 2002-11-07 Jit 컴파일러를 구비한 가상 계산기, 그 동작 방법 및그 가상 계산기를 구비한 단말 장치

Country Status (6)

Country Link
US (1) US20040210865A1 (ko)
EP (1) EP1445695A4 (ko)
JP (1) JP3808755B2 (ko)
KR (1) KR20040063923A (ko)
CN (1) CN100354826C (ko)
WO (1) WO2003040918A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101407628B1 (ko) * 2007-06-04 2014-06-13 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 작업 수행 속도를 향상시키는 장치 및 방법

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040044988A1 (en) * 2002-08-29 2004-03-04 Schene Christopher Robin Generation of compiled code for simulator speed up
JP4701611B2 (ja) * 2004-01-15 2011-06-15 株式会社日立製作所 動的変換方式のエミュレータ向けメモリ管理方法
US7412693B2 (en) * 2004-03-05 2008-08-12 Sun Microsystems, Inc. Method and apparatus for determining frequency of execution for compiled methods within a virtual machine
GB0410151D0 (en) * 2004-05-07 2004-06-09 Zeus Technology Ltd Load balancing & traffic management
JP4846226B2 (ja) * 2004-10-26 2011-12-28 株式会社日立ソリューションズ 情報処理装置、情報処理方法、およびプログラム
DE102004056006B3 (de) * 2004-11-19 2006-03-23 Fujitsu Siemens Computers Gmbh Verfahren zur Emulation eines für einen Ursprungsprozessor in einem Ursprungscode erstellten Programms auf einem Zielprozessor
US7707547B2 (en) * 2005-03-11 2010-04-27 Aptana, Inc. System and method for creating target byte code
US7844958B2 (en) * 2005-03-11 2010-11-30 Aptana, Inc. System and method for creating target byte code
DE102005015746A1 (de) * 2005-04-06 2006-10-12 Man Roland Druckmaschinen Ag Druckmaschinensimulator
KR100763199B1 (ko) * 2006-02-20 2007-10-04 삼성전자주식회사 가상 머신 환경에서의 메소드 호출 방법 및 상기 방법을수행하는 가상 머신이 탑재된 시스템
US7784041B2 (en) * 2006-03-30 2010-08-24 Oracle America, Inc. Mechanism for reducing detectable pauses in dynamic output caused by dynamic compilation
US7963839B2 (en) * 2006-09-19 2011-06-21 Mudalla Technology, Inc. Regulated gaming exchange
US8037460B2 (en) * 2007-01-26 2011-10-11 Oracle International Corporation Code persistence and dependency management for dynamic compilation in a database management system
US8413125B2 (en) * 2007-01-26 2013-04-02 Oracle International Corporation Asynchronous dynamic compilation based on multi-session profiling to produce shared native code
US8341609B2 (en) * 2007-01-26 2012-12-25 Oracle International Corporation Code generation in the presence of paged memory
KR101407629B1 (ko) 2007-06-04 2014-06-13 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 자바 변환 가속 장치 및 방법
US8914774B1 (en) 2007-11-15 2014-12-16 Appcelerator, Inc. System and method for tagging code to determine where the code runs
US8954989B1 (en) 2007-11-19 2015-02-10 Appcelerator, Inc. Flexible, event-driven JavaScript server architecture
US8260845B1 (en) 2007-11-21 2012-09-04 Appcelerator, Inc. System and method for auto-generating JavaScript proxies and meta-proxies
US8566807B1 (en) 2007-11-23 2013-10-22 Appcelerator, Inc. System and method for accessibility of document object model and JavaScript by other platforms
US8719451B1 (en) 2007-11-23 2014-05-06 Appcelerator, Inc. System and method for on-the-fly, post-processing document object model manipulation
US8806431B1 (en) 2007-12-03 2014-08-12 Appecelerator, Inc. Aspect oriented programming
US8819539B1 (en) 2007-12-03 2014-08-26 Appcelerator, Inc. On-the-fly rewriting of uniform resource locators in a web-page
US8756579B1 (en) 2007-12-03 2014-06-17 Appcelerator, Inc. Client-side and server-side unified validation
US8938491B1 (en) 2007-12-04 2015-01-20 Appcelerator, Inc. System and method for secure binding of client calls and server functions
US8527860B1 (en) 2007-12-04 2013-09-03 Appcelerator, Inc. System and method for exposing the dynamic web server-side
US8285813B1 (en) 2007-12-05 2012-10-09 Appcelerator, Inc. System and method for emulating different user agents on a server
US8639743B1 (en) 2007-12-05 2014-01-28 Appcelerator, Inc. System and method for on-the-fly rewriting of JavaScript
US8335982B1 (en) 2007-12-05 2012-12-18 Appcelerator, Inc. System and method for binding a document object model through JavaScript callbacks
US8516459B2 (en) * 2008-03-25 2013-08-20 Intel Corporation XSLT-specific XJIT compiler
US8490077B2 (en) * 2008-05-15 2013-07-16 Microsoft Corporation Runtime versioning and distribution of dynamic web-elements
US8291079B1 (en) 2008-06-04 2012-10-16 Appcelerator, Inc. System and method for developing, deploying, managing and monitoring a web application in a single environment
US8880678B1 (en) 2008-06-05 2014-11-04 Appcelerator, Inc. System and method for managing and monitoring a web application using multiple cloud providers
US8425290B2 (en) * 2008-08-05 2013-04-23 Wms Gaming, Inc. Mash-up wagering game creation
US7596620B1 (en) 2008-11-04 2009-09-29 Aptana, Inc. System and method for developing, deploying, managing and monitoring a web application in a single environment
US9250938B2 (en) * 2008-10-15 2016-02-02 Microsoft Technology Licensing, Llc Caching runtime generated code
JP2010140233A (ja) * 2008-12-11 2010-06-24 Nec Computertechno Ltd エミュレーションシステム及びエミュレーション方法
KR100930831B1 (ko) * 2009-03-24 2009-12-10 주식회사 에이디칩스 바이트코드 변환 가속 장치 및 그 방법
US8938728B2 (en) 2010-04-05 2015-01-20 International Business Machines Corporation Dynamic compiler program, dynamic compiling method and dynamic compiling device
JP5460430B2 (ja) 2010-04-05 2014-04-02 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置
CN101957770B (zh) 2010-10-09 2015-09-02 中兴通讯股份有限公司 一种移动设备上应用程序的启动方法及装置
JP5505522B2 (ja) 2011-02-01 2014-05-28 富士通株式会社 プログラム実行方法
JP2013061810A (ja) * 2011-09-13 2013-04-04 Fujitsu Ltd 情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラム
CN103092618A (zh) * 2013-01-15 2013-05-08 东南大学 基于软件Cache的Dalvik虚拟机JIT加速方法
US9003382B2 (en) * 2013-02-18 2015-04-07 Red Hat, Inc. Efficient just-in-time compilation
US9239712B2 (en) * 2013-03-29 2016-01-19 Intel Corporation Software pipelining at runtime
CN103984531B (zh) * 2014-05-30 2016-09-28 龙芯中科技术有限公司 超长分支跳转处理方法及装置
JP6287650B2 (ja) * 2014-07-10 2018-03-07 富士通株式会社 シミュレーション方法、シミュレーションプログラム
US9696973B1 (en) * 2016-02-24 2017-07-04 Semmle Limited Compilation cache with imports scanner
US9934051B1 (en) * 2017-04-17 2018-04-03 Futurewei Technologies, Inc. Adaptive code generation with a cost model for JIT compiled execution in a database system
US10783082B2 (en) * 2019-08-30 2020-09-22 Alibaba Group Holding Limited Deploying a smart contract
US10802854B2 (en) * 2019-08-30 2020-10-13 Alibaba Group Holding Limited Method and apparatus for interpreting bytecode instruction stream
WO2021056389A1 (en) 2019-09-27 2021-04-01 Intel Corporation Methods and apparatus to process machine learning model in web-browser environment
CN112925523A (zh) * 2021-03-02 2021-06-08 京东数字科技控股股份有限公司 对象比较方法、装置、设备及计算机可读介质
US11972240B2 (en) * 2021-12-03 2024-04-30 Samsung Electronics Co., Ltd. Systems and methods for automapping source code to machine code

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5560013A (en) * 1994-12-06 1996-09-24 International Business Machines Corporation Method of using a target processor to execute programs of a source architecture that uses multiple address spaces
US6226789B1 (en) * 1996-01-29 2001-05-01 Compaq Computer Corporation Method and apparatus for data flow analysis
US5768593A (en) * 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
JPH09282174A (ja) * 1996-04-10 1997-10-31 Hitachi Ltd プログラム実行方法
JPH1097431A (ja) * 1996-07-31 1998-04-14 Fujitsu Ltd シミュレーション装置及びシミュレーション方法並びにコンピュータ読取可能な記録媒体
JP3632344B2 (ja) * 1997-01-06 2005-03-23 日産自動車株式会社 半導体装置
US5933635A (en) * 1997-10-06 1999-08-03 Sun Microsystems, Inc. Method and apparatus for dynamically deoptimizing compiled activations
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs
US6170083B1 (en) * 1997-11-12 2001-01-02 Intel Corporation Method for performing dynamic optimization of computer code
US6760907B2 (en) * 1998-06-30 2004-07-06 Sun Microsystems, Inc. Code generation for a bytecode compiler
US6324687B1 (en) * 1998-12-03 2001-11-27 International Business Machines Corporation Method and apparatus to selectively control processing of a method in a java virtual machine
JP2000215181A (ja) * 1999-01-21 2000-08-04 Fujitsu Ltd ネットワ―クコンピュ―タシステム及び代理コンパイルサ―バ装置
JP3470948B2 (ja) * 1999-01-28 2003-11-25 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
US6295642B1 (en) * 1999-04-29 2001-09-25 International Business Machines Corporation Method and apparatus for partial just in time compiling in a data processing system
GB9921720D0 (en) * 1999-09-14 1999-11-17 Tao Group Ltd Loading object-oriented computer programs
US6880152B1 (en) * 1999-10-13 2005-04-12 Transmeta Corporation Method of determining a mode of code generation
US7290254B2 (en) * 2003-03-25 2007-10-30 Intel Corporation Combining compilation and instruction set translation
US7257657B2 (en) * 2003-11-06 2007-08-14 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses for specific types of instructions

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101407628B1 (ko) * 2007-06-04 2014-06-13 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 작업 수행 속도를 향상시키는 장치 및 방법
US9235397B2 (en) 2007-06-04 2016-01-12 Samsung Electronics Co., Ltd. Method and apparatus for increasing task-execution speed

Also Published As

Publication number Publication date
WO2003040918A1 (fr) 2003-05-15
EP1445695A4 (en) 2005-05-04
CN100354826C (zh) 2007-12-12
CN1613058A (zh) 2005-05-04
JP2003140909A (ja) 2003-05-16
EP1445695A1 (en) 2004-08-11
JP3808755B2 (ja) 2006-08-16
US20040210865A1 (en) 2004-10-21

Similar Documents

Publication Publication Date Title
KR20040063923A (ko) Jit 컴파일러를 구비한 가상 계산기, 그 동작 방법 및그 가상 계산기를 구비한 단말 장치
US6446254B1 (en) Packaging memory image files
Gal et al. HotpathVM: An effective JIT compiler for resource-constrained devices
US8843944B2 (en) Accelerated class check
US7895569B2 (en) System and method for implementing software breakpoints in an interpreter
US7823140B2 (en) Java bytecode translation method and Java interpreter performing the same
US7290254B2 (en) Combining compilation and instruction set translation
KR20010087360A (ko) 플랫폼-독립형 가상기계의 기호표 탐색 최적화
US20040244009A1 (en) Inline database for receiver types in object-oriented systems
US6931638B2 (en) Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine
US6553426B2 (en) Method apparatus for implementing multiple return sites
US7318062B2 (en) Storing method metadata in code
JP3973129B2 (ja) キャッシュメモリ装置及びそれを用いた中央演算処理装置
US6804681B2 (en) Identifying and tracking object references in a java programming environment
CN112214266A (zh) 欺骗调用链安卓脱壳方法、装置、存储介质及计算机设备
JP4864287B2 (ja) 識別方法、記録媒体及びコンピュータシステム
CN109426546B (zh) 应用启动方法及装置、计算机存储介质及设备
JP2006164294A (ja) Jitコンパイラを備えた仮想計算機
US7065747B2 (en) Identifying references to objects during bytecode verification
US7028292B1 (en) Program executing apparatus, control method therefor, and storage medium for interpreting and executing intermediate codes
US9342319B1 (en) Accelerated class check
JP2006202317A (ja) Jitコンパイラを備えた仮想計算機
JP2006134351A (ja) Jitコンパイラを備えた仮想計算機
CA2557688C (en) System and method for implementing software breakpoints in an interpreter
JP2005063165A (ja) 仮想計算機の高速エミュレータ

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application