KR19990078174A - 동적 연결과 동적 적재가 존재하면서, 동적으로 디스패치되는 호출의 정적 결합 - Google Patents

동적 연결과 동적 적재가 존재하면서, 동적으로 디스패치되는 호출의 정적 결합 Download PDF

Info

Publication number
KR19990078174A
KR19990078174A KR1019990009951A KR19990009951A KR19990078174A KR 19990078174 A KR19990078174 A KR 19990078174A KR 1019990009951 A KR1019990009951 A KR 1019990009951A KR 19990009951 A KR19990009951 A KR 19990009951A KR 19990078174 A KR19990078174 A KR 19990078174A
Authority
KR
South Korea
Prior art keywords
function
class
computer
execution
compiled
Prior art date
Application number
KR1019990009951A
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 KR19990078174A publication Critical patent/KR19990078174A/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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • G06F9/4491Optimising based on receiver type
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code

Abstract

동적 연결(dynamic linking)과 동적 적재(dynamic loading)가 존재하면서, 디스패치되는 호출(dispatched call)에 대한 정적 결합(static binding)을 실행하는 기술(技術)을 공급한다. 실행되는 동안에 함수의 실행 기능을 향상시키는 방법은 함수를 컴파일(compile)하는 단계를 포함하는데, - 여기서, 함수는 인터프릿(interpret)되거나 이전(以前)에 컴파일(compile)되고 - 함수 내(內)에서 처리(process)에 대한 호출을 확인하는 단계를 덧붙여서 포함한다. 또한, 방법은 함수에 종속 정보(dependency information)를 추가하는 단계를 포함한다. 종속 정보(dependency information)는 함수의 상태(status)를 가리키도록 설치되고, 종속 정보(dependency information)는 클래스와 관련이 있는 정보, 이름, 처리와 관련이 있는 서명(signature) 등을 포함한다.

Description

