KR20040044655A - 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법 - Google Patents

자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법 Download PDF

Info

Publication number
KR20040044655A
KR20040044655A KR1020020072753A KR20020072753A KR20040044655A KR 20040044655 A KR20040044655 A KR 20040044655A KR 1020020072753 A KR1020020072753 A KR 1020020072753A KR 20020072753 A KR20020072753 A KR 20020072753A KR 20040044655 A KR20040044655 A KR 20040044655A
Authority
KR
South Korea
Prior art keywords
loop
bytecode
virtual machine
statement
java virtual
Prior art date
Application number
KR1020020072753A
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 한국전자통신연구원
Priority to KR1020020072753A priority Critical patent/KR20040044655A/ko
Publication of KR20040044655A publication Critical patent/KR20040044655A/ko

Links

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/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • 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

Landscapes

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

Abstract

본 발명은 자바 가상머신(java virtual machine)에서 자바 프로그램에 포함되어 있는 루프 문(loop statement)을 처리할 수 있는 새로운 바이트코드(bytecode)를 정의하고 그 수행 방법에 관한 것으로, 자바 프로그램의 루프 문은 자바 컴파일러를 통과한 후, 루프 조건을 검사하고 분기하기 위하여 스택 연산을 포함하는 일련의 바이트코드들로 변환되며, 자바가상머신에서는 변환된 바이트코드를 루프 횟수만큼 중복 수행하게 된다.
본 발명은 자바 언어로 작성된 파일을 컴파일해서 생성된 바이트코드로 된 클래스 파일을 실행하기 위한 자바 가상머신에 있어서, 상기 자바 가상머신내에서 상기 클래스파일을 읽어들여 수행하면서 소정의 알고리즘에 따라 루프 문이 수행되는지 검사하는 루프 문 검사단계; 상기 루프 문이 검출되면 새로운 루프 바이트코드로 변경해주고, 루프 테이블을 생성하는 루프 처리단계; 및 상기 루프 문 검사단계와 상기 루프 처리단계를 반복하여 중첩된 모든 루프에 대해 루프 테이블을 완성하고, 상기 루프 테이블을 상기 자바 가상머신에 제공하여 바이트코드를 실행하는 실행단계;를 통해 루프 바이트코드를 생성하고 수행한다.

Description

