KR100936401B1 - 자바 바이트코드 변환방법 - Google Patents

자바 바이트코드 변환방법 Download PDF

Info

Publication number
KR100936401B1
KR100936401B1 KR1020070104479A KR20070104479A KR100936401B1 KR 100936401 B1 KR100936401 B1 KR 100936401B1 KR 1020070104479 A KR1020070104479 A KR 1020070104479A KR 20070104479 A KR20070104479 A KR 20070104479A KR 100936401 B1 KR100936401 B1 KR 100936401B1
Authority
KR
South Korea
Prior art keywords
field
address
stored
bytecode
field address
Prior art date
Application number
KR1020070104479A
Other languages
English (en)
Other versions
KR20090039067A (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 KR1020070104479A priority Critical patent/KR100936401B1/ko
Priority to JP2010529844A priority patent/JP2011501286A/ja
Priority to US12/514,430 priority patent/US8291391B2/en
Priority to PCT/KR2008/004796 priority patent/WO2009051335A1/en
Publication of KR20090039067A publication Critical patent/KR20090039067A/ko
Application granted granted Critical
Publication of KR100936401B1 publication Critical patent/KR100936401B1/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy 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/22Microcontrol or microprogram arrangements
    • G06F9/24Loading of the microprogram
    • 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
    • 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
    • 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
    • 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/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation

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

본 발명의 자바 바이트코드 변환방법은 자바 클래스 파일로부터 자바 바이트코드를 패치하는 바이트코드 패치단계(S110)와, 패치된 자바 바이트코드의 연산코드가 정적 필드에 접근하기 위한 정적 필드 접근 바이트코드인 경우에, 패치된 바이트코드의 피연산자에 의해 상수 풀을 해석하여 접근하고자 하는 객체의 필드오프셋과 기정해진 값인 정적필드주소를 합하여 제1필드주소(FA1)를 검출하고, 제1필드주소(FA1)에 따라 필드(130)에 접근하여 데이터를 처리하는 정적필드주소검출 및 데이터처리단계(S140)와, 정적필드주소검출 및 데이터처리단계(S140)에서 검출된 제1필드주소(FA1)의 비트들 중 상위비트들로 구성된 제1상위필드주소(FAU1)를 제1저장부(110)에 저장하고, 제1필드주소(FA1)의 비트들 중 제1상위필드주소(FAU1)를 제외한 나머지 하위비트들로 구성된 제1하위필드주소(FAD1)를 피연산자필드(120b)에 저장하는 정적필드주소 저장단계(S150)와, 연산코드필드(120a)에 저장된 연산코드를 사용자에 의해 기설정된 새로운 정적 필드 접근을 위한 연산코드(NOPA)로 변환하는 정적연산코드 변환단계(S160)와, 바이트코드 패치단계(S110)에서 패치된 자바 바이트코드가 정적연산코드 변환단계(S160)에서 변환된 연산코드(NOPA)를 갖는 자바 바이트코드이면 제1저장부(110)에 저장된 제1상위필드주소(FAU1)와 패치된 자바 바이트코드의 피연산자필드(120b)에 저장된 제1하위필드주소(FAD1)를 연결하여 제2필드주소(FA2)를 생성하는 제1필드주소 생성단계(S240)와, 제2필드주소(FA2)에 따라 필드(130)에 접근하여 데이터를 처리하는 제1데이터처리단계(S250)로 구성된 다.
자바 바이트코드, 원시코드, 정적 필드, 객체 필드, 필드주소

Description

자바 바이트코드 변환방법{Java bytecode translating method}
본 발명은 자바 바이트코드 변환방법에 관한 것으로, 특히 자바 바이트코드 중 필드 접근 바이트코드의 수행시 상수 풀(Constant Pool)의 해석과정의 진행 없이 필드 접근 바이트코드를 변환시켜 원시코드(native code)의 수를 현저히 줄일 수 있어 자바 가상 머신의 성능을 향상시킬 수 있는 자바 바이트코드 변환방법에 관한 것이다.
자바는 흔히 자바 가상 머신(Java Virtual Machine)이 해석(interpret)할 수 있는 JVML(Java Virtual Machine Language)이라는 중간 언어로 컴파일(compile)되고, 컴파일된 결과를 클래스 파일(class file)이라 하며, 클래스 파일은 바이트코드(bytecode)들로 구성된다.
자바 가상 머신은 스택 연산(Stack Operation)을 기본으로 하기 때문에 모든 피연산자는 사용되기 전에 스택(Stack)에 저장되고, 연산의 결과도 스택에 저장됨으로써, 자바 가상 머신이 설치된 기반 프로세서(Host Processor)의 레지스터(register)의 개수와 무관하게 작성된 자바 응용프로그램(Java Application)을 수행할 수 있다.
자바 프로그래밍 언어는 C나 C++와 같은 언어로 작성된 코드에 비래 수행 속도가 느리다는 단점이 있으나, 이를 극복하기 위하여 소프트웨어 해석(software interpretation) 방식, JIT(Just-In-Time) 컴파일(compilation) 방식, AOT(Ahead-Of-Time) 컴파일(compilation) 방식 및 하드웨어(hardware) 구현 방식을 사용하고 있다.
소프트웨어 해석 방식은 자원의 제약이 심한 경우에 많이 사용되지만 바이트코드의 해석이 소프트웨어(software)로 수행되기 때문에 수행 속도가 느리며, JIT 컴파일 방식과 AOT 컴파일 방식은 모두 큰 메모리를 요구하는 단점을 가지고 있다.
하드웨어 구현(hardware implementation) 방식은 다른 방식들과 달리 바이트코드의 해석을 하드웨어가 수행함으로써 수행 속도를 높일 수 있고, 많은 메모리를 필요로 하지 않기 때문에 내장형 시스템(Embedded System)에 적합하다.
소프트웨어 해석기(software interpreter)와 하드웨어 해석기(hardware interpreter)를 통칭하여 자바 해석기(Java interpreter)라 하며, 자바 해석기는 각 바이트코드에 대하여 자바 가상 머신이 실행해야 할 코드인 원시코드(native code)를 가지고 있다. 자바 해석기는 바이트코드를 순차적으로 수행하며, 하나의 바이트코드가 패치(fetch)되면 이를 디코딩(decoding)하여 해당 바이트코드와 같은 동작을 수행하는 한 개 혹은 여러 개의 원시코드로써 바이트 코드를 수행한다. 다만 하드웨어 해석기는 실행해야 할 코드를 미리 메모리에 가지고 있다가 이 코드의 위치를 하드웨어적으로 맵핑(mapping) 함으로써 소프트웨어로 매핑 과정을 수행하는 하는 것보다 빠르다.
바이트코드는 수행 동작을 규정하는 연산코드(opcode)와 이에 종속되어 해당 연산코드를 수행할 때 사용되는 피연산자(operand)로 구분된다. 연산코드와 피연산자는 모두 한 바이트로 구성되기 때문에 가능한 연산코드는 총 256개이지만 자바 가상 머신 명세(Java Virtual Machine Specification)에 따르면 연산코드는 202개를 규정하고 있으며 나머지에 대해서는 자바 가상 머신에서 새로운 바이트코드를 정의하여 사용할 수 있도록 한다. 이는 특정 바이트코드를 수행하는 과정에서 해당 연산코드를 자바 가상 머신 명세에 정의되어있지 않은 새로운 연산코드로 변환시킴으로써 정의될 수 있다. 또한, 피연산자 역시 사용자가 원하는 데이터로 변환시켜 줄 수 있다.
자바 응용프로그램을 컴파일하면 각 연산코드의 뒤에 피연산자를 두고 피연산자 뒤에 다음의 연산코드를 두는 방식으로 클래스 파일(class file)이 생성된다. 이때 각 연산코드는 피연산자를 여러 개 갖거나, 갖지 않는 경우도 있다.
자바 응용프로그램을 수행 시 필드에 접근하는 일이 빈번하게 발생하며, 필드 접근과 관련한 바이트코드는 정적 필드 접근과 객체 필드 접근이 있으며, 각각의 경우에 대해 필드에 쓰기와 읽기를 수행하는 바이트코드가 두 가지씩 존재한다. 정적 필드 접근을 위한 바이트코드는 'getstatic'과 'putstatic'으로 정의되고 있으며, 객체 필드 접근을 위한 바이트코드는 'getfield'와 'putfield'로 정의되며, 이들은 모두 두 개의 피연산자를 갖는다.
도 1은 종래의 필드 접근 바이트코드의 처리과정을 나타내는 순서도이다.
도 1에 도시된 바와 같이 종래의 필드 접근 바이트코드의 처리과정은 클래스 파일로부터 바이트코드를 패치하는 바이트코드 패치단계(S1)와, 바이트코드 패치단계(S1)에서 패치된 바이트코드의 연산코드에 의해 패치된 바이트코드가 필드 접근을 위한 바이트코드인지를 판별하는 필드접근 판별단계(S2)와, 필드접근 판별단계(S2)에서 패치된 바이트코드가 필드 접근을 위한 바이트코드가 아니면 해당 바이트코드의 연산코드에 대응하는 핸들러로 점프하여 해당 바이트코드를 수행하는 실행단계(S3)와, 필드접근 판별단계(S2)에서 패치된 바이트코드가 필드 접근을 위한 바이트코드이면 패치된 바이트코드가 정적 필드 접근인지 객체 필드 접근을 위한 바이트코드인지를 판별하는 필드판별단계(S4)와, 필드판별단계(S4)에서 패치된 바이트코드가 정적 필드 접근(getstatic, putstatic)이면 기정해진 자바 가상 머신의 정적필드의 처음 주소인 정적필드주소를 추출하는 정적필드주소 검출단계(S5)와, 필드판별단계(S4)에서 패치된 바이트코드가 객체 필드 접근(getfield, putfield)이면 스택의 최상위에 저장된 객체 참조 데이터에 의해 객체필드의 처음 주소인 객체필드주소를 검출하는 객체필드주소 검출단계(S6)와, 패치된 바이트코드의 피연산자에 의해 상수 풀(Constant Pool)을 해석하여 접근하고자 하는 객체의 필드오프셋(offset)을 검출하는 오프셋 검출단계(S7)와, 오프셋 검출단계(S7)에서 검출된 필드오프셋과 상기 객체필드주소나 정적필드주소를 합하여 최종 필드주소를 산출하는 필드주소 산출단계(S8)와, 필드주소 산출단계(S8)에서 산출된 필드주소에 의한 필드에 접근하여 데이터를 처리하는 데이터 처리단계(S9)로 구성된다.
데이터 처리단계(S9)는 패치된 바이트코드가 getstatic 또는 getfield이면 해당 필드주소의 필드에 저장된 데이터를 스택의 최상위에 저장하거나, 패치된 바 이트코드가 putstatic 또는 putfield이면 스택의 최상위 바로 밑에 저장된 데이터를 해당 필드주소의 필드에 저장한다.
도 1에 도시된 바와 같이 패치된 바이트코드가 필드 접근과 관련한 바이트코드인 경우 반드시 오프셋 검출단계(S7)에서 상수 풀(Constant Pool)을 해석하여 접근하고자 하는 객체의 필드오프셋(offset)을 검출하여야 하며, 이때 상수 풀을 해석하는 과정에서만 통상 수천 개의 원시코드(native code)가 요구되므로 자바 응용프로그램을 수행시키는데 있어 성능 저하가 발생된다.
도 2a 및 도 2b는 도 1의 자바 응용프로그램의 수행시 성능저하를 방지하기 위해 개선된 종래의 자바 바이트코드 변환방법을 나타낸 순서도이고, 도 3은 도 2의 종래의 자바 바이트코드 변환방법에 있어 객체 필드 접근의 getfield를 설명하기 위한 블럭도이다.
도 2a 내지 도 3에 도시된 종래의 자바 바이트코드 변환방법은 필드 접근 바이트코드인 경우 원시코드의 수를 줄이기 위해 SUN Microsystem 사에서 제안된 것으로, 패치된 바이트코드가 필드 접근을 위한 바이트코드인 경우 이들을 새로운 바이트코드(예컨대, 'x_quick', 여기서 x는 getstatic, putstatic, getfield 또는 putfield들 중 하나이다)로 변환시켜 필드 접근을 위한 바이트코드를 처리한다.
즉, 도 2a에 도시된 바와 같이 특정 프로그램 카운터(Program Conter)에서 패치된 바이트코드가 필드 접근을 위한 바이트코드이면(S11), 도 1에 도시된 바와 같이 필드 접근을 위한 바이트코드 처리 과정과 동일하게 바이트코드의 피연산자(operand)로부터 이에 해당하는 상수 풀을 해석하고, 상수 풀 해석에 의해 필드 오프셋(FO)을 검출하여 필드주소(FA) 및 데이터를 처리하고(S13), 필드오프셋(FO)을 바이트코드의 피연산자(1b)의 위치에 저장하고(S15), 바이트코드의 연산코드(OP)를 새로운 연산코드인 'x_quick'으로 변환시킨다(S17). 여기서 x는 getstatic, putstatic, getfield 또는 putfield들 중 하나이다. 이후 변환된 연산코드는 자바 가상 머신에서 'x_quick'으로 인식한다.
도 2b 및 도 3에 도시된 바와 같이 종래의 자바 바이트코드 변환방법은 다음과 같다.
변환된 바이트코드 검출단계(S20)는 패치된 바이트코드(1)의 연산코드(OP)(1a)가 새로 변환된 필드 접근을 위한 바이트코드의 연산코드(1a)인 'x_quick'인지를 검출한다. 변환된 바이트코드 검출단계(S20)에서 바이트코드가 새로 변환된 필드 접근을 위한 바이트코드이면, 필드판별단계(S30)는 패치된 바이트코드가 정적 필드 접근인지 객체 필드 접근을 위한 바이트코드인지를 판별한다. 정적필드주소 검출단계(S40)는 필드판별단계(S30)에서 패치된 바이트코드가 정적 필드 접근(getstatic_quick, putstatic_quick)이면 기정해진 자바 가상 머신의 정적필드의 주소를 추출한다. 객체필드주소 검출단계(S50)는 필드판별단계(S30)에서 패치된 바이트코드가 객체 필드 접근(getfield_quick, putfield_quick)이면 스택(3)의 최상위에 저장된 객체 참조 데이터(OD)에 의해 객체필드주소(5)를 검출한다. 필드주소 산출단계(S60)는 패치된 바이트코드의 피연산자(1b)에 저장된 필드오프셋(FO)과 상기 객체필드주소나 정적필드주소를 합하여 필드주소(FA)를 산출한다. 데이터 처리단계(S70)는 산출된 필드주소(FA)에 의한 필드(7)에 접근하여 필드데이 터(FD)를 처리한다.
도 2a 내지 도 3에 도시된 종래의 자바 바이트코드 변환방법은 필드 접근을 위한 바이트코드 수행시 새로운 바이트코드로 변환된 바이트코드인 경우에는 필드오프셋을 검출하기 위한 상수 풀 해석을 할 필요가 없으므로 도 1에 비해 원시코드의 수를 현저히 줄일 수 있는 장점은 있으나, 종래의 자바 바이트코드 변환방법은 객체 필드 접근을 위한 바이트코드인 경우 스택의 최상위에 위치한 객체 참조 데이터로부터 객체필드주소를 검출하여야 하고, 필드주소를 산출하기 위해 새로이 변환된 바이트코드의 피연산자에 저장된 필드오프셋과 객체필드주소를 합하거나 또는 필드오프셋과 정적필드주소를 합해주어야 하므로 이들의 과정을 수행하기 위해 많은 원시코드가 필요하며, 이로 인해 여전히 자바 응용프로그램의 수행시 성능 저하가 발생되는 문제점을 가지고 있다.
본 발명의 목적은 필드 접근을 위한 바이트코드에 대해서 산출된 필드주소를 바이트코드의 피연산자와 저장부에 나누어 저장한 후 해당 바이트코드의 연산코드를 기설정된 연산코드로 변환시키고, 기설정된 연산코드에 대응되는 필드 접근을 위한 바이트코드가 패치되면 피연산자와 저장부에 저장된 데이터에 의한 필드주소에 의해 필드에 접근하여 데이터를 처리하여 정적 필드 접근 및 객체 필드 접근을 위한 필드주소를 신속히 산출할 수 있고, 필드주소 산출시 요구되는 원시코드의 수를 적게 하여 자바 응용프로그램의 수행시 성능 향상을 이룰 수 있는 자바 바이트코드 변환방법을 제공하는 데 있다.
상기의 목적을 달성하기 위하여 본 발명의 자바 바이트코드 변환방법은 자바 클래스 파일로부터 연산코드가 저장된 연산코드필드와 피연산자가 저장된 피연산자필드로 이루어진 자바 바이트코드를 패치하는 바이트코드 패치단계; 상기 바이트코드 패치단계에서 패치된 자바 바이트코드의 연산코드가 정적 필드에 접근하기 위한 정적 필드 접근 바이트코드인 경우에, 상기 패치된 바이트코드의 피연산자에 의해 상수 풀을 해석하여 접근하고자 하는 객체의 필드오프셋과 기정해진 값인 정적필드주소를 합하여 제1필드주소를 검출하고, 상기 제1필드주소에 따라 필드에 접근하여 데이터를 처리하는 정적필드주소검출 및 데이터처리단계; 상기 정적필드주소검출 및 데이터처리단계에서 검출된 상기 제1필드주소의 비트들 중 상위비트들로 구성된 제1상위필드주소를 제1저장수단에 저장하고, 상기 제1필드주소의 비트들 중 제1상위필드주소를 제외한 나머지 하위비트들로 구성된 제1하위필드주소를 상기 피연산자필드에 저장하는 정적필드주소 저장단계; 상기 연산코드필드에 저장된 연산코드를 사용자에 의해 기설정된 새로운 정적 필드 접근을 위한 연산코드로 변환하는 정적연산코드 변환단계; 상기 바이트코드 패치단계에서 패치된 자바 바이트코드가 상기 정적연산코드 변환단계에서 변환된 연산코드를 갖는 자바 바이트코드이면 상기 제1저장수단에 저장된 제1상위필드주소와 패치된 자바 바이트코드의 피연산자필드에 저장된 제1하위필드주소를 연결하여 제2필드주소를 생성하는 제1필드주소 생성단계; 및 상기 제2필드주소에 따라 필드에 접근하여 데이터를 처리하는 제1데이터처리단계를 구비한 것을 특징으로 한다.
상기의 목적을 달성하기 위하여 본 발명의 자바 바이트코드 변환방법은 자바 클래스 파일로부터 연산코드가 저장된 연산코드필드와 피연산자가 저장된 피연산자필드로 이루어진 자바 바이트코드를 패치하는 바이트코드 패치단계; 상기 바이트코드 패치단계에서 패치된 자바 바이트코드의 연산코드가 객체 필드에 접근하기 위한 객체 필드 접근 바이트코드인 경우에, 상기 패치된 바이트코드의 피연산자에 의해 상수 풀을 해석하여 접근하고자 하는 객체의 필드오프셋과 스택의 최상위에 저장된 제1객체참조데이터에 의한 객체필드주소를 합하여 제3필드주소를 검출하고, 상기 제3필드주소에 따라 필드에 접근하여 데이터를 처리하는 객체필드주소검출 및 데이터처리단계; 상기 제1객체참조데이터와 상기 필드오프셋을 제2저장수단에 저장하는 필드오프셋 및 객체참조데이터 저장단계; 상기 객체필드주소검출 및 데이 터처리단계에서 검출된 상기 제3필드주소의 비트들 중 상위비트들로 구성된 제2상위필드주소를 제3저장수단에 저장하고, 상기 제3필드주소의 비트들 중 제2상위필드주소를 제외한 나머지 하위비트들로 구성된 제2하위필드주소를 상기 피연산자필드에 저장하는 제2필드주소 저장단계; 상기 연산코드필드에 저장된 연산코드를 사용자에 의해 기설정된 새로운 객체 필드 접근을 위한 연산코드로 변환하는 객체연산코드 변환단계; 상기 바이트코드 패치단계에서 패치된 자바 바이트코드가 상기 객체연산코드 변환단계에서 변환된 연산코드를 갖는 자바 바이트코드이면 상기 제2저장수단에 저장된 제1객체참조데이터와 스택의 최상위에 저장된 현재의 객체참조데이터가 동일한지를 비교하는 비교단계; 상기 비교단계에서 상기 제1객체참조데이터와 스택의 최상위에 저장된 현재의 객체참조데이터가 동일하면, 상기 제3저장수단에 저장된 제2상위필드주소와 패치된 자바 바이트코드의 피연산자필드에 저장된 제2하위필드주소를 연결하여 제4필드주소를 생성하는 제2필드주소 생성단계; 상기 제4필드주소에 따라 필드에 접근하여 데이터를 처리하는 제2데이터처리단계; 상기 비교단계에서 상기 제1객체참조데이터와 스택의 최상위에 저장된 현재의 객체참조데이터가 동일하지 않으면, 상기 스택의 최상위에 저장된 현재의 객체참조데이터로부터 객체필드주소를 검출하고, 검출된 객체필드주소와 상기 제2저장수단에 저장된 필드오프셋을 합하여 제5필드주소를 생성하는 제3필드주소 생성단계; 및 상기 제5필드주소에 따라 필드에 접근하여 데이터를 처리하는 제3데이터처리단계를 구비한 것을 특징으로 한다.
본 발명의 자바 바이트코드 변환방법은 정적 필드 접근 및 객체 필드 접근을 위한 바이트코드에 대해서 산출된 필드주소를 바이트코드의 피연산자와 저장부에 나누어 저장한 후 해당 바이트코드의 연산코드를 기설정된 연산코드로 변환시키고, 기설정된 연산코드에 대응되는 필드 접근을 위한 바이트코드가 패치되면 피연산자와 저장부에 저장된 데이터에 의한 필드주소에 의해 필드에 접근하여 데이터를 처리하여 정적 필드 접근 및 객체 필드 접근을 위한 필드주소를 신속히 산출할 수 있고, 필드주소 산출시 요구되는 원시코드의 수를 적게 하여 자바 응용프로그램의 수행시 성능을 향상시킬 수 있다.
이하, 첨부된 도면을 참조하여 본 발명의 자바 바이트코드 변환방법을 상세히 설명하고자 한다.
도 4a 및 도 4b는 발명의 정적 필드 접근을 위한 자바 바이트코드 변환방법과 이를 처리하는 과정의 순서도이고, 도 5a 및 도 5b는 본 발명의 정적 필드 접근을 위한 자바 바이트코드 변환방법을 설명하기 위한 블럭도이다.
도 4a 내지 도 5b에 도시된 바와 같이 본 발명의 자바 바이트코드 변환방법은 자바 클래스 파일로부터 연산코드가 저장된 연산코드필드와 피연산자가 저장된 피연산자필드로 이루어진 자바 바이트코드를 패치하는 바이트코드 패치단계(S110)와, 바이트코드 패치단계(S110)에서 패치된 자바 바이트코드의 연산코드가 정적 필드에 접근하기 위한 정적 필드 접근 바이트코드인 경우에, 패치된 바이트코드의 피연산자에 의해 상수 풀을 해석하여 접근하고자 하는 객체의 필드오프셋과 기정해진 값인 정적필드주소를 합하여 제1필드주소(FA1)를 검출하고, 제1필드주소(FA1)에 따라 필드(130)에 접근하여 데이터를 처리하는 정적필드주소검출 및 데이터처리단계(S140)와, 정적필드주소검출 및 데이터처리단계(S140)에서 검출된 제1필드주소(FA1)의 비트들 중 상위비트들로 구성된 제1상위필드주소(FAU1)를 제1저장부(110)에 저장하고, 제1필드주소(FA1)의 비트들 중 제1상위필드주소(FAU1)를 제외한 나머지 하위비트들로 구성된 제1하위필드주소(FAD1)를 피연산자필드(120b)에 저장하는 정적필드주소 저장단계(S150)와, 연산코드필드(120a)에 저장된 연산코드를 사용자에 의해 기설정된 새로운 정적 필드 접근을 위한 연산코드(NOPA)로 변환하는 정적연산코드 변환단계(S160)와, 바이트코드 패치단계(S110)에서 패치된 자바 바이트코드가 정적연산코드 변환단계(S160)에서 변환된 연산코드(NOPA)를 갖는 자바 바이트코드이면 제1저장부(110)에 저장된 제1상위필드주소(FAU1)와 패치된 자바 바이트코드의 피연산자필드(120b)에 저장된 제1하위필드주소(FAD1)를 연결하여 제2필드주소(FA2)를 생성하는 제1필드주소 생성단계(S240)와, 제2필드주소(FA2)에 따라 필드(130)에 접근하여 데이터를 처리하는 제1데이터처리단계(S250)로 구성된다.
제1필드주소(FA1)가 32비트인 경우 제1상위필드주소(FAU1)는 상위 16비트들로 이루어진 데이터이고, 제1하위필드주소(FAD1)는 하위 16비트들로 이루어진 데이터이다.
제1저장부(110)는 임시저장메모리, 메모리 또는 레지스터들 중 어느 하나로 구성된다.
도 6a 및 도 6b는 발명의 객체 필드 접근을 위한 자바 바이트코드 변환방법 과 이를 처리하는 과정의 순서도이고, 도 7a 및 도 7b는 본 발명의 객체 필드 접근을 위한 자바 바이트코드 변환방법을 설명하기 위한 블럭도이다.
도 6a 내지 도 7b에 도시된 바와 같이 본 발명의 자바 바이트코드 변환방법은 자바 클래스 파일로부터 연산코드가 저장된 연산코드필드와 피연산자가 저장된 피연산자필드로 이루어진 자바 바이트코드를 패치하는 바이트코드 패치단계(S310)와, 바이트코드 패치단계(S310)에서 패치된 자바 바이트코드의 연산코드가 객체 필드에 접근하기 위한 객체 필드 접근 바이트코드인 경우에, 패치된 바이트코드의 피연산자에 의해 상수 풀을 해석하여 접근하고자 하는 객체의 필드오프셋(FOi)과 스택(240)의 최상위에 저장된 제1객체참조데이터(ODi)에 의한 객체필드주소를 합하여 제3필드주소(FA3)를 검출하고, 제3필드주소(FA3)에 따라 필드(230)에 접근하여 데이터를 처리하는 객체필드주소검출 및 데이터처리단계(S340)와, 제1객체참조데이터(ODi)와 필드오프셋(FOi)을 제2저장부(210a)에 저장하는 필드오프셋 및 객체참조데이터 저장단계(S350)와, 객체필드주소검출 및 데이터처리단계(S340)에서 검출된 제3필드주소(FA3)의 비트들 중 상위비트들로 구성된 제2상위필드주소(FAU2)를 제3저장부(210b)에 저장하고, 제3필드주소(FA3)의 비트들 중 제2상위필드주소(FAU2)를 제외한 나머지 하위비트들로 구성된 제2하위필드주소(FAD2)를 피연산자필드(220b)에 저장하는 제2필드주소 저장단계(S360)와, 연산코드필드(220a)에 저장된 연산코드를 사용자에 의해 기설정된 새로운 객체 필드 접근을 위한 연산코드(NOPB)로 변환하는 객체연산코드 변환단계(S390)와, 바이트코드 패치단계(S310)에서 패치된 자바 바이트코드가 객체연산코드 변환단계(S390)에서 변환된 연산코드(NOPB)를 갖는 자바 바이트코드이면 제2저장부(210a)에 저장된 제1객체참조데이터(ODi)와 스택(240)의 최상위에 저장된 현재의 객체참조데이터(COD)가 동일한지를 비교하는 비교단계(S440)와, 비교단계(S440)에서 제1객체참조데이터(ODi)와 스택(240)의 최상위에 저장된 현재의 객체참조데이터(COD)가 동일하면, 제3저장부(210b)에 저장된 제2상위필드주소(FAU2)와 패치된 자바 바이트코드의 피연산자필드(220b) 저장된 제2하위필드주소(FAD2)를 연결하여 제4필드주소(FA4)를 생성하는 제2필드주소 생성단계(S450)와, 제4필드주소(FA4)에 따라 필드(230)에 접근하여 데이터를 처리하는 제2데이터처리단계(S460)와, 비교단계(S440)에서 제1객체참조데이터(ODi)와 스택(240)의 최상위에 저장된 현재의 객체참조데이터(COD)가 동일하지 않으면, 스택(240)의 최상위에 저장된 현재의 객체참조데이터(COD)로부터 객체필드주소를 검출하고 검출된 객체필드주소와 제2저장부(210a)에 저장된 필드오프셋(FOi)을 합하여 제5필드주소(FA5)를 생성하는 제3필드주소 생성단계(S470)와, 제5필드주소(FA5)에 따라 필드(230)에 접근하여 데이터를 처리하는 제3데이터처리단계(S480)로 구성된다.
상기 도 6a 내지 도 7b에 도시된 본 발명의 자바 바이트코드 변환방법은, 제1객체참조데이터(ODi)와 필드오프셋(FOi)을 제2저장부(210a)의 특정위치에 저장시키고 제2저장부(210a)의 특정위치에 저장된 제1객체참조데이터(ODi)와 필드오프셋(FOi)을 선택하기 위한 제1선택데이터(S1)를 피연산자필드(220b)에 저장하는 제1선택데이터 저장단계(S370)와 제2상위필드주소(FAU2)를 제3저장부(210b)의 특정위치에 저장시키고 제3저장부(210b)의 특정위치에 저장된 제2상위필드주소(FAU2)를 선택하기 위한 제2선택데이터(S2)를 피연산자필드(220b)에 저장하는 제2선택데이터 저장단계(S380)를 더 구비할 수 있다.
제3필드주소(FA3)가 32비트인 경우 제2상위필드주소(FAU2)는 상위 16비트들로 이루어진 데이터이고, 제2하위필드주소(FAD2)는 하위 16비트들로 이루어진 데이터로 구성될 수 있고, 또는 제3필드주소(FA3)가 32비트인 경우 제2상위필드주소(FAU2)는 상위 21비트들로 이루어진 데이터이고, 제2하위필드주소(FAD2)는 하위 11비트들로 이루어진 데이터이고, 제1선택데이터(S1)는 3비트들로 이루어진 데이터이고, 제2선택데이터(S2)는 2비트로 이루어진 데이터로 구성될 수 있다.
제2,제3저장부(210a,210b)는 임시저장메모리, 메모리 또는 레지스터들 중 어느 하나로 구성될 수 있다.
상기의 구성에 따른 본 발명인 자바 바이트코드 변환방법의 동작은 다음과 같다.
자바 필드 접근과 관련한 바이트코드는 정적 필드 접근을 위한 바이트코드와 객체 필드 접근을 위한 바이트코드가 있으며, 정적 필드 접근을 위한 바이트코드는 'getstatic'과 'putstatic'이 있으며, 객체 필드 접근을 위한 바이트코드는 'getfield'와 'putfield'가 있다.
도 4a 내지 도 5b는 본 발명의 정적 필드 접근을 위한 자바 바이트코드 변환방법에 관한 것으로, 본 발명의 정적 필드 접근을 위한 자바 바이트코드 변환방법의 동작은 다음과 같다.
도 4a 및 도 5b에 도시된 바와 같이 바이트코드 패치단계(S110)는 자바 클래스 파일로부터 연산코드가 저장된 연산코드필드와 피연산자가 저장된 피연산자필드로 이루어진 자바 바이트코드를 패치한다.
정적필드주소검출 및 데이터처리단계(S140)는 바이트코드 패치단계(S110)에서 패치된 자바 바이트코드의 연산코드가 정적 필드에 접근하기 위한 정적 필드 접근 바이트코드인 경우에, 즉, 연산코드가 'getstatic' 또는 'putstatic'이면, 종래와 동일하게 패치된 바이트코드의 피연산자에 의해 상수 풀을 해석하여 접근하고자 하는 객체의 필드오프셋과 기정해진 값인 정적필드주소를 합하여 제1필드주소(FA1)를 산출한다. 정적 필드 접근을 위한 바이트코드가 패치되는 프로그램 카운터가 같다면 산출되는 정적 필드 접근을 위한 필드주소는 항상 동일한 값을 갖는다. 산출된 제1필드주소(FA1)에 따라 필드(130)에 접근하여 'getstatic' 또는 'putstatic'의 연산코드에 따라 제1필드주소(FA1)에 해당하는 필드(130)에 저장된 필드데이터(FD)를 스택(140)의 최상위에 저장하거나, 스택(140)의 최상위 아래에 저장된 데이터를 제1필드주소(FA1)에 해당하는 주소의 필드(130)에 저장한다.
정적필드주소 저장단계(S150)는 제1필드주소(FA1)의 비트들 중 상위 16비트들인 제1상위필드주소(FAU1)를 임시저장메모리, 메모리 또는 레지스터들 중 어느 하나로 구성된 제1저장부(110)에 저장하고, 제1필드주소(FA1)의 나머지 하위 16비트들인 제1하위필드주소(FAD1)를 피연산자필드(120b)에 저장한다. 즉, 정적 필드 접근을 위한 최종 필드주소는 32비트이므로 이를 16비트인 피연산자필드에 저장할 수 없으므로 제1저장부(110)에는 제1필드주소(FA1)의 상위 16비트인 제1상위필드주 소(FAU1)를 저장하고, 제1필드주소(FA1)의 하위 16비트인 제1하위필드주소(FAD1)는 패치된 바이트코드(120)의 피연산자필드(120b)에 저장한다.
정적연산코드 변환단계(S160)는 연산코드필드(120a)에 저장된 'getstatic' 또는 'putstatic'의 연산코드를 사용자에 의해 기설정된 새로운 정적 필드 접근을 위한 연산코드(NOPA)인 'getstatic_new' 또는 'putstatic_new'로 변환시킨다.
제1필드주소 생성단계(S240)는 바이트코드 패치단계(S110)에서 패치된 자바 바이트코드가 정적연산코드 변환단계(S160)에서 변환된 연산코드(NOPA)를 갖는 자바 바이트코드이면 제1저장부(110)에 저장된 제1상위필드주소(FAU1)와 패치된 자바 바이트코드의 피연산자필드(120b)에 저장된 제1하위필드주소(FAD1)를 연결하여 제2필드주소(FA2)를 생성하고, 제1데이터처리단계(S250)는 제2필드주소(FA2)에 따라 필드(130)에 접근하여 데이터를 처리한다.
따라서 본 발명의 정적 필드 접근을 위한 바이트코드가 바이트코드 패치단계(S110)에서 처음에 패치되면 종래와 같은 방법으로 상수 풀 해석을 통해 제1필드주소(FA1)를 산출하여 데이터 처리한 후 제1필드주소(FA1)를 제1저장부(110)와 패치된 바이트코드의 피연산자필드에 나누어 저장하고, 연산코드필드를 새로운 연산코드로 변환시킨 후 바이트코드 패치단계(S110)에서 새로운 연산코드로 변환된 바이트코드가 패치되면 제1저장부(110)에 저장된 제1상위필드주소(FAU1)와 패치된 바이트코드의 피연산자필드(120b)의 피연산자인 제1하위필드주소(FAD1)를 연결(concatenation)하여 제2필드주소(FA2)를 생성하고, 생성된 제2필드주소(FA2)에 따라 필드(130)에 접근하여 데이터를 처리함으로써 종래와는 달리 필드주소를 신속 히 산출할 수 있다. 즉, 도 2a 및 도 2b에 도시된 바와 같이 종래의 경우 상수 풀 해석을 통해 산출된 필드오프셋과 검출된 정적필드주소를 합하여 최종 필드주소를 산출하였으나, 본 발명의 경우 바이트코드가 패치되는 프로그램 카운터가 같다면 산출되는 정적 필드 접근을 위한 필드주소는 동일하므로, 동일한 필드주소인 제1필드주소(FA1)의 상위 16비트를 제1저장부(110)에 저장하고, 하위 16비트를 피연산자필드(120b)에 저장하고 필요시 이를 연결하여 신속하게 최종필드주소인 제2필드주소(FA2)를 산출할 수 있다.
하드웨어 해석기가 프로그램 카운터의 갱신을 관장하는 경우, 도 5b에 도시된 'getstatic_new'의 바이트코드 명령을 수행하기 위해 제2필드주소(FA2)로부터 필드(130)에 저장된 필드데이터(FD)를 읽고 스택(140)의 최상위에 필드데이터(FD)를 저장하고, 스택 포인터(stack pointer)를 갱신하는 3개의 원시코드(native code)가 요구되며, 만약 하드웨어 해석기가 스택 포인터의 갱신까지도 관장할 경우에는 2개의 원시코드가 요구되므로, 종래에 비해 바이트코드 명령 수행을 위해 요구되는 원시코드의 수를 줄일 수 있으므로 자바 응용프로그램의 수행시 성능을 향상시킬 수 있다.
도 6a 내지 도 7b는 본 발명의 객체 필드 접근을 위한 자바 바이트코드 변환방법에 관한 것으로, 본 발명의 객체 필드 접근을 위한 자바 바이트코드 변환방법의 동작은 다음과 같다.
동적 필드 접근을 위한 바이트코드인 'getfield' 및 'putfield'는 패치되는 프로그램 카운터가 동일하더라도 스택(240)의 최상위에 존재하는 객체참조데이 터(object reference data)가 달라질 수 있기 때문에 정적 필드 접근을 위한 바이트코드와는 다르게 처리하여야 한다.
도 6a 및 도 7a에 도시된 바와 같이 바이트코드 패치단계(S310)는 자바 클래스 파일로부터 연산코드가 저장된 연산코드필드와 피연산자가 저장된 피연산자필드로 이루어진 자바 바이트코드를 패치한다. 객체필드주소검출 및 데이터처리단계(S340)는 바이트코드 패치단계(S310)에서 패치된 자바 바이트코드의 연산코드가 객체 필드에 접근하기 위한 객체 필드 접근 바이트코드인 'getfield' 또는 'putfield'이면, 종래의 방법과 동일하게 패치된 바이트코드의 피연산자에 의해 상수 풀을 해석하여 접근하고자 하는 객체의 필드오프셋(FOi)과 스택(240)의 최상위에 저장된 제1객체참조데이터(ODi)에 의한 객체필드주소를 합하여 제3필드주소(FA3)를 검출하고, 제3필드주소(FA3)에 따라 필드(230)에 접근하여 데이터를 처리한다.
필드오프셋 및 객체참조데이터 저장단계(S350)는 제1객체참조데이터(ODi)와 필드오프셋(FOi)을 제2저장부(210a)에 저장하고, 제2필드주소 저장단계(S360)는 객체필드주소검출 및 데이터처리단계(S340)에서 검출된 제3필드주소(FA3)의 비트들 중 상위비트들로 구성된 제2상위필드주소(FAU2)를 제3저장부(210b)에 저장하고, 제3필드주소(FA3)의 비트들 중 제2상위필드주소(FAU2)를 제외한 나머지 하위비트들로 구성된 제2하위필드주소(FAD2)를 피연산자필드(220b)에 저장한다.
제3필드주소(FA3)가 32비트인 경우 정적 필드 접근과 동일하게 제2상위필드주소(FAU2)는 상위 16비트들로 이루어진 데이터이고, 제2하위필드주소(FAD2)는 하 위 16비트들로 이루어진 데이터로 구성될 수도 있고, 또는 제2저장부(210a)와 제3저장부(210b)에 각각 저장되는 제1객체참조데이터(ODi)와 필드오프셋(FOi)과 제2상위필드주소(FAU2)들의 수에 따라 제2상위필드주소(FAU2)와 제2하위필드주소(FAD2)의 비트들의 크기는 상이하다. 예를 들어 도 6a에 도시된 바와 같이 제2저장부(210a)에 저장될 수 있는 엔트리(entry)의 수를 8개로 설정하고, 제3저장부(210b)에 저장될 수 있는 엔트리의 수를 4개로 설정할 경우에는, 물론 이러한 엔트리의 수는 사용자에 의해 결정되는 값으로, 제2저장부(210a)로 저장되는 필드오프셋(FOi)과 제1객체참조데이터(ODi)는 각각 8개씩 저장될 수 있으며, 저장되는 위치의 엔트리를 결정하기 위해서 3비트들로 구성된 제1선택데이터(S1)가 필요하고, 제3저장부(210b)로 저장되는 제2상위필드주소(FAU2)가 3개일 경우에는 저장되는 위치의 엔트리를 결정하기 위해서 2비트들로 구성된 제2선택데이터(S2)가 필요하며, 이경우에는 피연산자필드(120b)에 제1,제2선택데이터(S1,S2)를 저장하여야 하므로 피연산자필드(120b)에는 5비트들인 제1,제2선택데이터(S1,S2)를 제외한 11비트들만 저장될 수 있으므로 제2하위필드주소(FAD2)는 제3필드주소(FA3)의 하위 11비트들로 구성된 데이터이고, 제2상위필드주소(FAU2)는 상위 21비트들로 이루어진 데이터로 구성된다.
제1선택데이터 저장단계(S370)는 제1객체참조데이터(ODi)와 필드오프셋(FOi)을 제2저장부(210a)의 특정위치에 저장하고, 제2저장부(210a)의 특정위치에 저장된 제1객체참조데이터(ODi)와 필드오프셋(FOi)을 선택하기 위한 제1선택데이터(S1)를 피연산자필드(220b)에 저장하고, 제2선택데이터 저장단계(S380)는 제2상위필드주 소(FAU2)를 제3저장부(210b)의 특정위치에 저장하고, 제3저장부(210b)의 특정위치에 저장된 제2상위필드주소(FAU2)를 선택하기 위한 제2선택데이터(S2)를 피연산자필드(220b)에 저장한다.
객체연산코드 변환단계(S390)는 연산코드필드(220a)에 저장된 연산코드인 'getfield' 또는 'putfield'는 사용자에 의해 기설정된 새로운 객체 필드 접근을 위한 연산코드(NOPB)인 'getfield_new' 또는 'putfield_new'로 변환시킨다.
도 6b 및 도 7b에 도시된 바와 같이 비교단계(S440)는 바이트코드 패치단계(S310)에서 패치된 자바 바이트코드가 객체연산코드 변환단계(S390)에서 변환된 연산코드(NOPB)를 갖는 자바 바이트코드이면(S420), 즉 앞서 객체연산코드 변환단계(S390)에서 변환된 연산코드(NOPB)를 갖는 프로그램 카운터와 동일한 프로그램 카운터를 패치하는 경우, 제2저장부(210a)에 저장된 제1객체참조데이터(ODi)와 스택(240)의 최상위에 저장된 현재의 객체참조데이터(COD)가 동일한지를 비교한다.
바이트코드 패치단계(S310)에서 패치된 자바 바이트코드가 객체연산코드 변환단계(S390)에서 변환된 연산코드(NOPB)를 갖는 자바 바이트코드가 아니면, 종래의 바이트코드 변환방법과 동일한 방법에 따라 수행한다(S430).
비교단계(S440)에서 제1객체참조데이터(ODi)와 스택(240)의 최상위에 저장된 현재의 객체참조데이터(COD)가 동일하면, 최종 필드주소는 객체필드주소검출 및 데이터처리단계(S340)에서 검출된 제3필드주소(FA3)와 동일하므로, 제2필드주소 생성단계(S450)는 제3저장부(210b)에 저장된 21비트들로 구성된 제2상위필드주소(FAU2)와 패치된 자바 바이트코드의 피연산자필드(220b) 저장된 11비트들로 구성된 제2하 위필드주소(FAD2)를 연결하여 제4필드주소(FA4)를 생성하고, 제2데이터처리단계(S460)는 제4필드주소(FA4)에 따라 필드(230)에 접근하여 데이터를 처리한다. 즉, 비교단계(S440)에서 제1객체참조데이터(ODi)와 현재의 객체참조데이터(COD)가 동일하면 도 4a의 정적 필드 접근을 위한 자바 바이트코드 변환방법과 동일하게 저장부에 저장된 상위필드주소와 피연산자필드에 저장된 하위필드주소와 연결하여 필드 접근을 위한 최종 필드주소를 생성한다.
제3필드주소 생성단계(S470)는 비교단계(S440)에서 제2저장부(210a)에 저장된 제1객체참조데이터(ODi)와 스택(240)의 최상위에 저장된 현재의 객체참조데이터(COD)가 동일하지 않으면, 객체필드주소검출 및 데이터처리단계(S340)에서 검출된 제3필드주소(FA3)와 객체 필드 접근을 위한 패치된 변환된 연산코드를 갖는 바이트코드의 최종 필드 주소는 상이하므로, 최종 필드 주소인 제5필드주소(FA5)를 생성하기 위해 스택(240)의 최상위에 저장된 현재의 객체참조데이터(COD)로부터 객체필드주소를 검출하고, 검출된 객체필드주소와 제2저장부(210a)에 저장된 필드오프셋(FOi)을 합하여 제5필드주소(FA5)를 생성한다.
제3데이터처리단계(S480)는 제5필드주소(FA5)에 따라 필드(230)에 접근하여 데이터를 처리한다.
비교단계(S440)와 제3필드주소 생성단계(S470)에서 각각 제2저장부(210a)에 저장된 제1객체참조데이터(ODi)와 필드오프셋(FDi)를 제2저장부(210a)로부터 꺼내올 경우에는 패치된 바이트코드의 피연산자필드(220b)에 저장된 제1선택데이터(S1)의 데이터의 논리값에 따라 결정된다. 즉, 제1선택데이터의 논리값이 011이면 제2 저장부(210a)로부터 제2저장부(210a)의 4번째의 엔트리에 저장된 제1객체참조데이터(OD4)와 필드오프셋(FD4)을 꺼내서 처리한다.
상기와 동일하게 제2필드주소 저장단계(S360)에서 제3저장부(210b)에 저장된 제3필드주소(FA3)의 제2상위필드주소(FAU2)를 제3저장부(210b)로부터 가져올 때에는 제2선택데이터(S2)의 데이터 논리값에 따라 결정되는 엔트리의 위치에 저장된 제2상위필드주소(FAU2)를 가져온다. 예를 들어 제2선택데이터(S2)가 10이면 제3저장부(210b)의 3번째 엔트리에 저장된 제2상위필드주소(FAU2b)를 가져와서 피연산필드(220b)에 저장된 제2하위필드주소(FAD2)와 연결하여 최종 필드주소인 제4필드주소(FA4)를 생성한다.
제2저장부(210a) 및 제3저장부(210b)는 임시저장메모리, 메모리 또는 레지스터들 중 어느 하나로 구성될 수 있다.
따라서, 도 6a 내지 도 7b에 도시된 본 발명의 객체 필드 접근을 위한 자바 바이트코드 변환방법은 특정 프로그램 카운터에서 패치된 객체 필드 접근을 위한 바이트코드의 처리시 스택(240)의 최상위에 존재하는 현재의 객체참조데이터(COD)와 필드오프셋 및 객체참조데이터 저장단계(S350)에서 제2저장부(210a)에 저장된 제1객체참조데이터(ODi)가 동일할 경우에는 패치된 피연산자필드에 저장된 제2하위필드주소(FAD2)와 제3저장부(210b)에 저장된 제2상위필드주소(FAU2)를 연결하여 필드 접근을 위한 최종 필드주소인 제4필드주소(FA4)를 신속하게 생성할 수 있고, 이에 요구되는 원시코드의 수를 줄일 수 있고, 현재의 객체참조데이터(COD)와 제1객체참조데이터(ODi)가 동일하지 않을 경우에는 제2저장부(210a)에 저장된 필드오프 셋(FDi)을 현재의 객체참조데이터(COD)로부터 검출된 객체필드주소를 합하여 필드 접근을 위한 최종 필드주소인 제5필드주소(FA5)를 용이하게 생성할 수 있다.
본 발명의 자바 바이트코드 변환방법은 도 4a 및 도 4b의 정적 필드 접근을 위한 자바 바이트코드 변환방법과 도 6a 및 도 6b의 객체 필드 접근을 위한 자바 바이트코드 변환방법을 함께 구현할 수도 있으며, 이를 위해서는 바이트코드 패치단계(S110, S210, S310, S410)에서 바이트코드를 패치한 후 도 1 및 도 2b에 도시된 바와 같이 패치된 바이트코드가 객체 필드 접근인지 정적 필드 접근에 관한 것인지를 판별하는 필드판별단계가 더 필요하다. 또한, 이 경우 제1저장부(110)와 제2저장부(210a)를 별도로 구성할 필요가 없이 하나의 저장부로 구성할 수도 있다.
도 2a 및 도 2b에 의한 종래의 자바 바이트코드 변환방법과 본 발명에 의한 자바 바이트코드 변환방법을 기반 프로세서에 하드웨어 해석기를 내장시키고, 이를 보조하는 소프트웨어 해석기로 휴대용 기기를 타겟으로 만들어진 와바 가상 머신(Waba Virtual Machine)을 사용한 경우에 대해서 각각 요구되는 원시코드의 수를 비교하면 다음과 같다.
바이트코드 getstatic의 경우 요구되는 원시코드의 수 putstatic의 경우 요구되는 원시코드의 수 getfield의 경우 요구되는 원시코드의 수 putfield의 경우 요구되는 원시코드의 수
종래의 경우 37 38 59 61
본 발명의 경우 3 3 23 26
상기 표 1에서 객체 필드 접근을 위한 'getfield' 및 'putfield'의 바이트코드를 수행하기 위해서는 제2저장부(210a)에 접근하여 제1객체참조데이터(ODi)와 스택(240)의 최상위의 현재의 객체참조데이터(COD)가 동일한지를 비교하여야 하므로 정적 필드 접근을 위한 'getstatic' 및 'putstatic'의 바이트코드를 수행하는 경우에 비해 많은 원시코드가 필요하다는 것을 알 수 있으며, 본 발명의 자바 바이트코드 변환방법에 의한 바이트코드 수행시 종래의 경우에 비해 요구되는 원시코드의 수는 현저하게 줄어들었음을 알 수 있다.
따라서 본 발명의 자바 바이트코드 변환방법은 정적 필드 접근 및 객체 필드 접근을 위한 필드주소를 생성하기 위해 요구되는 원시코드의 수를 적게 할 수 있고, 이로 인해 자바 응용프로그램의 수행시 성능을 향상시킬 수 있다.
도 1은 종래의 필드 접근을 자바 바이트코드의 처리과정을 나타내는 순서도,
도 2a 및 도 2b는 종래의 필드 접근을 위한 자바 바이트코드 변환방법을 나타낸 순서도,
도 3은 도 2a 및 도 2b의 종래의 자바 바이트코드 변환방법을 설명하기 위한 구성도,
도 4a 및 도 4b는 동적 필드 접근을 위한 본 발명의 자바 바이트코드 변환방법과 이를 처리하는 과정의 순서도,
도 5a 및 도 5b는 동적 필드 접근을 위한 본 발명의 자바 바이트코드 변환방법을 설명하기 위한 구성도,
도 6a 및 도 6b는 객체 필드 접근을 위한 본 발명의 자바 바이트코드 변환방법과 이를 처리하는 과정의 순서도,
도 7a 및 도 7b는 객체 필드 접근을 위한 본 발명의 자바 바이트코드 변환방법을 설명하기 위한 구성도이다.

Claims (9)

  1. 자바 클래스 파일로부터 연산코드가 저장된 연산코드필드와 피연산자가 저장된 피연산자필드로 이루어진 자바 바이트코드를 패치하는 바이트코드 패치단계(S110);
    상기 바이트코드 패치단계에서 패치된 자바 바이트코드의 연산코드가 정적 필드에 접근하기 위한 정적 필드 접근 바이트코드인 경우에, 상기 패치된 바이트코드의 피연산자에 의해 상수 풀을 해석하여 접근하고자 하는 객체의 필드오프셋과 기정해진 값인 정적필드주소를 합하여 제1필드주소를 검출하고, 상기 제1필드주소에 따라 필드에 접근하여 데이터를 처리하는 정적필드주소검출 및 데이터처리단계(S140);
    상기 정적필드주소검출 및 데이터처리단계(S140)에서 검출된 상기 제1필드주소의 비트들 중 상위비트들로 구성된 제1상위필드주소를 제1저장수단에 저장하고, 상기 제1필드주소의 비트들 중 제1상위필드주소를 제외한 나머지 하위비트들로 구성된 제1하위필드주소를 상기 피연산자필드에 저장하는 정적필드주소 저장단계(S150);
    상기 연산코드필드에 저장된 연산코드를 사용자에 의해 기설정된 새로운 정적 필드 접근을 위한 연산코드로 변환하는 정적연산코드 변환단계(S160);
    상기 바이트코드 패치단계에서 패치된 자바 바이트코드가 상기 정적연산코드 변환단계에서 변환된 연산코드를 갖는 자바 바이트코드이면 상기 제1저장수단에 저 장된 제1상위필드주소와 패치된 자바 바이트코드의 피연산자필드에 저장된 제1하위필드주소를 연결하여 제2필드주소를 생성하는 제1필드주소 생성단계(S240); 및
    상기 제2필드주소에 따라 필드에 접근하여 데이터를 처리하는 제1데이터처리단계(S250)를 구비한 것을 특징으로 하는 자바 바이트코드 변환방법.
  2. 제 1 항에 있어서, 상기 제1필드주소가 32비트인 경우 상기 제1상위필드주소는 상위 16비트들로 이루어진 데이터이고, 상기 제1하위필드주소는 하위 16비트들로 이루어진 데이터인 것을 특징으로 하는 자바 바이트코드 변환방법.
  3. 제 1 항에 있어서, 상기 제1저장수단은 임시저장메모리, 메모리 또는 레지스터들 중 어느 하나인 것을 특징으로 하는 자바 바이트코드 변환방법.
  4. 자바 클래스 파일로부터 연산코드가 저장된 연산코드필드와 피연산자가 저장된 피연산자필드로 이루어진 자바 바이트코드를 패치하는 바이트코드 패치단계(S310);
    상기 바이트코드 패치단계(S310)에서 패치된 자바 바이트코드의 연산코드가 객체 필드에 접근하기 위한 객체 필드 접근 바이트코드인 경우에, 상기 패치된 바 이트코드의 피연산자에 의해 상수 풀을 해석하여 접근하고자 하는 객체의 필드오프셋과 스택의 최상위에 저장된 제1객체참조데이터에 의한 객체필드주소를 합하여 제3필드주소를 검출하고, 상기 제3필드주소에 따라 필드에 접근하여 데이터를 처리하는 객체필드주소검출 및 데이터처리단계(S340);
    상기 제1객체참조데이터와 상기 필드오프셋을 제2저장수단에 저장하는 필드오프셋 및 객체참조데이터 저장단계(S350);
    상기 객체필드주소검출 및 데이터처리단계(S340)에서 검출된 상기 제3필드주소의 비트들 중 상위비트들로 구성된 제2상위필드주소를 제3저장수단에 저장하고, 상기 제3필드주소의 비트들 중 제2상위필드주소를 제외한 나머지 하위비트들로 구성된 제2하위필드주소를 상기 피연산자필드에 저장하는 제2필드주소 저장단계(S360);
    상기 연산코드필드에 저장된 연산코드를 사용자에 의해 기설정된 새로운 객체 필드 접근을 위한 연산코드로 변환하는 객체연산코드 변환단계(S390);
    상기 바이트코드 패치단계에서 패치된 자바 바이트코드가 상기 객체연산코드 변환단계(S390)에서 변환된 연산코드를 갖는 자바 바이트코드이면 상기 제2저장수단에 저장된 제1객체참조데이터와 스택의 최상위에 저장된 현재의 객체참조데이터가 동일한지를 비교하는 비교단계(S440);
    상기 비교단계(S440)에서 상기 제1객체참조데이터와 스택의 최상위에 저장된 현재의 객체참조데이터가 동일하면, 상기 제3저장수단에 저장된 제2상위필드주소와 패치된 자바 바이트코드의 피연산자필드에 저장된 제2하위필드주소를 연결하여 제4 필드주소를 생성하는 제2필드주소 생성단계(S450);
    상기 제4필드주소에 따라 필드에 접근하여 데이터를 처리하는 제2데이터처리단계(S460);
    상기 비교단계(S440)에서 상기 제1객체참조데이터와 스택의 최상위에 저장된 현재의 객체참조데이터가 동일하지 않으면, 상기 스택의 최상위에 저장된 현재의 객체참조데이터로부터 객체필드주소를 검출하고, 검출된 객체필드주소와 상기 제2저장수단에 저장된 필드오프셋을 합하여 제5필드주소를 생성하는 제3필드주소 생성단계(S470); 및
    상기 제5필드주소에 따라 필드에 접근하여 데이터를 처리하는 제3데이터처리단계(S480)를 구비한 것을 특징으로 하는 자바 바이트코드 변환방법.
  5. 제 4 항에 있어서, 상기 제1객체참조데이터와 필드오프셋을 상기 제2저장수단의 특정위치에 저장시키고, 상기 제2저장수단의 특정위치에 저장된 제1객체참조데이터와 필드오프셋을 선택하기 위한 제1선택데이터를 상기 피연산자필드에 저장하는 제1선택데이터 저장단계(S370)를 더 구비한 것을 특징으로 하는 자바 바이트코드 변환방법.
  6. 제 5 항에 있어서, 상기 제2상위필드주소를 상기 제3저장수단의 특정위치에 저장시키고, 상기 제3저장수단의 특정위치에 저장된 제2상위필드주소를 선택하기 위한 제2선택데이터를 상기 피연산자필드에 저장하는 제2선택데이터 저장단계(S380)를 더 구비한 것을 특징으로 하는 자바 바이트코드 변환방법.
  7. 제 4 항에 있어서, 상기 제3필드주소가 32비트인 경우 상기 제2상위필드주소는 상위 16비트들로 이루어진 데이터이고, 상기 제2하위필드주소는 하위 16비트들로 이루어진 데이터인 것을 특징으로 하는 자바 바이트코드 변환방법.
  8. 제 6 항에 있어서, 상기 제3필드주소가 32비트인 경우 상기 제2상위필드주소는 상위 21비트들로 이루어진 데이터이고, 상기 제2하위필드주소는 하위 11비트들로 이루어진 데이터이고, 상기 제1선택데이터는 3비트들로 이루어진 데이터이고, 상기 제2선택데이터는 2비트로 이루어진 데이터인 것을 특징으로 하는 자바 바이트코드 변환방법.
  9. 제 4 항에 있어서, 상기 제2,제3저장수단은 임시저장메모리, 메모리 또는 레지스터들 중 어느 하나인 것을 특징으로 하는 자바 바이트코드 변환방법.
KR1020070104479A 2007-10-17 2007-10-17 자바 바이트코드 변환방법 KR100936401B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020070104479A KR100936401B1 (ko) 2007-10-17 2007-10-17 자바 바이트코드 변환방법
JP2010529844A JP2011501286A (ja) 2007-10-17 2008-08-19 ジャババイトコード変換方法
US12/514,430 US8291391B2 (en) 2007-10-17 2008-08-19 Java bytecode translating method
PCT/KR2008/004796 WO2009051335A1 (en) 2007-10-17 2008-08-19 Java bytecode translating method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020070104479A KR100936401B1 (ko) 2007-10-17 2007-10-17 자바 바이트코드 변환방법

Publications (2)

Publication Number Publication Date
KR20090039067A KR20090039067A (ko) 2009-04-22
KR100936401B1 true KR100936401B1 (ko) 2010-01-12

Family

ID=40567556

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070104479A KR100936401B1 (ko) 2007-10-17 2007-10-17 자바 바이트코드 변환방법

Country Status (4)

Country Link
US (1) US8291391B2 (ko)
JP (1) JP2011501286A (ko)
KR (1) KR100936401B1 (ko)
WO (1) WO2009051335A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8819649B2 (en) * 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation
US8997042B2 (en) * 2012-10-15 2015-03-31 Pivotal Software, Inc. Flexible and run-time-modifiable inclusion of functionality in computer code
CN113835620B (zh) * 2021-08-13 2024-05-24 北京握奇智能科技有限公司 一种提高安全芯片应用执行效率的方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030192037A1 (en) * 2002-04-03 2003-10-09 International Business Machines Corporation Statically detecting externally referenced interfaces of a program
US20050160415A1 (en) * 2004-01-17 2005-07-21 Samsung Electronics Co., Ltd. Method and system for improving performance of Java virtual machine
US20060070049A1 (en) * 2004-09-24 2006-03-30 Samsung Electronics Co., Ltd. Java bytecode translation method and Java interpreter performing the same

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5875336A (en) * 1997-03-31 1999-02-23 International Business Machines Corporation Method and system for translating a non-native bytecode to a set of codes native to a processor within a computer system
US7263722B1 (en) * 1999-05-12 2007-08-28 Fraunhofer Crcg, Inc. Obfuscation of executable code
KR20020028814A (ko) * 2000-10-10 2002-04-17 나조미 커뮤니케이션즈, 인코포레이티드 마이크로코드 엔진을 이용한 자바 하드웨어 가속기
JP2002215387A (ja) * 2001-01-22 2002-08-02 Mitsubishi Electric Corp 命令トランスレータを備えたデータ処理装置およびメモリインタフェース装置
KR100763177B1 (ko) * 2005-04-21 2007-10-04 삼성전자주식회사 자바 가상 머신의 명령어 수행 방법 및 그 장치

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030192037A1 (en) * 2002-04-03 2003-10-09 International Business Machines Corporation Statically detecting externally referenced interfaces of a program
US20050160415A1 (en) * 2004-01-17 2005-07-21 Samsung Electronics Co., Ltd. Method and system for improving performance of Java virtual machine
US20060070049A1 (en) * 2004-09-24 2006-03-30 Samsung Electronics Co., Ltd. Java bytecode translation method and Java interpreter performing the same
KR100597413B1 (ko) 2004-09-24 2006-07-05 삼성전자주식회사 자바 바이트코드 변환 방법 및 상기 변환을 수행하는 자바인터프리터

Also Published As

Publication number Publication date
US8291391B2 (en) 2012-10-16
KR20090039067A (ko) 2009-04-22
US20100064276A1 (en) 2010-03-11
JP2011501286A (ja) 2011-01-06
WO2009051335A1 (en) 2009-04-23

Similar Documents

Publication Publication Date Title
US11385872B2 (en) Extending a virtual machine instruction set architecture
EP2324424B1 (en) Apparatus and method for handling page protection faults in a computing system
US6965984B2 (en) Data processing using multiple instruction sets
TWI541661B (zh) 用於藉由較少位元來表示處理器上下文的方法和裝置
EP3427148B1 (en) Load module compiler
US9336125B2 (en) Systems and methods for hardware-assisted type checking
US7823140B2 (en) Java bytecode translation method and Java interpreter performing the same
US20050160415A1 (en) Method and system for improving performance of Java virtual machine
US7996833B2 (en) Method and system for replacing instructions and instruction blocks in computer code
US7089539B2 (en) Program instruction interpretation
KR100936401B1 (ko) 자바 바이트코드 변환방법
US7032230B2 (en) Efficient virtual function calls for compiled/interpreted environments
US20060026387A1 (en) Method and system for recognizing instructions and instruction blocks in computer code
JP2004538556A (ja) 複数命令セットシステムにおける非処理操作処理
US20070156386A1 (en) Linearization of page based memory for increased performance in a software emulated central processing unit
US9342319B1 (en) Accelerated class check
US6934726B2 (en) Storing and retrieving of field descriptors in Java computing environments
KR20040044655A (ko) 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법
EP1451681B1 (en) System and method for low overhead boundary checking of java arrays
US7606997B1 (en) Method and system for using one or more address bits and an instruction to increase an instruction set
Kim et al. Accelerating Java Interpretation in Low-Cost Embedded Processors
CN115803721A (zh) 装置和方法
WO2002048864A2 (en) System registers for an object-oriented processor

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
LAPS Lapse due to unpaid annual fee