동적 연결과 동적 적재가 존재하면서, 동적으로 디스패치되는 호출의 정적 결합{STATIC BINDING OF DYNAMICALLY-DISPATCHED CALLS IN THE PRESENCE OF DYNAMIC LINKING AND LOADING}
본 발명은 소프트웨어(software)가 실행되는 동안에 컴파일(runtime compilation)에 관한 것이다. 보다 더 상세하게, 동적 연결(dynamic linking)과 동적 적재(dynamic loading)가 존재하면서, 본 발명은 동적으로 디스패치되는 호출(dynamically dispatched call)에 대한 정적 결합(static binding)을 실행하는 기술(技術)에 관한 것이다.
객체-지향 언어(object-oriented language)의 뒤에 숨겨진 기본적인 사상은, 데이터(data)와, 이러한 데이터를 단 하나의 유닛(single unit)으로 작동시키는 방법(method)(또는 함수(function)) 등의 결합인데, 이러한 것은 객체(object)를 의미한다. 메시지에 의하여 일일이 열거된 방법을 발동(실현)시키라고 객체에 명령하면서, 객체로 메시지를 전송하는 것에 의하여 데이터에 접근한다.
객체-지향 언어(object-oriented language)에 있어서 효과적인 메시지 디스패치(message dispatch)는 매우 중요하다. 왜 중요하냐 ?, 그것은 메시지 디스패치(message dispatch)는 객체-지향 프로그램에서 매우 빈번한 작동이기 때문이고, 프로그램이 실행되는 동안(runtime)에 실행되기 때문이다 ; 그러므로, 메시지 디스패치(message dispatch)는 가능하면 빨라야 한다. 하지만, 메시지 디스패치(message dispatch)는 사소한 작동과는 다르다. 프로그램이 실행되는 시간 전(前)에 함수 주소를 결정할 수 있는 절차 프로그래밍 언어(예를 들면 C 프로그래밍 언어)와는 달리, 객체-지향 언어에 있어서는 프로그램이 실행되는 동안에 동적(動的)으로 수신기 객체(receiver object)로 디스패치(dispatch)하였던 메시지를 처리하는 방법을 결정해야만 하고, 객체-지향 언어는 넓은 범위에 걸치는 검색을 포함할 수 있다.
메시지 디스패치(message dispatch)의 복잡성을 보다 더 잘 이해할 목적으로, 클래스 분류 체계(class hierarchy)의 실례(實例)는 기술(記述)될 것이다. 도 1 은 각각의 클래스 방법을 포함하는 클래스 분류 체계(class hierarchy)를 나타낸다. 클래스 분류 체계(1)(class hierarchy)는 그 뿌리에서 두 개의 가상 함수 foo() 과 bar() 등을 정의하는 부모 클래스 A3 를 포함한다. 가상 함수(virtual function)는 부모 클래스(parent class)에서 정의될 수 있는, 그리고 자식 클래스(child class)에서 다시-정의될 수 있는 함수이다. 클래스 B5 와 클래스 C7 등은 부모 클래스 A 의 데이터와 방법 등을 상속받는다. 도 1 에서 나타난 것처럼, 클래스 B5 는 가상 함수 foo 와 가상 함수 bar 등을 다시-정의하지 않는다. 하지만 클래스 C7 는 가상 함수 foo 를 다시-정의한다. 클래스 C7 의 객체가 방법 foo 를 발동(실현)하라고 요구될 때, 발동(실현)되는 방법은 부모 클래스 A3 에 의하여서가 아니라 클래스 C7 에 의하여 정의되는 방법일 것이다. 클래스 D9 과 클래스 E11 등은 또한 방법 foo 를 다시-정의한다.
일반적으로 객체의 클래스를 정적으로 결정하는 것은 불가능하기 때문에, (프로그램이) 실행되는 동안에, 보다 더 상세하게 메시지 디스패치(message dispatch) 중(中)에 정정(訂正) 방법(correct method)을 위한 검색을 실행한다. 예를 들면, 방법(method)을 다음과 같이 가정한다 :
test()
{
...
x.foo()
...
}
클래스 A 내지 클래스 E 등의 모든 클래스는 프로그램이 실행되는 동안의 실행에서 적재된다면, 함수 foo()를 호출하는 것에 대한 결정은 어떤 클래스 x 가 실체(instance)인지에 의존한다.
덧붙여서, test 함수는 기능을 향상시키도록 프로그램이 실행되는 동안에 컴파일(compile)될 수 있다. 프로그램이 실행되는 동안의 컴파일(runtime compila- tion)에 있어서, 클래스 A3 와 클래스 B5 등만을 적재하는 것은 가능하다. 따라서, 메시지 x.foo()는 A::foo()만을 발동(실현)시킨다고 가정하는 것은 적재 클래스(loaded class)의 검사에서 나타날 것이다. 물론, 프로그램이 실행되는 동안의 실행 클래스 C7 을 적재한다면, 가정은 거짓이라고 판명된다.
일반적으로, 본 발명의 실시예(實施例)에 의하여, 동적 연결(dynamic linking)과 동적 적재(dynamic loading)가 존재하면서, 디스패치되는 호출(dispatched call)에 대한 정적 결합(static binding)을 실행하는 혁신적인 기술(技術)을 공급한다. 본 발명의 하나의 특징에 따라서, 실행되는 동안(실행-시간)에 함수의 실행 기능을 향상시키는 함수를 컴파일하는 단계를 포함하고, 이러한 함수는 인터프릿(interpret)되거나 이전(以前)에 컴파일(compile)되는데, 함수 내(內)에서 처리(process)에 대한 호출(call)을 확인하는 단계를 덧붙여서 포함한다. 또한, 방법은 함수에 종속 정보(dependency information)를 추가하는 단계를 포함한다. 종속 정보(dependency information)는 함수의 상태(status)를 가리키도록 설치되고, 종속 정보(dependency information)는 클래스와 관련이 있는 정보, 이름, 처리와 관련이 있는 서명(signature) 등을 포함한다.
본 발명의 또 하나의 특징에 따라서, 실행-시간 중(中)에 시스템의 클래스 분류 체계(class hierarchy)와 관련이 있는 제 1 클래스를 분석하는 컴퓨터로 구현된 방법은, 제 1 클래스를 마크(mark)하는 단계, 그리고 제 1 클래스의 슈퍼클래스(superclass)가 되는 제 2 클래스를 마크(mark)함으로써 제 1 클래스와 제 2 클래스 사이에서 어떤 관련을 가리키는 단계 등을 포함한다. 시스템과 관련이 있는 컴파일을 마친 방법은 그 다음에 검사된다. 컴파일을 마친 함수(compiled function)는 종속 정보(dependency information)를 포함하고, 종속 정보는 컴파일을 마친 함수의 유효 상태와 컴파일을 마친 함수의 최적화 상태 등을 가리키도록 배치된다. 컴파일을 마친 함수를 검사하는 단계는 제 1 클래스와 제 2 클래스 등에서 어느 하나가 종속 정보에서 확인되는지를 결정하는 단계를 포함한다. 제 1 클래스와 제 2 클래스 등에서 하나나 둘이 종속 정보에서 확인된다고 결정할 때, 컴파일을 마친 함수가 유효하지 않다고 결정을 한다. 하나의 실시예에 있어서, 컴파일을 마친 함수가 유효하지 않다고 결정할 때, 방법은 컴파일을 마친 함수를 디컴파일(decompile)하는 단계를 포함한다. 컴파일을 마친 함수를 디컴파일(decompile)하는 단계는 함수를 인터프릿된 상태(interpreted state)로 되돌릴 수 있다.
본 발명의 다른 특징과 다른 이점 등은, 부속된 도면과 관련하여 다음의 상세한 기술(記述)의 요약에서 쉽사리 분명해질 것이다.
정의(definition)
기계 명령어(또는 명령어) - 연산 코드(operation code, OP code)에 의하여, 그리고 선택적으로 하나 이상의 피연산자 등에 의하여 분류된 연산(operation)을 실행하도록 컴퓨팅 장치(computing device)를 이끄는 명령어
가상 기계 명령어(virtual machine instruction) - 소프트웨어에 의하여 에뮬레이션(emulation)되는 마이크로프로세서, 또는 컴퓨터 아키텍처 등을 위한 명령어 (또한 가상 코드(virtual code)로 불림)
원시 기계 명령어(native machine instruction) - 특별한 마이크로프로세서, 또는 컴퓨터 아키텍처 등을 위하여 설계된 명령어 (또는 원시 코드(native code)로 불림)
방법(method) - 소프트웨어 경로 (또는, 함수, 서브-경로, 절차, 그리고 멤버 함수 등으로 불림)
실행-시간 컴파일(runtime compilation) - (프로그램이) 실행되는 동안에 실행되는 코드의 컴파일(compilation)
(프로그램이) 실행되는 동안의 실행(runtime execution) - (프로그램이) 실행되는 동안에 실행되는 코드의 실행
특별한 실시예(實施例)에 의하여 제시되는 본 발명은, 부속된 도면과 관련하여 얻어지는 다음의 기술(記述)에 의하여 이해될 것이다.
도 1 은, 객체-지향 환경(objected-oriented environment)에서 가상 함수(virtual function)를 포함하는 클래스의 클래스 분류 체계(class hierarchy)를 나타낸다 ;
도 2 는, 본 발명의 실시예(實施例)로써 소프트웨어를 실행하는데 이용될 수 있는 컴퓨터 시스템(computer system)의 실례(實例)를 설명한다 ;
도 3 는, 도 2 에 있는 컴퓨터 시스템(computer system)의 시스템 블록 다이어그램을 나타낸다 ;
도 4 는, 본 발명의 실시예(實施例)에 따라서, 가상 기계(virtual machine)의 대표 그림을 나타낸다 ;
도 5 는, (프로그램이) 실행되는 동안에 방법을 컴파일(compile)하는 본 발명에서 실시예(實施例)의 순서도를 나타낸다 ;
도 6 는, 종속 정보(dependency information)를 포함하는 컴파일을 마친 방법(compiled method)의 실시예(實施例)를 나타낸다 ;
도 7 은, 본 발명의 실시예(實施例)를 따라서, (프로그램이) 실행되는 동안에 클래스 적재(class loading)의 처리에 대한 순서도를 나타낸다 ; 그리고
도 8 은, 본 발명의 실시예(實施例)에 따라서, 메모리에서 클래스 분류 체계(class hierarchy)의 대표 그림을 나타낸다.
*참조 번호 설명
1 : 클래스 분류 체계(class hierarchy)
3, 5, 7, 9, 11 : 클래스(class)
301 : 컴퓨터 시스템(computer system)
405 : 컴파일-시간 환경(compile-time environment)
435 : 실행-시간 환경(runtime environment)
440 : 가상 기계(virtual machine)
다음에 있는 기술(記述)에 있어서, 자바 가상 기계 명령어(Java virtual machine instruction)(또는 바이트 코드)에서 동적으로 디스패치되는 호출(dynamically-dispatched call)을 정적으로 결합하는, 선호되는 실시예(實施例)를 통하여, 본 발명을 기술(記述)할 것이다. 하지만, 본 발명은 어떤 특별한 언어, 컴퓨터 아키텍처, 또는 특별한 구현에 제한되지 않는다. 그러므로, 다음에 있는 실시예(實施例)의 기술(記述)은 설명의 목적이지 제한은 아니다.
JavaTM프로그래밍 언어는 Sun Microsystems, Inc 에 의하여 개발된 객체-지향 고(高)-레벨 프로그래밍 언어(object-oriented high level programming language)이고 ; JavaTM프로그래밍 언어는 크기가 작은 장치(예를 들면, 페이저, 셀 방식에 의한 전화기, 및 스마트 카드 등)에서 슈퍼컴퓨터까지의 범위에 걸쳐있는 광의(廣義)의 컴퓨터(computer)에서 실행됨에 있어서 충분하게 이식(移植)될 수 있게 설계된 언어이다. Java(그리고, 다른 언어)에 의하여 만들어진 컴퓨터 프로그램(computer program)은, Java 가상 기계에 의하여 실행을 위한 가상 기계 명령어(virtual machine instruction)로 컴파일(compile)될 수 있다. 일반적으로, Java 가상 기계(Java virtual machine)는 가상 기계 명령어를 디코딩(decoding)하고 실행(execution)하는 인터프리터(interpreter)를 의미한다.
자바 가상 기계(Java virtual machine)를 위한 가상 기계 명령어는 바이트 코드(byte code)인데, 이것은 하나 이상의 바이트를 포함한다. 바이트 코드(byte code)는 "클래스 파일(class file)" 이라고 불리는 특별한 파일 형식으로 저장되는데, 여기서 "클래스 파일(class file)" 은 클래스에 있는 방법을 위한 바이트 코드(byte code)를 포함한다. 클래스에 있는 방법을 위한 바이트 코드(byte code)에 추가하여, 클래스 파일은 심벌 테이블(symbol table)뿐 아니라 다른 부(副)의 정보를 포함한다.
하나 이상의 클래스 파일에서 자바 바이트 코드(Java byte code)로써 구현되는 컴퓨터 프로그램은 플랫폼(platform)에 독립적이다. Java 가상 기계의 구현을 실행할 수 있는 어떤 컴퓨터에서, 컴퓨터 프로그램은 실행될 수 있고, 변경되지 않는다. Java 가상 기계는 "일반적인(generic)" 컴퓨터를 위한 소프트웨어 에뮬레이터(software emulator)인데 ; 여기서 "일반적인(generic)" 컴퓨터라는 것은 Java 가상 기계를 위한 컴퓨터 프로그램은 플랫폼(platform)에 독립적으로 하는 것이 가능하게 하는 주(主) 인자(因子)이다.
자바 가상 기계(Java virtual machine)는 소프트웨어 인터프리터(software interpreter)로써 구현될 수 있다. 종래에 있었던 인터프리터(interpreter)는 실행 중(中)에 하나의 명령으로써 인터프릿을 마친 프로그램(interpreted program)을 디코딩(decoding)을 하고 실행(execution)을 하는데 ; 이와는 현저하게 차이가 있는 컴파일러(compiler)는 실행 전(前)에 소스 코드(source code)를 원시 기계 명령어(native machine instruction)로 디코딩(decoding)함으로써, 실행 중(中)에 디코딩(decoding)을 실행하지 않는다. Java 가상 기계는 실행-시간에 컴파일(compile)을 위한 인터프리터(interpreter)와 컴파일러(compiler) 등을 포함할 수 있다. 일반적으로, 자바 가상 기계(Java virtual machine)는 자바 프로그래밍 언어(예를 들면, C++ 프로그래밍 언어)를 제외한 다른 프로그래밍 언어에서 이용될 것이다.
도 2 는, 본 발명의 실시예(實施例)로써 소프트웨어를 실행시키는데 이용될 수 있는 컴퓨터 시스템(computer system)의 실례(實例)를 나타낸다. 도 2 는 디스플레이(303), 스크린(3055), 본체(307), 키보드(309), 및 마우스(311) 등을 포함하는 컴퓨터 시스템(301)(computer system)을 나타낸다. 마우스(311)(mouse)는 그래픽 환경에 의한 사용자 인터페이스(graphical user interface)와 상호 작용하는 하나 이상의 버튼을 포함할 수 있다. 본체(307)에 의하여, 본 발명을 구현하는 컴퓨터 코드(computer code), 본 발명에서 이용을 위한 데이터(data), 그리고 유사한 것 등을 합체(合體)하는 소프트웨어 프로그램(software program)을 저장하고 검색하는데 이용될 수 있는 CD-ROM 드라이브(313), 시스템 메모리, 및 하드드라이브 등을 수용한다(도 3 를 보다). CD-ROM(315)은 실례(實例)로써 컴퓨터에 의하여 판독 가능한 스토리지 매체로써 나타나 있는데, 플로피 디스크, 테이프, 플래쉬 메모리, 시스템 메모리, 및 하드드라이브 등을 포함하는 컴퓨터에 의하여 판독 가능한 다른 스토리지 매체는 이용될 수 있다. 추가로, (예를 들면, 인터넷(Internet)을 포함하는 네트워크에서) 반송파(搬送波)에서 구현되는 데이터 신호는, 컴퓨터에 의하여 판독 가능한 스토리지 매체로 될 수 있다.
도 3 는, 본 발명의 실시예(實施例)로써 소프트웨어를 실행하는데 이용되는 컴퓨터 시스템(301)(computer system)의 시스템 블록 다이어그램을 나타낸다. 도 2 에서 나타난 것처럼, 컴퓨터 시스템(301)은 모니터(303), 키보드(309), 마우스(311) 등을 포함한다. 중앙 프로세서(351), 시스템 메모리(353), (하드드라이브와 같은) 고정되어 있는 스토리지(355), (CD-ROM 드라이브와 같은) 착탈 가능한 스토리지(357), 디스플레이 어댑터(359), 사운드 카드(361), 스피커(363), 및 네트워크 인터페이스(365) 등과 같은 서브-시스템(subsystem)을 덧붙여서 컴퓨터 시스템(301)은 포함한다. 본 발명의 이용에 적합한 다른 컴퓨터 시스템은 추가의 서브-시스템이나 보다 더 적은 숫자의 서브-시스템 등을 포함할 수 있다. 예를 들면, 또 하나의 컴퓨터 시스템은 (멀티-프로세서 시스템과 같은) 하나 이상의 프로세서(351)나 캐시 메모리 등을 포함할 수 있다.
컴퓨터 시스템(301)의 시스템 버스 아키텍처는 화살표(367)에 의하여 나타난다. 하지만, 이러한 화살표는 서브-시스템을 연결하는데 이용되는 상호 연결 설계의 실례(實例)를 나타낸다. 예를 들면, 로컬 버스는 중앙 프로세서를 시스템 메모리와 디스플레이 어댑터 등에 연결하는데 이용될 수 있다. 도 3 에서 나타난 컴퓨터 시스템(301)은 본 발명의 이용에 적합한 컴퓨터 시스템의 실례(實例)로써만 이용된다. 서브-시스템에서 서로 다른 구성을 가지는 다른 컴퓨터 아키텍처는 또한 이용될 수 있다.
일반적으로, 자바 프로그래밍 언어에서 만들어지는 컴퓨터 프로그램(computer program)은 바이트 코드(byte code)나 자바 가상 기계 명령어(Java virtual machine instruction) 등으로 컴파일(compile)되는데 ; 그 다음에 이러한 바이트 코드(byte code)나 자바 가상 기계 명령어(Java virtual machine instruction) 등은 자바 가상 기계(Java virtual machine)에 의하여 실행된다. 인터프리테이션(interpretation)을 위한 자바 가상 기계로의 입력이 되는 클래스 파일(class file)에, 바이트 코드(byte code)는 저장된다. 도 2 와 도 3 등의 위에서 논의된 컴퓨터 시스템과 같은 컴퓨터 시스템(computer system)에서, 가상 기계(virtual machine)는 실행될 수 있다. 도 4 는 도 2 와 도 3 등에서 컴퓨터 시스템(301)에 의하여 보조되는 가상 기계(virtual machine)의 대표 그림을 나타내는데, 본 발명을 구현하는데 적합하다. 컴퓨터 프로그램, 예를 들면, JavaTM프로그래밍 언어에서 기록되는 컴퓨터 프로그램이 실행될 때, 컴파일-시간 환경(405)(compile-time environment) 내(內)에서 컴파일러(420)(compiler)에 소스 코드(410)(source code)를 공급한다. 컴파일러(420)(compiler)는 소스 코드(410)( source code)를 바이트 코드(430)(byte code)로 변환한다. 일반적으로, 소스 코드(410)가 소프트웨어 개발자에 의하여 만들어지는 시간에, 소스 코드(410)는 바이트 코드(430)로 변환된다.
일반적으로 바이트 코드(430)는 다시 생성되거나, 다운-로드되거나, 그렇지 않으면 네트워크, 예를 들면, 도 3 의 네트워크(365)를 통하여 분포되거나, 도 3 의 제 1 스토리지(334)와 같은 스토리지 장치에 저장된다. 기술(記述)된 실시예(實施例)에 있어서, 바이트 코드(430)는 플랫폼(platform)에 독립적이다. 즉, 바이트 코드(430)는 적합한 가상 기계(440)(virtual machine)에서 실행되는 실질적인 어떤 컴퓨터 시스템에서 실행될 수 있다.
가상 기계(440)를 포함하는 실행-시간 환경(435)(runtime environment)에 바이트 코드(430)를 공급한다. 하나의 실시예(實施例)에 있어서, 가상 기계는 JavaTM가상 기계가 될 수 있다. 실행-시간 환경(435)은 일반적으로 도 3 의 CPUs(332)와 같은 프로세서나 몇몇의 프로세서를 이용하여 실행될 수 있다. 가상 기계(440)는 컴파일러(442)(compiler), 인터프리터(444)(interpreter), 및 실행-시간 시스템(446)(runtime system) 등을 포함한다. 컴파일러(442), 그렇지 않으면 인터프리터(444)에 바이트 코드(430)를 공급할 수 있다.
바이트 코드(430)를 컴파일러(442)에 공급할 때, 바이트 코드(430)에 포함된 방법(method)은 기계 명령어로 컴파일(compile)된다. 하나의 실시예(實施例)에 있어서, 컴파일러(442)는, 방법이 막 실행될 때까지 바이트 코드(430)에 있는 방법의 컴파일(compile)을 지연시키는 저스트-인-타임 컴파일러(just-in-time compiler)이다. 인터프리터(444)에 바이트 코드(430)를 공급할 때, 바이트 코드(430)는 인터프리터(444)에서 단번에 하나의 바이트 코드로 읽혀진다. 그 다음에, 각각의 바이트 코드가 인터프리터(444)에서 읽혀질 때, 인터프리터(444)는 각각의 바이트 코드에 의하여 정의되는 작동을 실행한다. 즉, 당해 기술 종사 업자에 의하여 높이 평가되는 것처럼, 인터프리터(444)는 바이트 코드(430)를 "인터프릿(interpret)"한다. 일반적으로, 인터프리터(444)는 바이트 코드(430)를 처리하고, 인터프리터(444)는 계속해서 실질적으로 바이트 코드(430)와 관련이 있는 작동을 실행한다.
방법이 또 하나의 방법에 의하여 발동(실현)될 때, 또는 실행-시간 환경(435)에서 발동(실현)될 때, 방법을 인터프릿(interpret)한다면, 실행-시간 시스템(446)은 일련의 바이트 코드(430)의 형(型)으로 실행-시간 환경에서 방법을 얻을 수 있는데, 이러한 것은 인터프리터(444)에 의하여 직접적으로 실행될 수 있다. 다른 각도에서 보면, 발동(실현)되는 방법이 컴파일(compile)이 일어나지 않았던 컴파일된 방법(compiled method)이라면, 실행-시간 시스템(446)은 또한 일련(一連)의 바이트 코드(430)의 형(型)으로 실행-시간 환경(435)에서 방법을 얻고, 그 다음에 컴파일(442)을 계속해서 작동시킬 수 있다. 그 다음에, 컴파일러(442)는 바이트 코드(430)에서 기계 명령어를 생성시키고, 결과로써 일어나는 기계 명령어는 도 3 의 CPUs(332)에 의하여 직접적으로 실행될 수 있다. 일반적으로, 기계-언어 명령어는 가상 기계(440)가 종료될 때 없어진다.
자바 클래스(그리고 인터페이스)를 동적으로 적재하고, 동적으로 연결하고, 동적으로 초기화한다. 적재(loading)는 (클래스 파일과 같은) 클래스의 이진 형식을 찾는, 그리고 이진 형식에서 클래스를 대표하도록 Class 에 있는 객체를 구성하는 시스템의 처리이다. Class 라는 클래스는 클래스의 구조를 저장하거나 대표하는 클래스이다. 연결(linking)은 클래스의 이진 형식을 얻는, 그리고 클래스의 이진 형식을 실행할 수 있도록 시스템의 실행-시간 상태에 클래스의 이진 형식을 결합하는 처리이다. 클래스의 초기화(initialization)는, 클래스의 정적 초기화 수단(initializer)과 클래스에서 선언된 정적 필드를 위한 초기화 수단(initializer) 등을 실행하는 것을 포함한다.
각각의 자바 클래스는 이와 관련이 있는 상수 풀(constant pool)을 가진다. 상수 풀(constant pool)은 자바 클래스 파일에 저장되고, 심벌 테이블과 비슷한 함수로써 이용된다. 일반적으로, 상수 풀(constant pool)에 있는 각각의 엔트리는, 1 에서 시작하여 상수 풀에 있는 엔트리의 숫자 내(內)에 있는 숫자에 의하여 색인에 올려진다. 클래스를 위한 방법은 색인(index)에 의하여 상수 풀에 있는 엔트리에 접근하고, 하나의 클래스를 위한 방법은 또 하나의 클래스를 위한 상수 풀에 접근할 수 없다.
리터럴 상수(literal constant)를 저장하는 상수 풀(constant pool)에 추가하여, 상수 풀은 클래스, 방법, 필드, 및 인터페이스 등을 심벌(symbol)로서 저장한다. 이러한 엔트리를 심벌(symbol)로써 저장하는 것에 의하여, 엔트리를 확인하는 이름을 저장하고, 물리적 주소는 저장하지 않는다는 것을 의미한다. 달리 말하면, 클래스 A 가 필드 F 를 가진다면, (F 를 위한 타입 서명(type signature)을 따라서) A 와 F 에 대한 이름 등은 둘 다다 상수 풀(constant pool)에 저장될 수 있다. 이름(name)을 저장하고 주소(address)를 저장하지 않는 것에 의하여, 자바 실행-시간 시스템(Java runtime system)은 프로그램이 실행되는 시간에 대하여 동적으로 물리적 주소(physical address)로 심벌에 의한 참조(symbolic reference)를 도출한다.
도 5 는, 실행되는 동안에 방법을 컴파일하는 본 발명의 실시예(實施例)의 순서도를 나타낸다. 단계(501)에 있어서, 시스템은 방법을 컴파일하는 것이 이점이 있는지를 결정한다. 일반적으로, 방법을 컴파일하는 것은 방법의 실행 기능을 향상시킨다. 하지만, 방법을 컴파일을 하지 않은 많은 실체(instance)가 존재한다. 실례(實例)에 의하여, 컴파일을 마친 방법은 컴파일을 하지 않는 방법보다 보다 더 넓은 스토리지 공간을 필요로 할 수 있다. 어떤 상황에 있어서, 특별한 방법을 컴파일을 해야한다고 일단 결정하면, 방법은 단계(503)에서 컴파일된다.
단계(505)에 있어서, 시스템은 컴파일이 진행되고 있는 방법에서 가상 함수에 대한 호출을 확인한다. 위에서 기술(記述)된 것처럼, 가상 함수 호출의 도출(resolution)은 실행되는 동안에 동적으로 실행된다. 자바 가상 기계 명령어에 있어서, 호출은 가상 명령어를 발동(실현)시킨다.
단계(507)에 있어서, 시스템은 실행-시간 컴파일에서 클래스 분류 체계를 분석한다. 클래스 분류 체계(class hierarchy)는 가상 함수 호출의 수신기(recipient)가 될 수 있는 적재된 클래스의 현재 단지 하나의 함수를 표시할 수 있다. 적재된 클래스의 단지 하나의 함수는 가상 함수 호출의 수신기가 될 수 있다면, 시스템은 컴파일을 마친 방법에서 이러한 함수에 대한 직접 호출을 위치시킬 수 있다. 추가로, 시스템은 컴파일을 마친 방법으로 전체 함수를 인-라인(inline)으로 처리할 수 있다. 전체 함수를 인-라인(inline)으로 처리하는 것은, 컴파일을 마친 방법을 위한 더 이상의 스토리지 공간을 필요로 하지만, 그 결과는 보다 더 빠른 기능을 얻는다.
어떤 경우에 있어서, 가상 함수 호출의 수신기가 될 수 있는 적재된 클래스의 하나 이상의 함수는 존재한다. 이렇게 하나 이상의 함수가 존재한다면, 시스템은 결정 트리(decision tree)나 해시 테이블(hash table) 등을 인-라인(inline)으로 처리하는데, 여기서 결정 트리나 해시 테이블은 함수에 대한 직접 호출과 인-라인 함수에 대한 직접 호출, 또는 어느 하나를 포함한다. 즉, 단계(505)에 관하여 기술(記述)된 것과 같은 가상 함수에 대한 호출은 단계(509)에서 최적화된다. 가상 함수 호출을 실행시키는 기술(技術)은, 여기에서 참조로써 인용되고 있는 1997년 10월 6일 출원된 특허출원번호 08/944,332 에서 기술(記述)되어 있다.
단계(511)에 있어서, 시스템(system)은 컴파일을 마친 방법에 종속 정보(dependency information)를 추가한다. 종속 정보(dependency information)는 단계(509)에서 최적화 되었던 각각의 가상 함수의 클래스(class), 함수 이름(function name), 서명(signature, 즉 파라미터 타입) 등을 포함할 수 있다. 이러한 방식으로, 클래스를 실행되는 동안의 실행에서 적재할 때, 컴파일을 마친 방법이 여전히 유효한지, 컴파일을 마친 방법에 대한 최적화를 하지 않아야 할지, 또는 컴파일을 마친 방법에 대한 최적화를 다시 해야하는지 등을 결정할 목적으로, 종속 정보는 컴파일을 마친 방법에 대하여 검사된다. 이러한 처리는 도 7 에 관하여 보다 더 상세하게 아래에서 기술(記述)될 것이다.
도 6 은, 종속 정보(dependency information)를 갖춘 컴파일을 마친 방법(compiled method)의 실시예(實施例)를 나타낸다. 컴파일을 마친 방법(601)(compiled method)은 헤더(603)(header)와 컴파일을 마친 코드(605)(compiled code) 등을 포함한다. 헤더(603)는 다른 것들 중(中)에서 특히 종속 정보(607)( dependency information)를 포함한다. 여기에서 기술(記述)된 실시예(實施例)에 있어서, 종속 정보(607)는 컴파일을 마친 방법(601)에서 최적화 되었던 모든 가상 함수 호출(virtual function call)의 클래스, 이름, 및 서명 등의 리스트(list)이다.
도 7 은 실행되는 동안의 실행 중(中)에 클래스 적재(class loading)의 처리에 대한 순서도를 나타낸다. 단계(701)에 있어서, 시스템은 실행-시간에서 적재된 클래스를 수신한다. 그 다음에, 단계(703)에 있어서, 시스템은 클래스와 그 모든 슈퍼클래스 등을 마크(mark)한다. 클래스 분류 체계 구조에서 (도 8 을 보라) 불리언 필드(boolean field)를 세팅(setting)하는 것에 의하여, 클래스를 마크(mark)한다.
단계(705)에 있어서, 컴파일을 마친 방법이 그 종속 정보에서 마크가 된 클래스의 어느 하나의 클래스를 포함하는지를 결정할 목적으로, 시스템은 컴파일을 마친 모든 방법을 검사한다. 위에서 기술(記述)된 것처럼, 종속 정보는 컴파일을 마친 방법의 헤더에 저장될 수 있다. 마크가 된 클래스의 어느 하나의 클래스가 컴파일을 마친 방법의 종속 정보에 포함된다면, 시스템은 단계(707)에서 함수 이름과 서명 등이 존재하는지에 대하여 결정한다.
함수 이름 매치(function name match)와 서명 매치(signature match)가 존재하는지에 대한 결정을 하는 것에 의하여, 시스템은 클래스를 적재하는 것에 의하여 컴파일을 마친 방법 중(中)에서 어떤 방법이 효과적으로 무효로 되는지에 대하여 확인을 한다. 달리 말하면, 함수 이름 매치와 서명 매치가 존재하는지에 대한 결정은, 클래스를 적재하는 것이 최적화되었던 가상 함수 호출에 대하여 신(新)으로 이전(以前)으로 설명 불가능인가 수신인가에 대한 결정을 의미한다.
예를 들면, 다시 도 1 로 돌아와서, 클래스 A3 와 B5 는 실행-시간 컴파일에서 적재되지 않는다면, 가상 함수 호출의 수신기가 될 수 있는 단지 하나의 함수만이 존재하기 때문에, 시스템은 컴파일을 마친 방법에서 A::foo()에 대한 직접 호출을 위치시킬 수 있다(또는, 전체 함수를 인-라인으로 처리할 수 있다). 하지만, 실행되는 동안의 실행 중(中)에 클래스 C7 은 적재된다면, 가상 함수 호출(예를 들면, C::foo())에 대한 가능한 또 하나의 수신기(recipient)가 존재한다. 그러므로, 컴파일을 마친 방법은 최적화를 아니 하던지 다시 최적화를 해야만 한다. 컴파일을 마친 방법의 최적화를 하지 않는 기술(技術)은, 여기에서 참조로써 인용되는 1997년 10월 6일 출원된 특허출원번호 08/944,330 에서 기술(記述)되었다.
단계(707)에서 컴파일을 마친 방법에 대하여 매치(match)가 존재한다면, 컴파일을 마친 방법은 단계(709)에서 최적화가 되지 않는다. 컴파일을 마친 방법을 최적화하지 않는 것은, 인터프릿된 형식(interpreted form)으로 방법을 되돌림(reverting), 그렇지 않으면 "디컴파일(de-compiling)" 을 포함한다. 추가로, 시스템은 컴파일을 마친 방법을 다시 최적화함으로써, 이제 새롭게 적재된 클래스를 설명한다.
도 8 은, 메모리에서 클래스 분류 체계의 대표 그림을 나타낸다. 클래스(801)의 밑에 있는 클래스에 대한 슈퍼클래스(superclass)라는 것을 지적하는 루트(root)로써, 클래스(801)를 나타낸다. 도 8 에서 나타난 것처럼, 클래스(803)와 클래스(805) 등은 클래스(801)의 서브-클래스이다. 각각의 클래스에 대한 클래스 정보는 불리언 필드(boolean field)를 포함하는데, 이러한 불리언 필드(boolean field)는 도 7 의 단계(703)에서 클래스를 마크하는데 이용된다.
추가로, 각각의 클래스에 대한 클래스 정보는 서브-클래스 포인터(subclass pointer)와 시블링 포인터(sibling pointer) 등을 포함할 수 있다. 서브-클래스 포인터는 제 1 서브-클래스를 가리키는데, 이것의 실례(實例)는 클래스(803)이다. 시블링 포인터(sibling pointer)는 시블링인 클래스의 연결된 리스트를 형성한다. 도 8 에서 나타난 것처럼, 클래스(803)의 시블링 클래스는 클래스(805)를 가리킨다. 서브-클래스와 시블링 포인터 등을 이용하여, 본 발명의 실시예(實施例)로써 시스템은 클래스 분류 체계를 쉽게 자세히 고찰할 수 있다.
결론
상기(上記)의 발명의 상세한 설명은 본 발명의 선호되는 실시예(實施例)의 완전한 기술(記述)이지만, 다른 변형, 변경, 및 이에 상응하는 것 등을 이용할 수 있다. 상기(上記)에서 기술(記述)된 실시예(實施例)에 대한 적합한 변경에 의하여, 본 발명은 동일하게 적용 가능하다는 사실은 극히 당연하다. 예를 들면, 상기(上記)에서 기술(記述)된 실시예(實施例)는 자바 가상 기계 명령어(Java virtual machine instruction)에 관한 것이지만, 본 발명의 원리는 다른 명령어에 쉽사리 적용될 수 있다. 그러므로, 상기(上記)의 기술(記述)은 본 발명의 제한으로써 이용한 것은 아니다.