자바 가상머신에서 루프 문 처리를 위해 바이트코드를 생성 및 수행하는 방법{Method of generating bytecodes for loop in java virtual machine and processing the bytecodes}
본 발명은 자바 가상머신(java virtual machine)에 관한 것으로, 상세하게는 자바 가상머신에서 루프 문을 수행하기 위해 새로운 루프 바이트 코드(bytecode)를 정의하고 이를 이용하여 자바 가상머신(JVM)의 성능 개선을 할 수 있는 자바 가상머신에서 루프 문 처리를 위한 바이트코드 생성 및 그 수행방법에 관한 것이다.
일반적으로, 자바 프로그램에서 루프 문은 제어변수의 초기 값을 설정해주고 조건이 만족할 때까지 제한 변수의 값을 증가 또는 감소시키면서 루프 문 안에 있는 프로그램 코드를 실행시킨다. 또한 중첩된 루프를 수행하는 경우에는 외곽 루프(outer loop)가 한번 수행될 때마다 내부 루프(inner loop)의 전체가 매번 동일하게 수행한다.
그러나 자바 가상머신(JVM)에서는 이런 루프 문을 처리하는 직접적인 바이트코드가 존재하지 않으므로, 종래에 루프 문을 수행할 경우에는 필요한 제어변수 값을 처리하기 위한 적재(Load)와 저장(Store) 등의 몇 개의 동일한 바이트코드를 반복적으로 인터프리트해서 스택 기반의 연산을 수행한다.
도 1은 일반적인 자바 프로그램의 전체 처리과정을 도시한 개략도이다. 도면을 참조하면, 자바 언어로 작성된 자바 소스 프로그램(10)은 "xxx.java"라는 파일명으로 저장되는데, 이러한 자바 언어로 작성된 소스 프로그램(10)이 자바 컴파일러(20)에 의해 컴파일되면 바이트코드(Bytecode)로 된 "xxx.class" 파일이 생성된다.
바이트코드는 1바이트의 명령코드(OPcode)와 각 명령코드에 따라 다양한 크기로 수반되는 오퍼랜드로 이루어진다. 바이트코드의 명령코드(OPcode)는 1바이트이므로 256개의 명령코드(OPcode)가 가능하나 실제로는 0~201번까지 의미가 정의되고, 203번부터 228번까지는 퀵(quick) 명령어로 정의하였고, 나머지는 유보되어 있다.
이와 같이 생성된 바이트코드 파일(xxx.class)은 자바 가상머신(30)에 의해 인터프리트 방식으로 수행된다. 이때 자바 언어에서는 자바 가상머신(30)에서 수행되는 바이트코드라는 개념을 도입하여 플랫폼에 종속되지 않는 장점이 있으며, 자바 가상머신(30)은 유닉스(40-1)나 윈도우(40-2), 매킨토시(40-3) 등 다양한 플랫폼상에 구현되어 바이트코드를 수행한다.
도 2는 자바 가상머신에서의 일반적인 루프 문의 수행 과정을 나타낸 흐름도이다.
도면을 참조하면, 루프 문이 포함되어 있는 자바 소스 프로그램(10)을 컴파일하면 클래스 파일이 생성되는데, 자바 가상머신(30)은 이 클래스 파일을 읽어 들여서 각각의 인스트럭션(OPcode)을 인터프리터하여 수행한다.
단계(S10)에서는 인터프리터된 인스트럭션(OPcode)이 루프의 제어변수를 초기하기 위해 값을 스택에 넣고, 로컬 변수에 초기 값을 저장하는 바이트코드들을 수행한다.
이어 제어변수에 대한 초기화 과정이 수행되면, 루프 문의 조건식을 비교하기 위해 "goto 번지" 바이트코드를 수행한다(S20).
goto의 분기 주소로 이동한 후에 로컬 변수에서 제어변수의 값과 루프 문 안의 조건식의 값을 비교한다. 비교 결과가 참(true: Y)이면 루프 문 안의 블록을 수행하는 곳으로 프로그램 카운터를 이동한다. 만약, 결과가 거짓(false: N)이면 루프의 수행은 끝이 난다(S50).
비교 결과가 참(Y)인 경우에는 루프 문 안의 블록들을 수행시켜준다(S30).
이어, 루프 문 안의 블록문을 수행한 후에 제어변수를 스택에 넣고, 증가 또는 감소하는 바이트코드를 수행하며 증가 또는 감소된 제어변수를 저장하는 바이트코드를 수행한다(S40).
루프 문의 조건식을 검사하기 위한 일련의 바이트코드들을 수행하고, 비교결과가 참(Y)이면 다시 루프 문 안의 블록을 수행하고, 거짓(N)이면 루프의 수행은 끝이 난다.
이와 같이 종래에는 루프의 실행 횟수만큼 루프에 관련된 몇 개의 동일한 바이트코드들이 반복하여 수행되고, 스택과 로컬 변수에 대한 연산이 많이 이루어진다. 즉, 종래에는 루프의 실행 횟수가 커질수록, 중첩되는 루프의 수가 많아질수록 자바 가상머신의 성능이 저하되는 문제점이 있다.
따라서, 새로운 바이트코드를 사용해서 자바 가상머신 내부에서 루프 문을수행한다면 종래의 방법으로 수행될 때 발생하는 오버헤드를 많이 줄일 수 있을 것이다.
본 발명은 상기와 같은 필요성을 충족시키기 위하여 자바 가상머신 명세(Spec)에 정의되지 않은 예약 바이트코드(reserved bytecode)를 이용하여 새로운 루프 바이트코드를 정의하고, 자바 가상머신 내부에서 새롭게 정의된 바이트코드를 수행하여 자바 가상머신의 성능을 개선하는 자바 가상머신에서 루프 문 처리를 위한 바이트코드 생성 및 그 수행 방법을 제공하는데 그 목적이 있다.
즉, 본 발명은 외부 사용자에게 영향을 미치지 않는 범위 내에서 바이트코드를 확장하여 루프에 관련된 몇 개의 동일한 바이트코드를 루프의 실행 횟수 만큼 인터프리트해서 스택 기반의 연산을 반복적으로 수행하는 비효율성을 줄인 것이다.
상기 목적을 달성하기 위한 본 발명의 일 실시 예에 따르면, 자바 가상머신내에서 루프 문이 수행되는지 검사해서 새로운 루프 바이트코드로 변경해주는 루프 처리기와, 상기 루프 처리기에서 수행하는데 필요한 단일 루프와 중첩된 루프의 정보를 포함하는 루프 테이블을 자바 가상머신에서 제공한다.
본 발명의 목적을 달성하기 위한 다른 실시 예에 따르면, 자바 언어로 작성된 파일을 컴파일해서 생성된 바이트코드로 된 클래스 파일을 실행하기 위한 자바 가상머신에 있어서, 상기 자바 가상머신내에서 상기 클래스파일을 읽어들여 수행하면서 소정의 알고리즘에 따라 루프 문이 수행되는지 검사하는 루프 문 검사단계;상기 루프 문이 검출되면 새로운 루프 바이트코드로 변경해주고, 루프 테이블을 생성하는 루프 처리 단계; 및 상기 루프 문 검사단계와 상기 루프 처리단계를 반복하여 중첩된 모든 루프에 대해 루프 테이블을 완성하고, 상기 루프 테이블을 상기 자바 가상머신에 제공하여 바이트코드를 실행하는 실행단계를 포함하는 것을 특징으로 한다.
여기서, 상기 루프 바이트코드(Floop)는, 바이트코드의 유보영역을 이용하여 정의되고, 오퍼랜드들은 제어변수 초기화 값(init), 제어 변수의 증가 또는 감소 값(increment), 조건식의 경계 값(bound), 제어변수의 로컬 인덱스 값(local_index)으로 이루어지고, 상기 루프 테이블은 외곽 루프와 내부 루프로 된 다수의 엔트리로 이루어지고, 각 엔트리는 루프 바이트코드(Floop)와 루프안에서 수행되는 바이트코드 블록으로 이루어진다.
그리고 상기 실행단계는, 바이트코드를 디코드하는 단계; 상기 디코드된 바이트코드가 루프 바이트코드(Floop)인 경우에 루프 바이트코드(Floop)를 수행하는 단계; 및 상기 루프 바이트코드(Floop)의 오퍼랜드로부터 조건식을 판별하여 루프 문 안의 블록을 반복 수행하는 단계;를 통해 실행하게 된다.
도 1은 일반적인 자바 프로그램의 전체 처리과정을 도시한 개략적인 구성도,
도 2는 종래의 자바 가상머신에서의 루프 문 블록의 수행 과정을 도시한 순서도,
도 3은 본 발명에 따라 자바 프로그램을 처리하는 전체 과정을 도시한 개략적인 구성도,
도 4는 본 발명에 따라 루프 문을 포함하고 있는 자바 프로그램을 루프 바이트코드로 변경해주는 루프 처리기(loop processor)의 절차를 도시한 순서도,
도 5는 본 발명에 따른 루프 오퍼랜드(operand)와 루프문안에서 수행될 블록(block)에 관한 정보를 포함하고 있는 루프 테이블(loop table)의 구성도,
도 6은 본 발명의 바람직한 실시 예에 따른 Floop 바이트코드가 자바 가상머신에서 수행되는 과정을 도시한 순서도.
* 도면의 주요부분에 대한 부호의 설명 *
310: 자바 소스 프로그램320: 자바 컴파일러
330: 루프 처리기340: 자바 가상머신
350-1~350-3: 플랫폼
이하, 본 발명의 바람직한 실시 예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 3은 본 발명에 따라 자바 프로그램을 처리하는 전체 과정을 도시한 개략도이다.
도면을 참조하면, 본 발명은 자바 언어로 작성된 자바소스 프로그램(310)은 "xxx.java"라는 파일명으로 저장되는데, 이러한 자바 언어로 작성된 소스 프로그램(310)이 자바 컴파일러(320)에 의해 컴파일되면 바이트코드(Bytecode)로 된 "xxx1.class" 파일이 생성된다. 이 바이트코드는 1바이트의 명령코드(Opcode)와 각 명령코드에 따라 다양한 크기로 수반되는 오퍼랜드로 이루어진다.
이와 같이 생성된 바이트코드 파일(xxx1.class)에는 종래와 같이 루프에 관련된 몇 개의 동일한 바이트코드를 루프의 실행 횟수 만큼 인터프리트해서 스택 기반의 연산을 반복적으로 수행하는 방식으로 되어 있어 비효율적이다.
따라서 본 발명에 따라 루프 문을 새로 정의된 루프 바이트코드(Floop)로 변환해주는 루프 처리기(330)는 후술하는 도 4와 같은 절차를 수행하여 자바 컴파일러(320)에 의해 생성된 바이트코드 파일(xxx1.class)을 처리하여 새로운 바이트코드 파일(xxx2.class)을 생성하고, 자바 가상머신(340)은 루프 처리기(330)에 의해 처리된 바이트코드 파일(xxx2.class)을 다양한 플랫폼(350-1~350-3)상에서 수행한다.
이때 루프 처리기(330)에 의해 처리된 바이트코드 파일(xxx2.class)은 자바 가상머신(340)에 의해 보다 효율적으로 수행될 수 있으며, 루프 처리기(330)는 자바 가상머신(340) 안에 포함되어 구현된다.
도 4는 본 발명에 따라 자바 가상머신에서 일련의 바이트코드가 루프 문을 수행하기 위한 것인가를 검사하고, 그 결과 루프 문의 수행을 위한 것이면 "Floop"라는 새로운 바이트코드로 변경해주는 루프 처리기의 수행과정이 도시되어 있다.
도 4를 참조하면, 본 발명은 우선 루프 문을 포함하고 있는 자바 프로그램을 컴파일해서 생성된 클래스 파일(xxx1.class)을 읽어 들인다. 클래스 파일을 읽어 들여 루프 문이 수행되고 있는지 검사한다(S401). 이때, 루프 문을 수행하는지 검사하는 방법은 다음과 같다.
첫번째, 루프의 제어 변수의 초기화를 위해 스택에서 값을 푸쉬하여 로컬 변수에 저장하는 바이트코드와 goto 바이트코드가 있는지 검사한다.
두번째, goto 바이트코드의 분기 번지로 점프하여 제어 변수의 값을 로컬변수에 적재하고 조건문에서 비교되는 값을 가져오는 바이트코드가 있는지 검사한다.
위의 두 조건을 만족하면, 두 개의 변수를 비교하여 분기하는 바이트코드를 검사한다.
세번째, 두번째에서 분기되는 번지로 프로그램 카운터를 옮긴 후 루프 문 안에 있는 블록들을 수행한다. 블록들이 모두 수행된 후에 제어변수가 증가 또는 감소되는 지 검사한다.
네번째, 위의 조건을 모두 만족하면 루프 문을 포함한 프로그램이 수행되는 바이트코드이므로, 이들을 "Floop" 바이트코드와 오퍼랜드(operand)들로 변경한다.
다섯번째, 루프 문 안에서 수행되는 블록에서 또 다른 루프 문을 수행하기 위한 바이트코드들이 있는지, 즉 중첩된 루프가 있는지를 상기 첫번째 단계부터 네번째 단계까지 반복해서 검사한다.
만약, 중첩된 루프이면 "Floop" 바이트코드로 바꾸어주고, 다시 한번 내부루프 문 안에서 수행되는 블록중에 루프 문을 수행하는 바이트코드가 있는지 검사한다.
여섯번째, 이와 같이 중첩된 루프가 있는지 계속 검사를 해주며, 만약 루프를 형성하는 바이트코드들이 없으면 루프 처리기를 종료한다.
루프 문이 수행되면 위의 4번째 과정에서와 같이 Floop 바이트코드와 오퍼랜드들로 클래스 파일을 변경한다(S402).
그리고 위의 5번째 과정에서와 같이 루프 문 안에 루프 문이 있는 경우 즉, 중첩된 루프가 있는지 검사하기 위해서 루프 문 안의 블록에 대해서 다시 루프 문이 있는지 검사한다(S403).
만약, 루프 문 안의 블록에 루프 문이 있는 경우는 다시 "Floop" 바이트코드와 오퍼랜드로 변경해 준다. 만약, 루프 문 안에 루프 문이 없는 경우는 루프 처리기(330)의 동작을 멈춘다.
이와 같은 루프 처리기(330)는 기존의 자바 가상머신(340)에서 루프 문을 수행하는 성능 개선을 지원하기 위한 것으로써, 클래스 로더의 "인증(verification)" 단계 또는 자바 가상머신(340)의 인터프리터에서 실제로 바이트코드를 수행시켜줄 때 한번만 수행되어 본 발명에서 제안한 새로운 바이트코드로 대치해준다.
이와 같은 본 발명의 방법을 위해, 현재 수행될 자바 가상머신(340)에서는 새롭게 정의된 Floop 바이트코드의 길이, Floop에 필요한 오퍼랜드들, 수행할 기능에 대해서 정의해주어야 한다.
다음 표 1은 본 발명에 따라 새롭게 정의된 Floop 명령코드와 오퍼랜드의 예이다.
<형식> Floop init,increment,bound,local_index<오퍼랜드 설명>init:제어변수의 초기값increment: 제어변수의 증가 또는 감소값bound: 루프 문에서 조건식의 경계값local_index: 제어변수의 로컬 인덱스값
도 5는 상술한 도 4에서 사용하는 루프 테이블에 관한 구성도이다.
도면을 참조하면, 루프 테이블(510)은 루프 검사에서 생성된 외곽루프(512)와, 중첩된 루프 검사시에 생성된 N개의 내부루프(514-1~514-N)로 이루어지고, 각 루프는 Floop 바이트코드(520)와, 루프안에서 수행되는 바이트코드의 블록(530)으로 이루어진다.
즉, 루프 테이블(510)은 루프 검사와 중첩된 루프 검사 시에 Floop에 관한 오퍼랜드와 루프 문 안에서 수행될 블록에 대한 정보를 저장하는 테이블이다. 따라서 클래스 파일을 읽어 들인 후에 루프 문이 수행되어 Floop 바이트코드로 변경시켜 주는 경우에, 이 테이블에 있는 정보를 사용해서 클래스 파일을 변경시켜 준다.
그리고 제어변수의 초기화, 저장, 분기, 제어변수의 증가와 감소, 제어변수의 적재와 조건 값을 저장, 비교 등과 같이 루프 문을 수행하는 바이트코드가 루프처리기의 검사에 의해서 발견되면 Floop 바이트코드로 변경시켜 준다. 이 때, Floop 바이트코드를 수행하기 위한 오퍼랜드들도 같이 넣어준다.
Floop 인스트럭션을 수행하기 위해서 필요한 오퍼랜드들은 제어변수 초기화값(init), 제어 변수의 증가 또는 감소 값(increment), 조건식의 경계 값(bound), 제어변수의 로컬 인덱스 값(local_index)을 넣어준다.
제어 변수의 로컬 인덱스 값(local_index)은 루프 문 안의 블록에서 제어변수를 사용하는 바이트코드가 제어변수의 값을 변경할 경우, 변경된 제어변수의 값이 루프의 실행 횟수에 영향을 주므로 Floop 바이트코드에 직접 반영하기 위해서 사용된다.
또한 중첩된 루프를 수행하는 경우에도 위에서 설명한 바와 같이, 동일한 과정을 거쳐 Floop 바이트코드와 오퍼랜드들로 변경된다. 즉, 루프 테이블(510)의 각각의 엔트리(514-1~514-N)에 저장되어 있는 Floop 바이트코드의 오퍼랜드(520)와 루프 문 안에서 수행될 블록(530)에 관한 정보를 사용하여 변경시켜준다. 중첩된 루프인 경우에는 자바 가상머신에서 수행될 때 재귀적으로 Floop 바이트코드를 수행하기 때문에 위에서 설명한 바와 같이 동일하게 변경시켜준다.
이와 같이 본 발명에 따라 생성된 Floop 바이트코드의 수행 과정을 도 6과 같이 본 발명에서 제시한 루프 처리기(330)를 통하여 변경된 클래스 파일에서 Floop 바이트코드를 수행한다(S601).
이어 Floop 바이트코드의 오퍼랜드를 디코드한 결과를 기반으로 루프의 실행 횟수만큼 루프 문 안의 블록을 반복 수행한다(S602).
이상에서 설명한 바와 같이, 본 발명에서는 자바 프로그램에서 루프를 수행할 때 루프의 실행 횟수만큼 반복적으로 수행되는 바이트코드들의 비효율성을 개선하는 방법을 제시하였다. 본 발명에 따른 방법은 자바 가상머신에서 새로 정의할 수 있는 바이트코드 영역을 이용하여 루프 바이트코드를 추가하고, 이와 같이 새로운 바이트코드를 추가함으로서 기계어 코드로 변환하는 플랫폼에 의존적인 복잡한 방법 대신 루프 처리기를 사용해 자바 가상머신 내부에서 처리해주는 간단한 방법으로 자바 가상머신의 성능을 개선할 수 있다. 특히, 본 발명은 루프의 실행 횟수가 많고 중첩된 루프인 경우에 많은 오버헤드를 줄일 수 있어 자바 가상머신의 성능을 대폭적으로 개선을 할 수 있다.
이상에서 설명한 것은 본 발명에 따른 자바 가상머신에서 루프 문 처리를 위한 바이트코드 생성 및 그 수행 방법을 설명한 하나의 실시 예에 불과한 것으로써, 본 발명은 상기한 실시 예에 한정되지 않고, 이하의 특허청구범위에서 청구하는 본 발명의 요지를 벗어남이 없이 당해 발명이 속하는 분야에서 통상의 지식을 가진 자라면 누구든지 다양한 변경 실시가 가능한 범위까지 본 발명의 기술적 사상이 미친다고 할 것이다.

