KR20060110971A - 자바 가상 머신의 명령어 수행 방법 및 그 장치 - Google Patents

자바 가상 머신의 명령어 수행 방법 및 그 장치 Download PDF

Info

Publication number
KR20060110971A
KR20060110971A KR1020050033235A KR20050033235A KR20060110971A KR 20060110971 A KR20060110971 A KR 20060110971A KR 1020050033235 A KR1020050033235 A KR 1020050033235A KR 20050033235 A KR20050033235 A KR 20050033235A KR 20060110971 A KR20060110971 A KR 20060110971A
Authority
KR
South Korea
Prior art keywords
code
bytecode
operand
virtual machine
java virtual
Prior art date
Application number
KR1020050033235A
Other languages
English (en)
Other versions
KR100763177B1 (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 KR1020050033235A priority Critical patent/KR100763177B1/ko
Priority to JP2006106637A priority patent/JP2006302272A/ja
Priority to CNB2006100724102A priority patent/CN100573454C/zh
Priority to US11/401,403 priority patent/US7725879B2/en
Publication of KR20060110971A publication Critical patent/KR20060110971A/ko
Application granted granted Critical
Publication of KR100763177B1 publication Critical patent/KR100763177B1/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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code

Landscapes

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

Abstract

자바 가상 머신의 명령어 수행 방법 및 이를 위한 장치를 제공한다.
본 발명의 실시예에 따른 자바 가상 머신의 명령어 수행 방법은, (a) 자바 클래스를 구성하는 메소드의 바이트코드(bytecode)를 추출하는 단계, (b) 추출된 바이트코드를, 바이트코드 내의 연산코드(opcode)에 대응되는 동작을 수행하는 연산코드 핸들러의 위치에 대한 정보를 포함하고 16비트 확장 메모리 요소(16-bit wide memory element)를 사용하는 제 2 코드로 변환하는 단계, 및 (c) 제 2 코드를 해석하여 실행하는 단계를 포함한다.
자바 가상 머신, 바이트코드

Description

자바 가상 머신의 명령어 수행 방법 및 그 장치{Method for executing Java virtual machine instructions, and apparatus for the same}
도 1은 종래의 자바 클래스 파일의 일반적인 구성을 나타내는 예시도이다.
도 2는 종래의 자바 가상 머신에서 실행되는 바이트코드(bytecode)를 나타내는 예시도이다.
도 3은 종래의 자바 인터프리터에서 각각의 바이트코드를 수행하는 동작을 나타내는 일실시예의 흐름도이다.
도 4는 본 발명의 실시예에 따른 자바 가상 머신의 구성을 보여주는 블록도이다.
도 5는 본 발명의 실시예에 따른 자바 가상 머신의 명령어 수행 과정을 보여주는 흐름도이다.
도 6은 본 발명의 실시예에 따른 자바 가상 머신의 명령어 수행 과정 중 바이트코드를 제 2 코드로 변환하는 단계의 상세 과정을 보여주는 흐름도이다.
도 7은 바이트코드를 제 2 코드로 변환하는 제 1 실시예를 보여주는 도면이다.
도 8은 바이트코드를 제 2 코드로 변환하는 제 2 실시예를 보여주는 도면이다.
도 9는 바이트코드를 제 2 코드로 변환하는 제 3 실시예를 보여주는 도면이다.
도 10은 본 발명의 실시예에 따른 연산코드 핸들러 오프셋-연산코드 테이블의 자료구조를 보여주는 도면이다.
<도면의 주요 부분에 관한 부호의 설명>
400 : 자바 가상 머신 410 : 클래스
420 : 바이트코드 추출부 430 : 제 2 코드 변환부
440 : 명령어 실행부
본 발명은 자바 가상 머신(Java Virtual Machine)의 명령어 수행 방법 및 그 장치에 관한 것으로서, 더욱 상세하게는 자바 가상 머신에서 실행되는 바이트코드를 16비트 메모리 요소(16-bit memory element)를 사용하는 제 2 코드로 변환함으로써 더 빠른 명령어의 실행 속도를 제공하는 자바 가상 머신의 명령어 수행 방법 및 그 장치에 관한 것이다.
자바 프로그래밍 언어(Java programming language)는 1990년 대 중반에 발표된 이후 급속히 전파되어 왔으나, C나 C++와 같은 언어로 작성된 코드에 비하여 속도가 느리다는 단점이 있다. 이러한 단점을 극복하기 위하여 기존의 인터프리터(interpreter) 방식의 자바 가상 머신(Java Virtual Machine)에 JIT(Just in time) 컴파일러(compiler)와 같은 동적 코드 생성 기법 또는 AOT(Ahead of time) 컴파일러(compiler)와 같은 정적인 코드 생성 기법이 고안되었다.
자바 플랫폼은 주로 자바 가상 머신과 클래스(class)들로 구성된다. 클래스 파일들은 클래스의 자료구조에 관한 정보와 필드와 메소드 정보등으로 구성되는데, 그 중에 메소드의 실행 코드는 하드웨어 또는 운영체제(Operating System)에 독립적인 바이트코드(bytecode)로 되어있다.
종래의 자바 가상 머신을 실행 엔진을 기준으로 분류하면 인터프리팅(interpreting) 방식의 자바 가상 머신과 Just-In-Time(JIT) 컴파일 방식의 자바 가상 머신, 인터프리팅과 JIT 컴파일을 모두 사용하는 방식의 자바 가상 머신, 또는 Ahead-of-Time(AOT)컴파일 방식의 자바 가상 머신 등으로 분류 할 수 있다.
인터프리팅(interpreting) 방식의 자바 가상 머신은 수행해야 할 메소드(method)의 바이트코드(bytecode)를 하나씩 해석하여 어플리케이션을 수행하고, JIT 컴파일러는 상기 바이트코드(bytecode)를 컴파일하여 현재의 자바 플랫폼에 종속적인 기계어 코드를 얻은 후 상기 기계어 코드를 실행함으로써 어플리케이션을 실행한다.
도 1은 종래의 자바 클래스 파일의 일반적인 구성을 나타내는 예시도이다.
클래스 파일은 클래스나 인터페이스의 정의를 포함하는데, 클래스에 정의된 여러가지 속성, 필드 정보, 메소드 정보 등으로 구성되어 있다. 메소드 정보 중에는 인터프리터에서 실행할 바이트코드(bytecode)라고 불리는 바이트 스트림이 정의되어 있다. 상기 바이트코드(bytecode)는 자바 원시 언어 문장을 포함하고 있는 파 일(예컨대, 확장자가 'java' 인 파일)을 컴파일하여 그 결과물로 얻게된 것이다.
상기 바이트코드(bytecode)는 한번에 1바이트씩 컴퓨터 내에서 실행된다는 측면에서는 실행할 준비가 된 프로그램 모듈과 비슷하지만, 상기 바이트코드(bytecode) 명령어들은 논리적이고 추상적인 자바 가상 머신에 보내는 실제 명령어들이다. 상기 바이트코드(bytecode)는 한번에 1바이트씩 번역되는 형식 외에도, 특정한 시스템 플랫폼에 맞도록 JIT 컴파일러에 의해 다시 컴파일될 수도 있는데, 이렇게 하게 되면 자바 프로그램의 실행이 더욱 빨라진다.
도 2는 종래의 자바 가상 머신에서 실행되는 바이트코드(bytecode)를 나타내는 예시도이다.
바이트코드(bytecode) 명령어는 수행 동작을 구별하기 위한 바이트 크기의 연산코드(opcode)와 피연산자(operand)로 구성된다. 하나의 연산코드(opcode)는 여러 개의 피연산자(operand)를 가질 수 있다. 연산코드(opcode)와 피연산자(operand) 모두 바이트(byte) 단위로 저장되므로, 한 바이트 이상의 크기를 갖는 피연산자(operand)를 표현하기 위하여 연속된 바이트로서 표현된다. 예를 들어, 16비트 값은 2개의 연속된 바이트들로, 32비트 값은 4개의 연속된 바이트들로 이루어진다.
상기 도 3에서 첫번째 줄은 실제 바이트코드(bytecode)의 16진수 값이고 두번째 줄은 각각의 바이트코드(bytecode)를 연산코드(opcode)와 피연산자(operand)로 구분하여 나타낸 것이다.
도 3은 종래의 자바 인터프리터에서 각각의 명령코드를 수행하는 동작을 나 타내는 일실시예의 흐름도이다.
어플리케이션 클래스는 자바 가상 머신의 클래스 로더에 의해 적재되고, 링크 과정(linking)과 초기화 과정(Initialization)을 거쳐 런타임 시스템(runtime system) 내의 자료구조에 해당 정보가 저장되고, 인터프리터 또는 JIT 컴파일러와 같은 실행 엔진(Execution Engine)에 의해 메소드가 실행된다.
전형적인 인터프리터(interpreter)에서는 상기 도 3에서 도시한 방법으로 바이트코드(bytecode)를 실행한다. 인터프리터(interpreter)는 메소드가 호출되면 상기 메소드의 바이트코드(bytecode)를 가리키는 프로그램 카운터(Program Counter)를 증가시킨 후(S310), 상기 메소드의 바이트코드(bytecode)의 끝인지 여부를 판단한다(S320). 만일 상기 메소드의 바이트코드(bytecode)의 끝이 아니라면(S320의 아니오), 한 바이트 연산코드(opcode)를 페치(fetch)하고(S330), 프로그램 내의 스위치(switch) 문을 이용하여 상기 페치(fetch)된 연산코드(opcode)에 해당하는 핸들러로 이동(S340)하여 상기 핸들러가 수행된다(S350). 이러한 과정을 바이트코드(bytecode)의 크기만큼 반복 하면 상기 메소드에 대한 인터프리팅(interpreting)과정이 종료하게 된다.
상술한 과정을 의사 코드(Pseudo code)로 나타내면 다음과 같다.
Loop {
Op = *pc++;
switch (Op) {
case op_1:
// op_1 s implementation
break;
case op_2:
// op_2 s implementation
break;
case op_3:
// op_3 s implementation
break;
}
각각의 연산코드(opcode)에 대한 핸들러에서 만약 상기 연산코드(opcode)가 필요로 하는 피연산자(operand)가 한 바이트 보다 크다면, 상기 피연산자의 값은 연속된 바이트들로 저장된다. 따라서, 상기 연속된 바이트들을 각각의 비트별로 OR 연산자와 쉬프트(shift) 연산자를 통하여 하나의 의미있는 값으로 다시 재구성한다. 예를 들어, 리틀 엔디언(little endian)을 사용하는 CPU에서 만약 어떤 연산코드(opcode) A가 필요로 하는 피연산자(operand)가 뒤이어서 오는 byte1, byte2, byte3, byte4에 있다면 byte4는 논리적으로 나타내고자 하는 32비트 값의 1번째 비트부터 8번 째 비트 까지, byte3는 논리적으로 나타내고자 하는 32비트 값의 9번째 비트부터 16번 째 비트까지, byte2는 논리적으로 나타내고자 하는 32비트 값의 17번째 비트부터 24번째 비트 까지, byte1는 논리적으로 나타내고자 하는 32비트 값 의 25번째 비트부터 32번 째 비트까지를 나타내고 있다.
그러므로, '(byte1<<24)|( byte2 <<16)|( byte3 <<8)| byte4 ' 와 같은 연산을 통해서 연산코드(opcode) A가 실제 필요로 하는 32비트 피연산자의 값을 구할 수 있다. 기존의 자바 가상 머신에서는 이런 피연산자(operand)를 조합하는 과정이 메소드가 실행 될 때마다 발생하게 된다.
따라서, 피연산자(Operand)의 경우에, 상기 피연산자(Operand)가 한 바이트 보다 큰 경우 연속된 바이트들로 나열되며 상기 연속적으로 나열된 바이트들은 메소드가 실행될 때마다 각각의 비트별로 OR 연산자와 쉬프트(shift) 연산자를 통해서 재구성되는데, 이러한 과정은 자바 프로그램 실행에 있어서 상당한 오버헤드로 작용할 수 있다.
또한, 바이트코드는 연산코드를 사용하므로 하나의 바이트코드를 기계어로 변환할 때마다 상기 의사 코드의 switch 문의 조건들을 판단하는 과정을 거치게 된다는 문제점이 있다. 따라서, 상기와 같은 제약을 극복함으로써, 자바 가상 머신의 성능을 향상시키고자 하는 필요성이 나타나게 되었다.
본 발명이 이루고자 하는 기술적 과제는, 자바 가상 머신이 바이트코드를 인터프리트(Interpret)하기 전에 16비트 메모리 요소를 사용하는 제 2 코드로 변환시키는 전처리(Precomputation) 과정을 수행함으로써 자바 프로그램의 실행 속도를 향상시킬 수 있는 자바 가상 머신의 명령어 수행 방법 및 이를 위한 장치를 제공하고자 하는 것이다.
본 발명이 이루고자 하는 다른 기술적 과제는 바이트코드를 16비트 메모리 요소를 사용하는 제 2 코드로 변환함으로써 더 많은 메모리를 요구하는 코드로의 변환에 비하여 메모리 증가에 따른 오버헤드가 비교적 적은 자바 가상 머신의 명령어 수행 방법 및 이를 위한 장치를 제공하고자 하는 것이다.
본 발명의 목적들은 이상에서 언급한 목적들로 제한되지 않으며, 언급되지 않은 또 다른 목적들은 아래의 기재로부터 당업자에게 명확하게 이해되어질 수 있을 것이다.
상기 목적을 달성하기 위하여, 본 발명의 실시예에 따른 자바 가상 머신의 명령어 수행 방법은, (a) 자바 클래스를 구성하는 메소드의 바이트코드(bytecode)를 추출하는 단계, (b) 추출된 바이트코드를, 바이트코드 내의 연산코드(opcode)에 대응되는 동작을 수행하는 연산코드 핸들러의 위치에 대한 정보를 포함하고 16비트 확장 메모리 요소(16-bit wide memory element)를 사용하는 제 2 코드로 변환하는 단계, 및 (c) 제 2 코드를 해석하여 실행하는 단계를 포함한다.
한편, 본 발명의 실시예에 따른 자바 가상 머신은, 자바 클래스를 구성하는 메소드의 바이트코드(bytecode)를 추출하는 바이트코드 추출부, 바이트코드 추출부에 의해 추출된 바이트코드를, 바이트코드 내의 연산코드(opcode)에 대응되는 동작을 수행하는 연산코드 핸들러의 위치에 대한 정보를 포함하고 16비트 확장 메모리 요소를 사용하는 제 2 코드로 변환하는 제 2코드 변환부, 제 2코드 변환부에 의해 변환된 제 2 코드를 해석하고 실행하는 명령어 실행부를 포함한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예를 상세히 설명하기로 한다.
도 4는 본 발명의 실시예에 따른 자바 가상 머신의 구성을 보여주는 블록도이다.
본 실시예에서 자바 가상 머신(400)은 바이트코드 추출부(420), 제 2 코드 변환부(430), 링킹부(440), 초기화부(450), 및 명령어 실행부(460)를 포함하여 구성될 수 있다.
바이트코드 추출부(420)는 자바 가상 머신에 로딩되어 적재되는 클래스(410)로부터 메소드의 바이트코드를 추출하여 제 2 코드 변환부(430)에 제공한다.
제 2 코드 변환부(430)는 8비트 단위의 바이트코드를 16비트 메모리 요소를 사용하는 제 2 코드로 변환한다. 제 2 코드로의 변환 과정은 바이트코드의 연산코 드를 16비트의 연산코드 핸들러 오프셋으로 변환하는 단계와, 피연산자가 있는 경우 바이트코드 내의 피연산자 필드의 비트들을 적절히 조합하여 16비트 또는 32비트의 인덱스 또는 메모리 주소로 변환하는 단계를 포함한다. 제 2 코드로의 변환 과정의 상세한 사항은 도 6내지 도 10을 참조하여 후술하도록 한다.
링킹부(440)는 변환된 제 2 코드를 검증(verification), 준비(preparation), 및 분석(resolution)을 포함하는 링킹(linking) 작업을 수행하여 자바 가상 머신의 런타임 상태(runtime state)로 합친다.
초기화부(450)는 링크된 제 2 코드를 정적 초기화부(static initializer) 및 클래스에 선언된 정적 필드를 위한 초기화부(initializer)의 실행을 거쳐 초기화 시킨다.
명령어 실행부(460)는 자바 클래스 메소드의 제 2 코드를 해석하여 실행한다. 명령어 실행부의 일 실시예는 인터프리터가 될 수 있으며 다른 실시예로 컴파일러가 될 수 있다. 인터프리팅(interpreting) 방식의 자바 가상 머신은 수행해야 할 메소드의 바이트코드를 하나씩 해석하여 어플리케이션을 수행하고, JIT 컴파일러를 사용하는 자바 가상 머신은 바이트코드를 컴파일하여 현재의 자바 플랫폼에 종속적인 기계어 코드를 얻은 후 그 기계어 코드를 실행함으로써 어플리케이션을 실행한다.
지금까지 도 4의 각 구성요소는 소프트웨어(software) 또는, FPGA(field-programmable gate array)나 ASIC(application-specific integrated circuit)과 같은 하드웨어(hardware)를 의미할 수 있다. 그렇지만 상기 구성요소들은 소프트웨어 또는 하드웨어에 한정되는 의미는 아니며, 어드레싱(addressing)할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 실행시키도록 구성될 수도 있다. 상기 구성요소들 안에서 제공되는 기능은 더 세분화된 구성요소에 의하여 구현될 수 있으며, 복수의 구성요소들을 합하여 특정한 기능을 수행하는 것으로 구현할 수도 있다. 뿐만 아니라, 상기 구성요소들은 시스템 내의 하나 또는 그 이상의 컴퓨터들을 실행시키도록 구현될 수 있다.
도 5는 본 발명의 실시예에 따른 자바 가상 머신의 명령어 수행 과정을 보여주는 흐름도이다.
새로운 클래스(410)는 클래스 로더를 통하여 로딩되어 자바 가상 머신(400) 내부로 적재되고, 바이트코드 추출부(400)가 적재된 클래스로부터 메소드를 실행하기 위한 바이트코드를 추출(S510)한다. 추출된 바이트코드는 제 2 코드 변환부(430)에 의해 16비트 메모리 요소를 사용하는 제 2 코드로 변환(S520)된다. 변환된 제 2 코드는 검증(verification), 준비(preparation), 및 분석(resolution)을 포함하는 링킹(linking) 단계(S530)를 거쳐 자바 가상 머신의 런타임(runtime) 상태로 합쳐진다(combine). 링크된 제 2 코드는 정적 초기화부(static initializer) 및 클래스에 선언된 정적 필드를 위한 초기화부(initializer)의 실행을 거쳐 초기화(S540)된다. 초기화된 제 2 코드는 명령어 실행부(440)에 의해 번역되거나 기계어로 컴파일 된 후 실행(S530)된다.
바이트코드를 제 2 코드로 변환하는 단계의 상세는 도 6을 참조하여 설명하도록 한다.
바이트코드는 도 2에서 상술한 바와 같이 바이트 단위의 연산코드와 피연산자로 이루어진다. 바이트코드를 제 2 코드로 변환하는 과정은 다음과 같다.
바이트코드의 한 바이트(8비트)의 연산코드는 해당 연산코드 핸들러의 16비트 오프셋으로 대체(S610)된다. 연산코드 핸들러 오프셋을 기초 주소(Base address)에 더함으로써 연산코드에 해당하는 동작을 수행하는 핸들러의 메모리 주소를 알 수 있다. 따라서 제 2 코드를 인터프리터 또는 컴파일러가 실행하는 경우 연산코드 핸들러 오프셋으로부터 바로 핸들러의 주소를 알 수 있으므로, 인터프리터 루프내에서 도 3에서 상술된 switch문을 실행할 필요없이 바로 해당 연산코드 핸들러로 분기하게 된다. 이렇게 함으로써 자바 프로그램의 실행 시간을 단축시킬 수 있게 된다.
연산코드가 피연산자를 갖는 경우(S620의 예), 바이트 단위의 피연산자를 16비트 단위의 피연산자로 변환한다. 바이트코드에서 1 바이트를 차지하는 피연산자는 부호 또는 비부호 워드(Signed or unsigned word)로 전환되어 제 2 코드에 16 비트로 채워진다(packed). 바이트코드에서 2 바이트를 차지하는 피연산자는 부호 또는 비부호 워드(Signed of unsigned word)로 전환되어 제 2 코드에 2개의 연속하는(consecutive) 16 비트로 채워진다(packed). 또한, 바이트코드에서 4 바이트를 차지하는 피연산자는 부호 또는 비부호 워드(Signed of unsigned word)로 전환되어 제 2 코드에 2개의 연속하는16 비트로 채워진다.
피연산자의 변환 단계는 다시 피연산자가 인덱스인 경우와 피연산자가 오프셋 값인 경우로 세분될 수 있다. 바이트코드의 피연산자가 인덱스인 경우(S630의 예), 바이트코드의 인덱스를 16비트 메모리 요소에 적합하도록 변환한다. 본 실시예는 16비트 메모리 요소를 사용하므로 바이트코드의 인덱스를 왼쪽으로 2비트 시프트하여 제 2 코드의 인덱스 값을 생성하게 된다. 피연산자로 인덱스를 갖는 바이트코드의 변환 예는 도 7에서 후술하도록 한다.
바이트코드의 피연산자가 오프셋 값인 경우(S630의 아니오), 오프셋 값을 기초 주소에 더하여 32비트 메모리 주소로 변환(S650)한다. 피연산자로 오프셋을 갖는 바이트코드의 변환 예는 도 8 내지 도 9에서 후술하도록 한다.
제 2 코드가 번역되어 실행되는 과정을 의사 코드로 표현하면 다음과 같다.
nop_label:
++pc; goto *(nop_label+pc[0]);
aconst_null_label:
*sp=0;
++sp;
++pc; goto *(nop_label+pc[0]);
...
// other opcode handlers
자바 가상 머신에서의 링킹 단계(S530)는 이진 형태의 클래스 또는 인터페이스 타입을 취하여 자바 가상 머신의 런타임 상태로 합치는 과정을 말한다. 본 실시예서 링킹 단계는 초기화 단계(S540) 전에 수행되는 것으로 도시되어 있으나 명령어의 실행 단계(S550)에서도 실행될 수 있는 융통성을 갖는다.
본 실시예에서 바이트코드로부터 제 2코드로의 변환은 검증(Verification) 과정보다 먼저 일어나므로, 제 2 코드의 검증은 제 2 코드 명령어의 레이아웃(layout), 명령어 피연산자들의 변환 및 선계산(precomputation)을 고려한다. 제 2 코드의 검증 과정에서 어떤 연산코드가 검증되는지를 결정하기 위하여 핸들러 오프셋-연산코드 룩업 테이블이 사용된다. 핸들러 오프셋-연산코드 룩업 테이블의 구조는 도 10에서 후술하도록 한다.
본 실시예에 따른 자바 가상 머신은 메소드를 번역하는 과정에서 다른 클래스에 대한 참조를 분석(resolve)하기 위해 분석을 필요로하는 모든 명령어들을 위한 공통된 함수를 가질 수 있다. 분석을 위한 하나의 공통된 함수를 갖는 것은 인터프리터 루프 사이즈를 더 작게 하고, 코드 캐시 미쓰(code cache miss)를 줄일 수 있다. 그 결과 인터프리터의 성능을 향상시키게 된다. 공통된 함수 내부에서 어떤 연산코드가 분석되는지 결정하기 위하여 핸들러 오프셋-연산코드 룩업 테이블이 사용된다. 핸들러 오프셋-연산코드 룩업 테이블의 구조는 도 10에서 후술하도록 한다.
도 7은 바이트코드를 제 2 코드로 변환하는 제 1 실시예를 보여주는 도면으로서 바이트코드의 피연산자가 인덱스인 경우의 제 2 코드의 레이아웃을 보여준다.
8비트 연산코드(710)와 8비트 피연산자로서 지역 변수 인덱스(720)를 포함하는 바이트코드 명령어, 예를 들어 aload, astore 등의 명령어는 16 비트 연산코드 핸들러 오프셋(730)과 16비트 피연산자(740)를 갖는 제 2 코드로 변환된다. 16비트 피연산자는 목적 프로세서(target processor)가 바이트 어드레싱 모드(byte addressing mode)만을 갖는다면 왼쪽으로 2비트 미리 시프트된(pre-shifted) 지역 변수 인덱스를 갖게 된다.
도 8은 바이트코드를 제 2 코드로 변환하는 제 2 실시예를 보여주는 도면으로서 피연산자가 2 바이트의 오프셋인 경우 제 2 코드의 레이아웃을 보여준다.
8비트 연산코드(810)와 하나의 피연산자로서 2 바이트로 이루어진 오프셋 (820, 830)을 포함하는 바이트코드 명령어, 예를 들어 goto, if 등의 명령어는 제 2 코드에서 3개의 16 비트 요소를 차지하게 된다. 3개의 16비트 요소는 하나의 연산코드 핸들러 오프셋(840)과 명령어 실행 단계에서 사용될 명령어의 32비트 주소를 구성하는 2개의 16비트 요소(850)이다.
한편, 8비트 연산코드(810)와 하나의 피연산자로서 2 바이트로 이루어진 필드 오프셋(field-offset)(820, 830)을 포함하는 바이트코드 명령어, 예를 들어 getfield_quick, putfield_quick 등의 명령어도 제 2 코드에서 3개의 16 비트 요소를 차지하게 된다. 3개의 16비트 요소는 하나의 연산코드 핸들러 오프셋(840)과 32비트 필드 오프셋을 구성하는 2개의 16비트 요소이다. 피연산자를 위한 16비트 요소는 목적 프로세서가 바이트 어드레싱 모드(byte addressing mode)만을 갖는다면 왼쪽으로 2비트 미리 시프트된(pre-shifted) 32비트 필드 오프셋을 갖게 된다.
와이드 연산, 예를 들어 goto_w, jsr_w 등의 명령어는 8비트 연산코드와 4 바이트의 피연산자로 구성된다. 제 2 코드의 경우 일반 연산과 와이드 연산을 구별할 필요가 없으므로, 와이드 연산 대신 보통 연산코드(goto_w 대신 goto)의 핸들러 오프셋으로 대체하고 32비트 피연산자를 만들기 위해 2개의 연속하는 16비트 요소 를 사용한다.
본 실시예에서는 제 2 코드의 피연산자가 32 비트 주소인 경우를 위주로 설명하였으나, 바이트코드의 오프셋을 조합하여 32 비트의 오프셋 값으로 변환하는 경우도 포함될 수 있음은 당업자에게 자명한 사항이다.
도 9는 바이트코드를 제 2 코드로 변환하는 제 3 실시예를 보여주는 도면이다.
바이트코드 명령어가 tableswitch이고 명령어 전체로서 N 바이트를 차지한다면, 제 2 코드 명령어는 tableswitch의 16비트 연산코드 핸들러 오프셋(910)으로 시작한다. tableswitch의 연산코드 핸들러 오프셋(910) 뒤에 다음에 오는 피연산자들을 32비트 경계에 정렬시키기 위한 선택적 패드(930)가 위치할 수 있다. 하한 주소(low address)(960)는 바이트코드의 디폴트 바이트(940)에 하한 바이트(low byte)(950)를 더하여 생성하고, 상한 주소(high address)(980)는 바이트코드의 디폴트 바이트(940)에 상한 바이트(high byte)(950)를 더하여 생성한다. 바이트코드의 4바이트의 분기 오프셋(990)은 32비트의 분기 주소(995)로 변환된다.
본 실시예에서는 제 2 코드의 피연산자가 32 비트 주소인 경우를 위주로 설명하였으나, 바이트코드의 오프셋을 조합하여 32 비트의 오프셋 값으로 변환하는 경우도 포함될 수 있음은 당업자에게 자명한 사항이다.
도 10은 본 발명의 실시예에 따른 연산코드 핸들러 오프셋-연산코드 테이블의 자료구조를 보여주는 도면이다.
자바 가상 머신은 일정한 명령어에 대하여 연산코드를 필요로 할 때가 있는 데, 이 경우 오프셋에 대응되는 연산코드를 찾아볼 수 있는 룩업(lookup) 테이블을 사용하면 편리하다. 도 10에 도시된 오프셋-연산코드 룩업 테이블은 연산코드 핸들러 오프셋이 인덱스가 되고 찾고자 하는 연산코드 핸들러 오프셋에 해당하는 연산코드의 값이 배열에 들어있다.
제 2 코드를 위한 스택 맵(stackmap)을 계산하기 위하여 자바 가상 머신은 제 2 코드 명령어를 스캔한다. 이 스캔 과정에서 핸들러 오프셋을 연산코드로 변환하기 위하여 핸들러 오프셋-연산코드 룩업 테이블이 사용될 수 있다.
이상 첨부된 도면을 참조하여 본 발명의 실시예를 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
상기한 바와 같은 본 발명의 자바 가상 머신의 명령어 수행 방법 및 이를 위한 장치에 따르면 다음과 같은 효과가 하나 혹은 그 이상 있다.
첫째, 바이트코드를 16비트 메모리 요소를 사용하는 제 2 코드로 변환함으로써 자바 프로그램의 실행 속도를 향상시킬 수 있다는 장점이 있다.
둘째, 바이트코드를 16비트 메모리 요소를 사용하는 제 2 코드로 변환함으로써 더 많은 메모리를 요구하는 코드로의 변환에 비하여 메모리 증가에 따른 오버헤드가 비교적 적다는 장점도 있다.

Claims (21)

  1. (a) 자바 클래스를 구성하는 메소드의 바이트코드(bytecode)를 추출하는 단계;
    (b) 상기 추출된 바이트코드를, 상기 바이트코드 내의 연산코드(opcode)에 대응되는 동작을 수행하는 연산코드 핸들러의 위치에 대한 정보를 포함하고 16비트 메모리 요소(16-bit memory element)를 사용하는 제 2 코드로 변환하는 단계; 및
    (c) 상기 제 2 코드를 실행하는 단계를 포함하는 자바 가상 머신(Java Virtual Machine)의 명령(instruction) 수행 방법
  2. 제 1항에 있어서,
    상기 (c) 단계는
    (c1) 상기 제 2 코드를 런타임(runtime) 상태로 링킹(linking)하는 단계; 및
    (c2) 상기 링킹된 제 2 코드가 실행될 수 있도록 초기화(initialization)하는 단계; 및
    (c3) 상기 초기화된 제 2 코드를 실행하는 단계를 포함하는 자바 가상 머신의 명령 수행 방법
  3. 제 2항에 있어서,
    상기 (c1) 단계는
    (c11) 상기 제 2 코드 내의 상기 연산코드 핸들러의 위치에 대한 정보 및 상기 연산 코드 핸들러에 대응되는 상기 연산코드를 포함하는 테이블을 참조하여 상기 제 2 코드를 검증하는 단계를 포함하는 자바 가상 머신의 명령 수행 방법
  4. 제 1항에 있어서,
    상기 연산코드 핸들러의 위치를 나타내는 값은
    상기 연산코드 핸들러의 오프세트(Offset)인 자바 가상 머신의 명령 수행 방법
  5. 제 1항에 있어서,
    상기 (b) 단계는
    (b1) 상기 바이트코드 내의 바이트 단위의 피연산자를 16비트 메모리 요소를 사용하는 제 2 피연산자로 변환하는 단계를 포함하는 자바 가상 머신의 명령 수행 방법
  6. 제 5항에 있어서,
    상기 (b1) 단계는
    (b11) 상기 바이트코드 내의 바이트 단위의 피연산자를 왼쪽으로 2비트 시프트하는 단계를 포함하는 자바 가상 머신의 명령 수행 방법
  7. 제 1항에 있어서,
    상기 (b) 단계는
    (b1) 상기 바이트코드 내의 피연산자를 나타내는 연속적인 바이트들을 조합하여 16비트 메모리 요소를 사용하는 제 2 피연산자로 변환하는 단계를 포함하는 자바 가상 머신의 명령 수행 방법
  8. 제 7항에 있어서,
    상기 (b1) 단계는
    (b11) 상기 바이트코드 내의 피연산자를 나타내는 1 이상의 연속적인 바이트들을 OR 연산 및 시프트 연산으로 조합하는 단계; 및
    (b12) 상기 조합된 결과를 왼쪽으로 2비트 시프트하는 단계를 포함하는 자바 가상 머신의 명령 수행 방법
  9. 제 7항에 있어서,
    상기 제 2 피연산자는
    상기 바이트코드 내의 피연산자가 오프셋인 경우 기초 주소에 상기 오프셋을 더한 메모리 주소인 자바 가상 머신의 명령 수행 방법
  10. 제 1항에 있어서,
    상기 (b) 단계는
    상기 입력받은 바이트코드 내의 연산코드가 와이드 피연산자(wide operand)를 사용하는 연산코드인 경우 상기 연산코드를 와이드 피연산자를 사용하지 않는 연산코드로 변경하는 단계를 포함하는 자바 가상 머신의 명령 수행 방법
  11. 자바 클래스를 구성하는 메소드의 바이트코드(bytecode)를 추출하는 바이트코드 추출부;
    상기 바이트코드 추출부에 의해 추출된 바이트코드를, 상기 바이트코드 내의 연산코드(opcode)에 대응되는 동작을 수행하는 연산코드 핸들러의 위치에 대한 정보를 포함하고 16비트 메모리 요소를 사용하는 제 2 코드로 변환하는 제 2코드 변환부;
    상기 제 2코드 변환부에 의해 변환된 상기 제 2 코드를 실행하는 명령어 실행부를 포함하는 자바 가상 머신(Java Virtual Machine)
  12. 제 11항에 있어서,
    상기 제 2 코드를 런타임(runtime) 상태로 만드는 링킹(linking) 작업을 수행하는 링킹부; 및
    상기 링킹된 제 2 코드가 실행될 수 있도록 초기화(initialization)하는 초기화부를 더 포함하는 자바 가상 머신
  13. 제 12항에 있어서,
    상기 링킹부는
    상기 제 2 코드 내의 상기 연산코드 핸들러의 위치에 대한 정보 및 상기 연산 코드 핸들러에 대응되는 상기 연산코드를 포함하는 테이블을 참조하여 상기 제 2 코드를 검증하는 자바 가상 머신
  14. 제 11항에 있어서,
    상기 연산코드 핸들러의 위치를 나타내는 값은
    상기 연산코드 핸들러의 오프세트(Offset)인 자바 가상 머신
  15. 제 11항에 있어서,
    상기 제 2 코드 변환부는
    상기 바이트코드 내의 바이트 단위의 피연산자를 16비트 단위의 제 2 피연산자로 변환하는 자바 가상 머신
  16. 제 11항에 있어서,
    상기 제 2 코드 변환부는
    상기 바이트코드 내의 바이트 단위의 피연산자를 왼쪽으로 2비트 시프트하는 자바 가상 머신의 명령 수행 방법
  17. 제 11항에 있어서,
    상기 제 2 코드 변환부는
    상기 바이트코드 내의 피연산자를 나타내는 연속적인 바이트들을 조합하여 16비트 단위의 제 2 피연산자로 변환하는 자바 가상 머신
  18. 제 17항에 있어서,
    상기 제 2 피연산자는
    상기 바이트코드 내의 피연산자가 오프셋인 경우 기초 주소에 상기 오프셋을 더한 메모리 주소인 자바 가상 머신
  19. 제 11항에 있어서,
    상기 제 2 코드 변환부는
    상기 바이트코드 내의 피연산자를 나타내는 1 이상의 연속적인 바이트들을 OR 연산 및 시프트 연산으로 조합하고, 상기 조합된 결과를 왼쪽으로 2비트 시프트하는 자바 가상 머신의 명령 수행 방법
  20. 제 11항에 있어서,
    상기 제 2 코드 변환부는
    상기 입력받은 바이트코드 내의 연산코드가 와이드 피연산자(wide operand)를 사용하는 연산코드인 경우 상기 연산코드를 와이드 피연산자를 사용하지 않는 연산코드로 변경하는 자바 가상 머신
  21. 제 1항 내지 제 10항 중 어느 한 항에 의한 방법을 실행하기 위한 컴퓨터로 읽을 수 있는 프로그램을 기록한 기록매체
KR1020050033235A 2005-04-21 2005-04-21 자바 가상 머신의 명령어 수행 방법 및 그 장치 KR100763177B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020050033235A KR100763177B1 (ko) 2005-04-21 2005-04-21 자바 가상 머신의 명령어 수행 방법 및 그 장치
JP2006106637A JP2006302272A (ja) 2005-04-21 2006-04-07 ジャバ仮想マシンの命令語実行方法及びその装置
CNB2006100724102A CN100573454C (zh) 2005-04-21 2006-04-11 用于执行java虚拟机的指令的方法和设备
US11/401,403 US7725879B2 (en) 2005-04-21 2006-04-11 Method and apparatus for executing instructions of java virtual machine and transforming bytecode

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020050033235A KR100763177B1 (ko) 2005-04-21 2005-04-21 자바 가상 머신의 명령어 수행 방법 및 그 장치

Publications (2)

Publication Number Publication Date
KR20060110971A true KR20060110971A (ko) 2006-10-26
KR100763177B1 KR100763177B1 (ko) 2007-10-04

Family

ID=37195240

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020050033235A KR100763177B1 (ko) 2005-04-21 2005-04-21 자바 가상 머신의 명령어 수행 방법 및 그 장치

Country Status (4)

Country Link
US (1) US7725879B2 (ko)
JP (1) JP2006302272A (ko)
KR (1) KR100763177B1 (ko)
CN (1) CN100573454C (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100678912B1 (ko) * 2005-10-18 2007-02-05 삼성전자주식회사 메소드 바이트코드 해석 방법 및 상기 방법에 의해동작하는 시스템
KR100930831B1 (ko) * 2009-03-24 2009-12-10 주식회사 에이디칩스 바이트코드 변환 가속 장치 및 그 방법
KR101407629B1 (ko) * 2007-06-04 2014-06-13 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 자바 변환 가속 장치 및 방법

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7693887B2 (en) 2005-02-01 2010-04-06 Strands, Inc. Dynamic identification of a new set of media items responsive to an input mediaset
US9164783B2 (en) * 2007-08-20 2015-10-20 International Business Machines Corporation Load time resolution for dynamic binding languages
KR100936401B1 (ko) * 2007-10-17 2010-01-12 주식회사 에이디칩스 자바 바이트코드 변환방법
US9152437B2 (en) * 2010-10-28 2015-10-06 Hewlett-Packard Development Company, L.P. Dynamically installing image processing
US10466989B2 (en) 2011-09-02 2019-11-05 Microsoft Technology Licensing, Llc. Fast presentation of markup content having script code
US10481876B2 (en) 2017-01-11 2019-11-19 Microsoft Technology Licensing, Llc Methods and systems for application rendering
CN110675256B (zh) * 2019-08-30 2020-08-21 阿里巴巴集团控股有限公司 部署和执行智能合约的方法及装置
US10783082B2 (en) 2019-08-30 2020-09-22 Alibaba Group Holding Limited Deploying a smart contract
CN112052433B (zh) * 2020-08-05 2024-05-07 北京智游网安科技有限公司 一种Jar文件的虚拟化保护方法、终端及存储介质

Family Cites Families (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08286911A (ja) * 1995-04-11 1996-11-01 Mitsubishi Electric Corp 機械語命令翻訳方法
US7137107B1 (en) * 2003-04-29 2006-11-14 Roy-G-Biv Corporation Motion control systems and methods
US5887172A (en) * 1996-01-10 1999-03-23 Sun Microsystems, Inc. Remote procedure call system and method for RPC mechanism independent client and server interfaces interoperable with any of a plurality of remote procedure call backends
US5875335A (en) * 1996-09-30 1999-02-23 Apple Computer, Inc. Parameter marshaling techniques for dynamic object-oriented programming languages
US6139199A (en) * 1997-06-11 2000-10-31 Sun Microsystems, Inc. Fast just-in-time (JIT) scheduler
US6154877A (en) * 1997-07-03 2000-11-28 The University Of Iowa Research Foundation Method and apparatus for portable checkpointing using data structure metrics and conversion functions
US6233733B1 (en) * 1997-09-30 2001-05-15 Sun Microsystems, Inc. Method for generating a Java bytecode data flow graph
JP3377419B2 (ja) * 1997-11-11 2003-02-17 インターナショナル・ビジネス・マシーンズ・コーポレーション 命令列生成方法及び装置、変換方法、及びコンピュータ
US6081665A (en) * 1997-12-19 2000-06-27 Newmonics Inc. Method for efficient soft real-time execution of portable byte code computer programs
US6282698B1 (en) * 1998-02-09 2001-08-28 Lucent Technologies Inc. Detecting similarities in Java sources from bytecodes
US6011918A (en) * 1998-04-22 2000-01-04 International Business Machines Corporation Methods, systems and computer program products for generating client/server applications
US6324688B1 (en) 1998-07-30 2001-11-27 International Business Machines Corporation Method and apparatus for optimizing execution of Java programs
US6205578B1 (en) * 1998-08-14 2001-03-20 Ati International Srl Interpreter for stack-based languages
US6256784B1 (en) * 1998-08-14 2001-07-03 Ati International Srl Interpreter with reduced memory access and improved jump-through-register handling
US6332216B1 (en) * 1999-03-09 2001-12-18 Hewlett-Packard Company Hybrid just-in-time compiler that consumes minimal resource
JP2000311089A (ja) * 1999-04-28 2000-11-07 Nec Corp インタプリタの高速化方法ならびに装置
US6484312B1 (en) * 1999-06-07 2002-11-19 Microsoft Corporation Inferring operand types within an intermediate language
JP2001056764A (ja) 1999-08-18 2001-02-27 Access:Kk 仮想計算機の実行方法および装置
GB9920676D0 (en) * 1999-09-01 1999-11-03 Tao Group Ltd Translating and executing object-oriented computer programs
US6560774B1 (en) * 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
DE10104043A1 (de) * 2000-02-23 2001-08-30 Ibm Die Schaffung der Möglichkeit, dass vorhandene Anwendungen andere Sprachen als ihre eingebauten Makrosprachen benutzen, ohne die vorhandene Anwendung zu ändern
US6865730B1 (en) * 2000-03-08 2005-03-08 International Business Machines Corporation Interprocedural analysis and optimization of an object oriented program in the presence of dynamic class loading
US6775680B2 (en) * 2000-08-08 2004-08-10 International Business Machines Corporation High level assembler metamodel
US6993751B2 (en) * 2001-05-14 2006-01-31 Microsoft Corporation Placing exception throwing instructions in compiled code
JP2003050844A (ja) 2001-08-03 2003-02-21 Jamsea Mutual Aid Co Ltd 適任性等照会システム
US7058934B2 (en) * 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
JP4234976B2 (ja) * 2001-10-31 2009-03-04 株式会社アプリックス 中間コード実行システム
JP2003216443A (ja) * 2002-01-25 2003-07-31 Hitachi Ltd 中間コード実行装置および方法
JP4032822B2 (ja) * 2002-05-20 2008-01-16 日本電気株式会社 アセンブラプログラムのためのアドレス記述変換システム及びプログラム
JP4093810B2 (ja) * 2002-05-31 2008-06-04 三洋電機株式会社 冷却貯蔵庫
US20040088703A1 (en) * 2002-11-05 2004-05-06 Nedim Fresko Mechanism for implementing an interpreter with hierarchical execution loops
KR20040068653A (ko) * 2003-01-27 2004-08-02 삼성전자주식회사 자바 기반의 스마트카드에서의 실행속도 향상 장치
KR100506522B1 (ko) * 2003-02-24 2005-08-03 삼성전자주식회사 자바 프로그램에서 바이트 코드의 컴파일 시간 단축시스템 및 방법
US7120898B2 (en) * 2003-06-26 2006-10-10 Microsoft Corporation Intermediate representation for multiple exception handling models
US7434209B2 (en) * 2003-07-15 2008-10-07 Transitive Limited Method and apparatus for performing native binding to execute native code
US7225037B2 (en) * 2003-09-03 2007-05-29 Unitronics (1989) (R″G) Ltd. System and method for implementing logic control in programmable controllers in distributed control systems
US7287243B2 (en) * 2004-01-06 2007-10-23 Hewlett-Packard Development Company, L.P. Code verification system and method
KR100643268B1 (ko) * 2004-01-17 2006-11-10 삼성전자주식회사 자바 가상 머신의 성능을 향상시키는 방법 및 상기 방법에의해 동작되는 시스템
US7574692B2 (en) * 2004-11-19 2009-08-11 Adrian Herscu Method for building component-software for execution in a standards-compliant programming environment

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100678912B1 (ko) * 2005-10-18 2007-02-05 삼성전자주식회사 메소드 바이트코드 해석 방법 및 상기 방법에 의해동작하는 시스템
KR101407629B1 (ko) * 2007-06-04 2014-06-13 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 자바 변환 가속 장치 및 방법
US9038039B2 (en) 2007-06-04 2015-05-19 Samsung Electronics Co., Ltd. Apparatus and method for accelerating java translation
KR100930831B1 (ko) * 2009-03-24 2009-12-10 주식회사 에이디칩스 바이트코드 변환 가속 장치 및 그 방법

Also Published As

Publication number Publication date
JP2006302272A (ja) 2006-11-02
US20060253847A1 (en) 2006-11-09
CN100573454C (zh) 2009-12-23
KR100763177B1 (ko) 2007-10-04
CN1855053A (zh) 2006-11-01
US7725879B2 (en) 2010-05-25

Similar Documents

Publication Publication Date Title
KR100763177B1 (ko) 자바 가상 머신의 명령어 수행 방법 및 그 장치
KR100643268B1 (ko) 자바 가상 머신의 성능을 향상시키는 방법 및 상기 방법에의해 동작되는 시스템
EP3314422B1 (en) Extending a virtual machine instruction set architecture
US7725883B1 (en) Program interpreter
US6438745B1 (en) Program conversion apparatus
Adve et al. LLVA: A low-level virtual instruction set architecture
US7823140B2 (en) Java bytecode translation method and Java interpreter performing the same
Bernat et al. Portable worst-case execution time analysis using Java byte code
US20060130016A1 (en) Method of kernal-mode instruction interception and apparatus therefor
CN110245467B (zh) 基于Dex2C与LLVM的Android应用程序保护方法
IE920749A1 (en) Automatic flowgraph generation for program analysis and¹translation
KR20040048246A (ko) 자바 실행 장치 및 자바 실행 방법
KR101407629B1 (ko) 자바 변환 가속 장치 및 방법
Hwang et al. DisIRer: Converting a retargetable compiler into a multiplatform binary translator
Mong et al. DynamoSim: a trace-based dynamically compiled instruction set simulator
EP0950947A2 (en) Static binding of dynamically dispatched calls in the presence of dynamic linking and loading
KR102341137B1 (ko) 중간언어 기반 코드 변환 방법 및 이를 포함하는 전자 장치
Veldema Jcc, a native Java compiler
Markstedter Blue Fox: Arm Assembly Internals and Reverse Engineering
Tan et al. Using local library function in binary translation
Kågström et al. Cibyl: an environment for language diversity on mobile devices
RU2390821C1 (ru) Способ динамической инструментации
Varma A retargetable optimizing Java-to-C compiler for embedded systems
Däumler et al. Reducing startup time of a deterministic virtualizing runtime environment
KR100984815B1 (ko) 스크립트 언어의 실행속도 향상 방법

Legal Events

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

Payment date: 20120830

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20130829

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20140828

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20150828

Year of fee payment: 9

LAPS Lapse due to unpaid annual fee