Claims (22)

  1. 함수(function)를 컴파일(compile)하는 단계 ;
    함수(function)에 포함된 처리(process)로의 호출(call)을 확인하는 단계 ; 그리고
    함수(function)에 종속 정보(dependency information)를 추가하는 단계 - 여기서, 종속 정보는 함수의 상태를 가리키도록 배치되고, 종속 정보는 처리와 관련이 있는 클래스 정보(class information), 이름 정보(name information), 서명 정보(signature information) 등을 포함하는데, 함수의 상태는 함수의 유효성(validity)과 함수의 컴파일 상태(compilation status) 등을 가리키도록 배치되고 - ; 등을 포함하는 것을 특징으로 하는, 실행되는 동안에 함수의 실행 기능을 향상시키는 컴퓨터로 구현된 방법.
  2. 제 1 항에 있어서, 처리(process)는 가상 처리(virtual process)인데, 함수와 관련이 있는 클래스 구조(class structure)를 분석하는 단계를 덧붙여서 포함하고, 클래스 구조를 분석하는 단계는 가상 처리가 호출의 실질적인 유일한 대상(unique target)인지를 결정하는 것을 포함하는 것을 특징으로 하는, 실행되는 동안에 함수의 실행 기능을 향상시키는 컴퓨터로 구현된 방법.
  3. 상기 항들 중(中)에서 어느 하나의 항에 있어서, 가상 처리가 호출(call)의 실질적인 유일한 대상(unique target)이라고 결정할 때, 함수로의 가상 처리를 인-라인(inline)으로써 처리하는 것을 특징으로 하는, 실행되는 동안에 함수의 실행 기능을 향상시키는 컴퓨터로 구현된 방법.
  4. 제 1 항과 제 2 등에서 어느 하나의 항에 있어서, 함수에서 가상 처리로의 직접 호출을 위치시키는 단계를 덧붙여서 포함하는 것을 특징으로 하는, 실행되는 동안에 함수의 실행 기능을 향상시키는 컴퓨터로 구현된 방법.
  5. 상기 항들 중(中)에서 어느 하나의 항에 있어서, 함수가 컴파일에 적합한지를 결정하는 단계를 덧붙여서 포함하는 것을 특징으로 하는, 실행되는 동안에 함수의 실행 기능을 향상시키는 컴퓨터로 구현된 방법.
  6. 상기 항들 중(中)에서 어느 하나의 항에 있어서,
    함수와 관련이 있는 클래스를 적재하는 단계 ; 그리고
    종속 정보(dependency information)에 의하여 함수가 유효(valid)한지, 함수가 최적화하지 않는 것(deoptimization)에 적합한지, 그리고 함수가 다시 최적화하는 것(reoptimization)에 적합한지 등을 가리키는지에 대한 결정을 하는 단계 ; 등을 덧붙여서 포함하는 것을 특징으로 하는, 실행되는 동안에 함수의 실행 기능을 향상시키는 컴퓨터로 구현된 방법.
  7. 제 6 항에 있어서, 클래스를 적재하는 단계는
    함수가 처리에 대한 실질적인 유일한 호출기(substantially unique caller)가 아닌지를 결정하는 단계 ; 그리고
    함수가 처리에 대한 실질적인 유일한 호출기(substantially unique caller)가 아니라고 결정할 때, 함수를 디컴파일(decompile)하는 단계 ; 등을 포함하는 것을 특징으로 하는, 실행되는 동안에 함수의 실행 기능을 향상시키는 컴퓨터로 구현된 방법.
  8. 제 6 항에 있어서, 클래스를 적재하는 단계는
    함수가 처리에 대한 실질적인 유일한 호출기(substantially unique caller)가 아닌지를 결정하는 단계 ; 그리고
    함수가 처리에 대한 실질적인 유일한 호출기(substantially unique caller)가 아니라고 결정할 때, 함수를 재(再)-컴파일하는 단계 ; 등을 포함하는 것을 특징으로 하는, 실행되는 동안에 함수의 실행 기능을 향상시키는 컴퓨터로 구현된 방법.
  9. 제 1 클래스를 마크(mark)하는 단계 ;
    제 2 클래스를 마크(mark)하는 단계 - 제 2 클래스는 클래스의 분류 체계에 포함되고, 제 2 클래스는 제 1 클래스와 또한 관련이 있는데, 제 2 클래스를 마크(mark)하는 단계는 제 2 클래스가 제 1 클래스와 관련이 있다고 실질적으로 확인하고 - ;
    시스템과 관련이 있는 컴파일을 마친 클래스를 검사하는 단계 - 컴파일을 마친 함수는 종속 정보(dependency information)를 포함하고, 종속 정보는 컴파일을 마친 함수의 유효 상태와 컴파일을 마친 함수의 최적화 상태 등을 가리키도록 배치되는데, 컴파일을 마친 함수를 검사하는 단계는 제 1 클래스와 제 2 클래스 등에서 어느 하나가 종속 정보에서 확인되는지를 결정하는 단계를 포함하고 - ; 그리고
    제 1 클래스와 제 2 클래스 등에서 하나나 둘이 종속 정보에서 확인된다고 결정할 때, 컴파일을 마친 함수가 유효하지 않다고 결정하는 단계 ; 등을 포함하는 것을 특징으로 하는, 실행-시간 중(中)에 시스템의 클래스 분류 체계(class hierarchy)와 관련이 있는 제 1 클래스를 분석하는 컴퓨터로 구현된 방법.
  10. 제 9 항에 있어서, 컴파일을 마친 함수가 유효하지 않다고 결정할 때, 컴파일을 마친 함수를 디컴파일(decompile)하는 단계를 덧붙여서 포함하는데, 컴파일을 마친 함수를 효과적으로 디컴파일(decompile)하는 단계는 인터프릿된 형식(interpreted form)으로 컴파일을 마친 함수를 위치시키는 것을 특징으로 하는, 실행-시간 중(中)에 시스템의 클래스 분류 체계(class hierarchy)와 관련이 있는 제 1 클래스를 분석하는 컴퓨터로 구현된 방법.
  11. 제 9 항에 있어서, 컴파일을 마친 함수가 유효하지 않다고 결정할 때, 컴파일을 마친 함수를 재(再)-컴파일하는 단계를 덧붙여서 포함하는데, 컴파일을 마친 함수를 재(再)-컴파일하는 것에 의하여 컴파일을 마친 함수는 제 1 클래스를 설명하는 것을 특징으로 하는, 실행-시간 중(中)에 시스템의 클래스 분류 체계(class hierarchy)와 관련이 있는 제 1 클래스를 분석하는 컴퓨터로 구현된 방법.
  12. 프로세서(processor) ;
    함수를 컴파일을 하도록 배치되는 컴파일러(compiler) ;
    함수에 포함되어 있는 처리로의 호출을 확인하는데 배치되는 호출 식별자(call identifier) ; 그리고
    함수에 종속 정보를 추가하는데 적합한 메커니즘(mechanism) - 종속 정보는 함수의 상태를 가리키도록 배치되고, 상태는 함수의 유효 상태를 포함하도록 설치되고 - ; 등을 포함하는 것을 특징으로 하는, 실행되는 동안에 함수의 실행 기능을 향상시키는데 적합한 컴퓨팅 시스템.
  13. 제 12 항에 있어서, 처리는 가상 처리인데, 함수와 관련이 있는 클래스 구조를 분석하는 분석기(analyzer)를 덧붙여서 포함하고, 클래스의 구조를 분석하는 단계는 가상 처리가 호출의 실질적인 유일한 대상(unique target)인지를 결정하는 단계를 포함하는 것을 특징으로 하는, 실행되는 동안에 함수의 실행 기능을 향상시키는데 적합한 컴퓨팅 시스템.
  14. 제 12 항과 제 13 항 등에서 어느 하나의 항에 있어서, 가상 처리가 호출의 호출의 실질적인 유일한 대상(unique target)이라고 결정할 때, 함수로 가상 처리를 인-라인으로 처리하도록 설치되는 인라이너(inliner)를 덧붙여서 포함하는 것을 특징으로 하는, 실행되는 동안에 함수의 실행 기능을 향상시키는데 적합한 컴퓨팅 시스템.
  15. 함수(function)를 컴파일(compile)하는 컴퓨터 코드 ;
    함수(function)에 포함된 처리(process)로의 호출(call)을 확인하는 컴퓨터 코드 ;
    함수(function)에 종속 정보(dependency information)를 추가하는 컴퓨터 코드 - 여기서, 종속 정보는 함수의 상태를 가리키도록 배치되고, 상태는 함수의 유효 상태를 포함하도록 설치되고 - ; 그리고
    컴퓨터 코드를 저장하는 컴퓨터에 의하여 판독 가능한 매체 ; 등을 포함하는 것을 특징으로 하는, 실행되는 동안(실행-시간)에 함수의 실행 기능을 향상시키는 컴퓨터 프로그램 프로덕트.
  16. 제 15 항에 있어서, 처리는 가상 처리인데, 함수와 관련이 있는 클래스 구조(class structure)를 분석하는 컴퓨터 코드를 덧붙여서 포함하고, 클래스 구조를 분석하는 단계는 가상 처리가 호출의 실질적인 유일한 대상(unique target)인지를 결정하는 단계를 포함하는 것을 특징으로 하는, 실행되는 동안(실행-시간)에 함수의 실행 기능을 향상시키는 컴퓨터 프로그램 프로덕트.
  17. 제 15 항과 제 16 항 등에서 어느 하나의 항에 있어서, 가상 처리가 호출의 실질적인 유일한 대상(unique target)이라고 결정할 때, 함수로 가상 처리를 인-라인으로 처리하는 컴퓨터 코드를 덧붙여서 포함하는 것을 특징으로 하는, 실행되는 동안(실행-시간)에 함수의 실행 기능을 향상시키는 컴퓨터 프로그램 프로덕트.
  18. 제 15 항과 제 16 항 등에서 어느 하나의 항에 있어서, 함수에서 가상 처릴로의 직접 호출을 위치시키는 컴퓨터 코드를 덧붙여서 포함하는 것을 특징으로 하는, 실행되는 동안(실행-시간)에 함수의 실행 기능을 향상시키는 컴퓨터 프로그램 프로덕트.
  19. 제 15 항 내지 제 18 등에서 어느 하나의 항에 있어서, 함수가 컴파일에 적합한지를 결정하는 컴퓨터 코드를 덧붙여서 포함하는 것을 특징으로 하는, 실행되는 동안(실행-시간)에 함수의 실행 기능을 향상시키는 컴퓨터 프로그램 프로덕트.
  20. 제 15 항 내지 제 19 등에서 어느 하나의 항에 있어서,
    함수와 관련이 있는 클래스를 적재하는 컴퓨터 코드 ; 그리고
    종속 정보(dependency information)에 의하여 함수가 유효(valid)한지, 함수가 최적화하지 않는 것(deoptimization)에 적합한지, 그리고 함수가 다시 최적화하는 것(reoptimization)에 적합한지 등을 가리키는지에 대한 결정을 하는 컴퓨터 코드 ; 등을 덧붙여서 포함하는 것을 특징으로 하는, 실행되는 동안(실행-시간)에 함수의 실행 기능을 향상시키는 컴퓨터 프로그램 프로덕트.
  21. 제 15 항 내지 제 20 등에서 어느 하나의 항에 있어서, 컴퓨터에 의하여 판독 가능한 매체는 플로피 디스크, 하드디스크, 테이프, 반송파(搬送波)에서 구현되는 데이터 신호, CD-ROM, 시스템 메모리, 및 플래쉬 메모리 등으로 이루어지는 그룹에서 선택된 하나가 되는 것을 특징으로 하는, 실행되는 동안(실행-시간)에 함수의 실행 기능을 향상시키는 컴퓨터 프로그램 프로덕트.
  22. 하나 이상의 가상 함수로의 최적화된 호출(optimized call)을 포함하도록 배치되는 컴파일을 마친 코드 부분(compiled code portion) ; 그리고
    종속 정보를 포함하도록 배치되는 헤더 부분(header portion) ; 등을 포함하는데, 여기서, 종속 정보(dependency information)는 하나 이상의 가상 함수와 관련이 있는 클래스와 연관성이 있는 정보, 하나 이상의 가상 함수의 이름과 관련이 있는 정보, 그리고 하나 이상의 가상 함수의 서명과 관련이 있는 정보 등을 포함하는 것을 특징으로 하는, 컴퓨팅 환경(computing environment)에서 이용을 위한 컴파일을 마친 방법 구조(compiled method structure).