Claims (5)

  1. 자바 언어로 작성된 파일을 컴파일해서 생성된 바이트코드로 된 클래스 파일을 실행하기 위한 자바 가상머신에 있어서,
    상기 자바 가상머신내에서 상기 클래스파일을 읽어들여 수행하면서 소정의 알고리즘에 따라 루프 문이 수행되는지 검사하는 루프 문 검사단계;
    상기 루프 문이 검출되면 새로운 루프 바이트코드로 변경해주고, 루프 테이블을 생성하는 루프 처리단계; 및
    상기 루프 문 검사단계와 상기 루프 처리단계를 반복하여 중첩된 모든 루프에 대해 루프 테이블을 완성하고, 상기 루프 테이블을 상기 자바 가상머신에 제공하여 바이트코드를 실행하는 실행단계;를 포함하는 것을 특징으로 하는 자바 가상머신에서 루프 문 처리를 위해 바이트코드를 생성 및 수행하는 방법.
  2. 제 1항에 있어서, 상기 루프 문 검사단계는
    루프의 제어 변수의 초기화를 위해 스택에서 값을 푸쉬하여 로컬 변수에 저장하는 바이트코드와 goto 바이트코드가 있는지 검사하는 제 1단계;
    상기 goto 바이트코드의 분기 번지로 점프하여 제어 변수의 값을 로컬변수에 적재하고 조건문에서 비교되는 값을 가져오는 바이트코드가 있는지 검사하는 제 2단계;
    상기 제 1 및 제 2단계의 조건을 만족하면, 두 개의 변수를 비교하여 분기하는 바이트코드를 검사하는 제 3단계;
    상기 제2 단계에서 분기되는 번지로 프로그램 카운터를 옮긴 후 루프 문 안에 있는 블록들을 수행하면서 제어변수가 증가 또는 감소되는지 검사하는 제 4단계; 및
    상기 제 1 내지 제 4단계의 조건을 모두 만족하면 루프 문으로 판정하는 제 5단계;로 이루어진 것을 특징으로 하는 자바 가상머신에서 루프 문 처리를 위해 바이트코드를 생성 및 수행하는 방법.
  3. 제 1항에 있어서, 상기 루프 바이트코드(Floop)는
    바이트코드의 유보영역을 이용하여 정의되고, 오퍼랜드들은 제어변수 초기화 값(init), 제어 변수의 증가 또는 감소 값(increment), 조건식의 경계 값(bound), 제어변수의 로컬 인덱스 값(local_index)으로 이루어진 것을 특징으로 하는 자바 가상머신에서 루프 문 처리를 위해 바이트코드를 생성 및 수행하는 방법.
  4. 제 1항에 있어서, 상기 루프 테이블은
    외곽 루프와 내부 루프로 된 다수의 엔트리로 이루어지고, 각 엔트리는 루프 바이트코드(Floop)와, 루프안에서 수행되는 바이트코드 블록으로 이루어진 것을 특징으로 하는 자바 가상머신에서 루프 문 처리를 위해 바이트코드를 생성 및 수행하는 방법.
  5. 제 1항에 있어서, 상기 실행단계는
    바이트코드를 디코드하는 단계;
    상기 디코드된 바이트코드가 루프 바이트코드(Floop)인 경우에 루프 바이트코드(Floop)를 수행하는 단계; 및
    상기 루프 바이트코드(Floop)의 오퍼랜드로부터 조건식을 판별하여 루프 문 안의 블록을 반복 수행하는 단계;로 이루어진 것을 특징으로 하는 자바 가상머신에서 루프 문 처리를 위해 바이트코드를 생성 및 수행하는 방법.
KR1020020072753A 2002-11-21 2002-11-21 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법 KR20040044655A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020020072753A KR20040044655A (ko) 2002-11-21 2002-11-21 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020020072753A KR20040044655A (ko) 2002-11-21 2002-11-21 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법

Publications (1)

Publication Number Publication Date
KR20040044655A true KR20040044655A (ko) 2004-05-31

Family

ID=37340677

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020020072753A KR20040044655A (ko) 2002-11-21 2002-11-21 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법

Country Status (1)

Country Link
KR (1) KR20040044655A (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100577366B1 (ko) * 2004-09-25 2006-05-10 삼성전자주식회사 이종의 자바 메소드를 실행하는 방법 및 장치
KR100597413B1 (ko) * 2004-09-24 2006-07-05 삼성전자주식회사 자바 바이트코드 변환 방법 및 상기 변환을 수행하는 자바인터프리터
KR20110122574A (ko) * 2010-05-04 2011-11-10 (주)로보티즈 중간언어 생성기를 포함한 로봇 프로그래밍 툴과 그 중간 언어 코드를 수행할 수 있는 버츄얼 머신을 기반으로 하는 로봇 프로그래밍 방법
US9280330B2 (en) 2013-05-15 2016-03-08 Samsung Electronics Co., Ltd. Apparatus and method for executing code
KR101869008B1 (ko) * 2016-09-02 2018-07-20 단국대학교 산학협력단 자바 어플리케이션의 바이트코드 기반 입력값 검증장치 및 그 방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001056764A (ja) * 1999-08-18 2001-02-27 Access:Kk 仮想計算機の実行方法および装置
US6223725B1 (en) * 1999-08-11 2001-05-01 Mitsubishi Denki Kabushiki Kaisha High-pressure fuel supply assembly
KR20010064489A (ko) * 1999-12-29 2001-07-09 박종섭 자바 프로세서

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6223725B1 (en) * 1999-08-11 2001-05-01 Mitsubishi Denki Kabushiki Kaisha High-pressure fuel supply assembly
JP2001056764A (ja) * 1999-08-18 2001-02-27 Access:Kk 仮想計算機の実行方法および装置
KR20010064489A (ko) * 1999-12-29 2001-07-09 박종섭 자바 프로세서

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100597413B1 (ko) * 2004-09-24 2006-07-05 삼성전자주식회사 자바 바이트코드 변환 방법 및 상기 변환을 수행하는 자바인터프리터
KR100577366B1 (ko) * 2004-09-25 2006-05-10 삼성전자주식회사 이종의 자바 메소드를 실행하는 방법 및 장치
US7992138B2 (en) 2004-09-25 2011-08-02 Samsung Electronics Co., Ltd. Method and apparatus for executing different java methods
KR20110122574A (ko) * 2010-05-04 2011-11-10 (주)로보티즈 중간언어 생성기를 포함한 로봇 프로그래밍 툴과 그 중간 언어 코드를 수행할 수 있는 버츄얼 머신을 기반으로 하는 로봇 프로그래밍 방법
US9280330B2 (en) 2013-05-15 2016-03-08 Samsung Electronics Co., Ltd. Apparatus and method for executing code
KR101869008B1 (ko) * 2016-09-02 2018-07-20 단국대학교 산학협력단 자바 어플리케이션의 바이트코드 기반 입력값 검증장치 및 그 방법

Similar Documents

Publication Publication Date Title
US7725883B1 (en) Program interpreter
US7316007B2 (en) Optimization of n-base typed arithmetic expressions
US7536682B2 (en) Method and apparatus for performing interpreter optimizations during program code conversion
Matz et al. System v application binary interface
US7823140B2 (en) Java bytecode translation method and Java interpreter performing the same
US10216497B2 (en) Selective compiling method, device, and corresponding computer program product
WO2004095263A2 (en) Partial dead code elimination optimizations for program code conversion
US9690551B2 (en) Auto-vectorization in just-in-time compilers for dynamically typed programming languages
EP1728155A2 (en) Method and system for performing link-time code optimization without additional code analysis
KR20020039688A (ko) 변환된 명령들을 수행하는 동안 문맥을 보존하기 위한방법 및 장치
KR101407629B1 (ko) 자바 변환 가속 장치 및 방법
US7200841B2 (en) Method and apparatus for performing lazy byteswapping optimizations during program code conversion
Liu et al. Exploiting asymmetric SIMD register configurations in arm-to-x86 dynamic binary translation
KR20040044655A (ko) 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법
KR20060035077A (ko) 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법
CN111796832B (zh) 热补丁文件生成方法、装置、设备及存储介质
Bhatt et al. Peephole Optimization Technique for analysis and review of Compile Design and Construction
JP2011501286A (ja) ジャババイトコード変換方法
WO2003001374A2 (en) Representation of java data types in virtual machines
US7107581B2 (en) Overflow predictive arithmetic instruction optimization using chaining
US8453133B2 (en) Optimization of N-base typed arithmetic instructions via rework
Pammer Fast Machine-code generation for stack-based languages
Nonaka et al. Design and Implementation of Superinstructions for JavaScript Virtual Machine Generation System for Embedded Systems eJSTK
US7207037B2 (en) Overflow sensitive arithmetic instruction optimization using chaining
JP5910197B2 (ja) 組み込み用プログラム開発装置、コンパイル方法およびコンパイラプログラム

Legal Events

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