KR1019990009951A 1998-03-24 1999-03-24 동적 연결과 동적 적재가 존재하면서, 동적으로 디스패치되는 호출의 정적 결합 KR19990078174A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US7976598P 1998-03-24 1998-03-24
US60/079,765 1998-03-24

Publications (1)

Publication Number Publication Date
KR19990078174A true KR19990078174A (ko) 1999-10-25

Family

ID=22152672

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019990009951A KR19990078174A (ko) 1998-03-24 1999-03-24 동적 연결과 동적 적재가 존재하면서, 동적으로 디스패치되는 호출의 정적 결합

Country Status (5)

Country Link
EP (1) EP0950947B1 (ko)
JP (1) JP5129904B2 (ko)
KR (1) KR19990078174A (ko)
CN (2) CN1149477C (ko)
DE (1) DE69911104T2 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008054074A1 (en) * 2006-10-31 2008-05-08 Sk Telecom Co., Ltd. Terminal device having function of interfacing compilation libraries in heterogeneous languages, method of calling api, and method of creating compile function
WO2013119441A1 (en) * 2012-02-07 2013-08-15 Microsoft Corporation Transferring program execution from compiled code to interpreted code
US8819649B2 (en) 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5983021A (en) * 1998-05-27 1999-11-09 Sun Microsystems Dynamically switching statically bound function calls to dynamically bound function calls without recompilation
US6223340B1 (en) * 1998-10-09 2001-04-24 Sun Microsystems, Inc. Method for directly inlining virtual calls without on-stack replacement
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
JP4376181B2 (ja) 2002-06-18 2009-12-02 パナソニック株式会社 プログラム実行処理端末装置
JP2006146613A (ja) * 2004-11-19 2006-06-08 Matsushita Electric Ind Co Ltd プログラム変換方法
US7490320B2 (en) * 2005-02-18 2009-02-10 International Business Machines Corporation Method and apparatus for transforming Java Native Interface function calls into simpler operations during just-in-time compilation
CN105335137B (zh) * 2014-07-23 2019-01-18 国际商业机器公司 用于处理源文件的方法和装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3178151B2 (ja) * 1993-03-19 2001-06-18 富士ゼロックス株式会社 オブジェクト指向言語のメッセージコンパイル装置
US5613120A (en) * 1994-10-20 1997-03-18 Silicon Graphics, Inc. System and method for enabling, without recompilation, modification of class definitions and implementations in an object-oriented computer program
US5606699A (en) * 1995-04-28 1997-02-25 International Business Machines Corporation Storing and querying execution information for object-oriented programs
US5748963A (en) * 1995-05-12 1998-05-05 Design Intelligence, Inc. Adaptive binding

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008054074A1 (en) * 2006-10-31 2008-05-08 Sk Telecom Co., Ltd. Terminal device having function of interfacing compilation libraries in heterogeneous languages, method of calling api, and method of creating compile function
US8819649B2 (en) 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation
WO2013119441A1 (en) * 2012-02-07 2013-08-15 Microsoft Corporation Transferring program execution from compiled code to interpreted code

Also Published As

Publication number Publication date
CN1149477C (zh) 2004-05-12
CN1235301A (zh) 1999-11-17
CN1529237A (zh) 2004-09-15
CN1287280C (zh) 2006-11-29
DE69911104D1 (de) 2003-10-16
DE69911104T2 (de) 2004-07-08
EP0950947A2 (en) 1999-10-20
JPH11327906A (ja) 1999-11-30
EP0950947B1 (en) 2003-09-10
EP0950947A3 (en) 2000-02-23
JP5129904B2 (ja) 2013-01-30

Similar Documents

Publication Publication Date Title
US6704927B1 (en) Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading
US5999732A (en) Techniques for reducing the cost of dynamic class initialization checks in compiled code
US7490320B2 (en) Method and apparatus for transforming Java Native Interface function calls into simpler operations during just-in-time compilation
US6910205B2 (en) Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6289506B1 (en) Method for optimizing Java performance using precompiled code
Hookway et al. Digital FX! 32: Combining emulation and binary translation
US6966057B2 (en) Static compilation of instrumentation code for debugging support
US6968546B2 (en) Debugging support using dynamic re-compilation
US6637025B1 (en) Dynamic selection/definition of which class/methods should or should not be jit'ed using information stored in a jar file
US6618769B1 (en) Module-by-module verification
US7124407B1 (en) Method and apparatus for caching native code in a virtual machine interpreter
EP1056013B1 (en) Trusted verification of computer program modules
JP2000347871A (ja) スタブ/アダプタ自動生成器
US6412108B1 (en) Method and apparatus for speeding up java methods prior to a first execution
US20040083467A1 (en) System and method for executing intermediate code
US20050028132A1 (en) Application specific optimization of interpreters for embedded systems
EP0950947B1 (en) Static binding of dynamically dispatched calls in the presence of dynamic linking and loading
EP1056005B1 (en) Dataflow algorithm for symbolic computation of lowest upper bound type
Kågström et al. Cibyl: an environment for language diversity on mobile devices
Bouchenak et al. Efficient Java thread serialization
Ferreira THE JEWEL VIRTUAL MACHINE
Puder Byte code transformations using XSL stylesheets
INFORMATION SYSTEMS AND TECHNOLOGY CENTER WRIGHT-PATTERSON AFB OH ADA VALIDATION FACILITY Ada Compiler Validation Summary Report. Certificate Number: 930901W1. 11326, Verdix Corporation VADS SYSTEM V/88 RELEASE 4/VAda-110-8080, Version 6.2 Motorola Delta 8640 under UNIX System V/88 Release 4.0
Ferreira Common Language Runtime: a new virtual machine
Cureton SPARCompiler™ Compilation Technology

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
NORF Unpaid initial registration fee