KR100555116B1 - 객체-지향 시스템에서 수신기 타입을 위한 인-라인데이터베이스 - Google Patents

객체-지향 시스템에서 수신기 타입을 위한 인-라인데이터베이스 Download PDF

Info

Publication number
KR100555116B1
KR100555116B1 KR1019980042467A KR19980042467A KR100555116B1 KR 100555116 B1 KR100555116 B1 KR 100555116B1 KR 1019980042467 A KR1019980042467 A KR 1019980042467A KR 19980042467 A KR19980042467 A KR 19980042467A KR 100555116 B1 KR100555116 B1 KR 100555116B1
Authority
KR
South Korea
Prior art keywords
receiver
message
type information
receiver type
site
Prior art date
Application number
KR1019980042467A
Other languages
English (en)
Other versions
KR19990037015A (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 썬 마이크로시스템즈, 인코포레이티드
Publication of KR19990037015A publication Critical patent/KR19990037015A/ko
Application granted granted Critical
Publication of KR100555116B1 publication Critical patent/KR100555116B1/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

Abstract

객체지향형 프로그램을 위해 메시지 디스패치를 구현하기 위한 시스템 및 방법이 제공된다. 수신기 타입 정보는 수신기 객체들로 메시지를 디스패치(dispatch)하는 한 방법의 사이트에서 수집된다. 상기 수신기 타입 정보는 뒤이은 프로그램의 실행을 위해 저장된다. 수신기 타입 정보를 저장함므로써 수신기 타입 정보를 다시 수집하는 것이 필요하지 않기 때문에 상기 프로그램은 더욱 효율적일 수 있다. 추가로, 인라이닝 정보(inlining information)가 상기 수신기 타입 정보와 함께 저장될 수 있다.

Description

객체-지향 시스템에서 수신기 타입을 위한 인-라인 데이터베이스.
본 발명은 객체-지향 프로그램(object-oriented system)의 실행 속력( execution speed)을 증가시키는 것에 관한 것이다. 보다 더 상세하게, 결과로서 일어나는 실행을 위한 객체-지향 프로그램(object-oriented system)의 실행 중(中)에 수집된 정보를 이용하는 것에 관한 것이다.
객체-지향 언어(object-oriented language)의 뒤에 숨겨진 기본적인 사상은, 데이터(data)와, 단 하나의 유닛(single unit)으로 상기 데이터에서 작동하는 - 객체(object)라고 명명된 - 방법(method)(또는 함수(function)) 등의 결합이다. 일반적으로 객체 함수(object's function)는 객체에 의하여 캡슐화(encapsulation)된 데이터에 접근하는 단 하나의 방식을 공급한다. 객체가 메시지에 의하여 일일이 열거된 방법을 실행하라고 명령하면서, 객체로 메시지를 전송하는 것에 의하여 데이터에 접근한다.
객체-지향 언어(object-oriented language)에 있어서 효과적인 메시지 디스패치(message dispatch)는 매우 중요하다. 메시지 디스패치(message dispatch)는 객체-지향 프로그램에서 매우 빈번한 작동이기 때문이고, 프로그램이 실행되는 시간(runtime)에 실행되기 때문이다 ; 그러므로, 메시지 디스패치(message dispatch)는 가능하면 빨라야 한다. 하지만, 메시지 디스패치(message dispatch)는 사소한 작동과는 다르다. 프로그램이 실행되는 시간 전(前)에 함수 주소를 결정할 수 있는 절차 프로그래밍 언어(예를 들면 C 프로그래밍 언어)와는 달리, 객체-지향 언어는 프로그램이 실행되는 기간에 수신기 객체(receiver object)로 신속히 디스패치(dispatch)하였던 메시지를 처리하는 방법을 결정해야만 하고, 객체-지향 언어는 넓은 범위에 걸치는 검색을 포함할 수 있다.
메시지 디스패치(message dispatch)의 복잡성을 보다 더 잘 이해할 목적으로, 도 1 은 각각의 클래스 방법을 포함하는 클래스 분류 체계(class hierarchy)를 보여준다. 클래스 분류 체계(1)(class hierarchy)는 그 뿌리에서 두 개의 가상 함수 foo() 과 bar() 등을 정의하는 부모 클래스 A3 를 포함한다. 가상 함수( virtual function)는 부모 클래스(parent class)에서 정의될 수 있는, 그리고 자식 클래스(child class)에서 다시-정의될 수 있는 함수이다. 클래스 B5 와 클래스 C7 등은 부모 클래스 A 의 데이터와 방법 등을 상속받는다. 보여지는 것처럼, 클래스 B 는 가상 함수 foo 와 가상 함수 bar 등을 다시-정의하지 않는다. 하지만 클래스 C 는 가상 함수 foo 를 다시-정의한다. 클래스 C 의 객체가 방법 foo 를 실행하라고 요구되어질 때, 실행되는 방법은 부모 클래스 A 에 의하여서가 아니라 클래스 C 에 의하여 정의되는 방법일 것이다. 클래스 D9 과 클래스 E11 등은 또한 방법 foo 를 다시-정의한다.
일반적으로 객체의 클래스를 정적으로 결정하는 것이 가능하기 때문에, 메시지 디스패치(message dispatch) 중(中)에 프로그램이 실행되는 시간에 정정(訂正) 방법을 위한 검색을 실행한다. 방법 디스패치(method dispatch)를 구현하기 위하여 많은 공지된 기술이 있다. 예를 들면, 도 2 는 인-라인 캐시(inline cache)를 보여준다. 방법(51)이 처음에는 다음과 같다고 가정하자.
main()
{
...
x.foo()
...
}
그러므로, 객체 x 의 방법 foo 를 실행할 목적으로, 방법 main 은 문장 x.foo() 를 포함한다.
프로그램이 실행되는 시간 중(中)에, 방법을 처리하는 방법이 실행되기 전(前)에 시스템은 객체 x 가 어떤 클래스에 속해있는지를 결정해야만 한다. 인-라인 캐시(inline cache)에 있어서, 시스템이 객체 x 가 속해있는 클래스를 결정하는 처음에는, 클래스 방법(class's method)으로의 직접 호출(direct call)은 컴퓨터 코드(computer code)로 기록되어 있다.
객체 x 가 클래스 A 의 멤버라고 가정하면, 호출 x.foo() 은 직접 호출 A::foo() 로 변환된다. 화살표는 클래스 A53 을 위한 방법 foo 를 일일이 열거한다. 객체 x 가 매번 클래스 A 를 가질 수 없기 때문에, 프로로그(55)(prolog)는 객체 x 가 정정(訂正) 클래스의 객체가 아닌 것을 확인하고, 프로로그(55)(prolog)는 객체 x 의 클래스가 클래스 A 에 일치하는지를 결정하는 것을 의미하는 표현 x = A 로써 대표된다. 객체의 클래스는 객체에 기억된 값에서 결정될 수 있다. 객체가 정정(訂正) 클래스의 객체라면, 메시지를 처리하는 방법 코드(57)(method code)에서 점프(jump)를 실행한다.
프로로그(55)로 돌아와서, 객체가 클래스 A 의 객체가 아니라면, 정정(訂正) 방법을 결정할 목적으로 방법 조사 루틴(method lookup routine)을 호출한다. 일단 정정(訂正) 방법을 찾는다면, 직접 호출을 갖춘 메시지 디스패치 사이트(message dispatch site) (또는 메시지 호출 사이트(message call site))를 상기 방법으로 갱신한다. 추가로, 새로운 클래스를 일일이 열거할 목적으로 시스템은 프로로그를 갱신한다. 시스템이 x.foo() 에 부닥쳤던 처음에는, 객체 x 가 클래스 A 의 객체였었고, 데이터 구조는 도 2 에서 보여지는 것처럼 변경되었다.
보여지는 것처럼, 일단 데이터 구조를 변경한다면, 객체 x 가 클래스의 객체라면, 결과적으로 일어나는 호출 x.foo() 는 실질적으로 보다 더 효과적이다. 하지만, 객체 x 가 결과적으로 클래스 B 의 객체라면, 방법을 찾을 목적으로 프로로그(55)(prolog)가 방법 조사 루틴을 호출하고, 지금 클래스 B 의 객체 x 를 결정한다고 가정한다. 다시 도 1 에 관하여, 클래스 B 를 위한 방법 foo 는 클래스 A에서 정의된 것과 같은 방법 foo 이다(즉, 클래스 B 는 가상 함수 foo 를 다시-정의하지 아니한다). 따라서, 방법(51)에서 메시지 디스패치(message dispatch)는 B::foo() 로 변환되고, 프로로그(55)에서 조건은 x = B 로 변환될 것이다.
호출 사이트 바(call site bar)에서 객체가 같은 클래스에 남아 있다면, 인-라인 캐시는 메시지 디스패치를 구현하는 효과적인 방식이 될 수 있다. 하지만, 객체가 다수 클래스의 객체라면, 시스템은 지속적으로 방법 조사 루틴을 호출하고, 호출 사이트와 프로로그 등을 임시 정정(訂正)(patch)한다. 그러므로, 시스템은 실질적으로 보다 덜 효과적이다.
메시지 디스패치를 구현하는 또 하나의 기술(技術)은 폴리몰픽 인-라인 캐시(polymorphic inline cache)의 이용이다. 전(前)과 같이, 방법(101)은 처음에는 방법 디스패치 x.foo() 를 포함하였다. 폴리몰픽 인-라인 캐시(polymorphic inline cache)에 있어서, 서로 다른 수신기 타입을 위한 메시지 디스패치를 실행할 수 있는 스터브(103)(stub)를 생성시킨다. 원래의 메시지 디스패치는 호출로써 폴리몰픽 인-라인 캐시 스터브(103)에 중복 기재된다. 새로운 수신기 타입에 부닥치는 각각의 시간에서, 문장은 스터브에 덧붙여진다. 보여지는 것처럼, 세 개의 서로 다른 수신기 타입은 이제까지 부닥쳐왔다. 수신기 타입에 부닥쳤다면, 상기 수신기 타입을 위한 메시지를 처리하는 방법으로의 호출을 만든다. 그렇지 않으면, 메시지를 처리하는 적합한 방법을 결정할 목적으로, 방법 조사 루틴을 호출한다. 일반적으로, 각각의 새로운 수신기 타입을 처리할 목적으로, 새로운 문장은 스터브(103)에 덧붙여진다.
폴리몰픽 인-라인 캐시는 다수의 수신기 타입을 처리할 수 있기 때문에, 인-라인 캐시보다 폴리몰픽 인-라인 캐시는 보다 더 탄력적이다. 하지만, 폴리몰픽 인-라인 캐시의 결점은, 더 많은 수신기 타입에 부닥칠 때 스터브는 계속해서 성장하고, 메시지 디스패치를 실행하는데 점점 더 효과적인 것이 떨어진다. 예를 들면, 메시지를 처리하는 올바른 방법을 찾기 전(前)에, 다수의 문장을 통하여 시스템을 보충할 필요가 있다.
도 4 는 해싱(hashing)으로 호출된 또 하나의 메시지 디스패치 기술을 보여준다. 해싱(hashing)에 있어서, 방법(151), x.foo() 에서 원래의 메시지 디스패치는 해시 함수(153)(hash function)로 중복 기재된다. 해시 키(hash key)를 형성할 목적으로 해시 함수는 수신기 타입과 메시지 등을 해시(hash)하며, 해시 키(hash key)는 일반적으로 해시 테이블(155)(hash table)로 된 색인이다. 해시 테이블(hash table)은 색인(157)(index), 수신기 타입(159)(receiver type), 메시지(161)(message), 방법(163)(method) 등을 포함한다. 일단 해시 함수가 해시 테이블(155)(cache table)에서 행(行)으로써 해시(hash)된다면, 수신기 타입과 메시지 등은 해시 테이블의 열(列)(159, 161)에서 검색된다. 호출 사이트(call site)에서 수신기 타입과 메시지가 해시 테이블의 행(行)으로 수신기 타입과 메시지에 일치한다면, 해시 테이블(155)의 열(列)(163)에서 분류된 방법(method)을 실행한다. 그렇지 않으면, 정정(訂正) 방법을 찾을 목적으로 방법 조사 루틴을 호출한다. 일반적으로, 그 다음에 새로운 방법은 해시 테이블에 덧붙여진다.
해싱(hashing)이 여기에서 이제까지 기술(記述)되었던 가장 탄력적인 메시지 디스패치이지만, 해싱(hashing)이 다른 기술(技術)보다 더 계산적이고 기억 집약적이다. 이미 기술(記述)한 메시지 디스패치 기술의 또 하나의 결점은, 어떤 기술(技術)도 사이트 특정(site specific)이 아니라는 것이다. 달리 말하면, 어떤 메시지 디스패치도, 서로 다른 방식으로 서로 다른 호출 사이트에서 메시지 디스패치를 처리하는 탄력성을 공급하지 않는다.
따라서, 속력과 컴퓨터 코드 크기 등 양쪽에 관하여 효과적인, 사이트 특정 메시지 디스패치(site specific message dispatch)에 대한 필요가 있다. 추가로, 객체-지향 프로그램이 실행될 때, 탄력성이 있고 순응될 수 있는 사이트 특정 메시지 디스패치(site specific message dispatch)에 대한 필요가 있다.
본 발명의 실시예는, 속력과 컴퓨터 코드 크기에 관하여 효과적일 수 있는 혁신적인 사이트 특정 메시지 디스패치 기술(innovative site specific dispatch technique technique)을 공급한다. 사이트 특정 메시지 디스패치 기술을 공급하는 것에 의하여, 메시지 디스패치는 각각의 메시지 디스패치 사이트에 대하여 최적화될 수 있다. 그러므로, 모드 호출 사이트에 대하여 효과적일 수 있는 하나의 메시지 디스패치 기술을 찾는 것 대신에, 기술은 사이트 특정(site specific)을 보다 더 잘 공급할 수 있도록 조절될 수 있다. 본 발명의 몇몇 실시예는 하기(下記)에 기술(記述)되어 있다.
하나의 실시예에 있어서, 본 발명은 객체-지향 환경에서 메시지 디스패치(message dispatch)를 구현할 수 있는 방법을 공급한다. 메시지를 수신기 객체로 디스패치(dispatch)하는 사이트에, 예상되는 수신기 타입을 저장한다. 그 다음에 메시지를 수신기 객체로 전송한다. 수신기 객체가 메시지를 수신하면서, 수신기 객체가 저장되고 예상되는 수신기 타입의 수신기 객체임을 확인한다. 일반적으로, 메시지 디스패치 명령어의 앞에 있는 이동 명령어(move instruction)에 의하여, 예상된 수신기 타입을 레지스터에 저장한다.
또 하나의 실시예에 있어서, 본 발명은 객체-지향 환경에서 메시지 디스패치(message dispatch)를 구현할 수 있는 방법을 공급한다. 메시지를 수신기 객체로 디스패치(dispatch)하는 사이트에, 예상되는 수신기 타입을 저장한다. 그 다음에 메시지를 수신기 객체로 전송한다. 수신기 객체가 메시지를 수신하면서, 수신기 객체가 저장되고 예상되는 수신기 타입의 수신기 객체임을 확인한다. 수신기 객체가 저장되고 예상되는 수신기 타입의 수신기 객체가 아니라면, 예상된 수신기 타입을 수신기 객체의 타입으로 변환하고, 새로운 방법을 얻기 위하여 방법 조사 루틴을 호출하고, 새로운 방법을 실행하기 위하여 사이트를 변환한다.
또 하나의 실시예에 있어서, 본 발명은 객체-지향 프로그램을 위한 메시지 디스패치(message dispatch)를 구현할 수 있는 방법을 공급한다. 메시지를 수신기 객체로 디스패치(dispatch)하기 위하여 특정 사이트에서 제 1 메시지 디스패치 기술을 실행한다. 동적으로 프로그램을 실행하는 동안에, 제 2 메시지 디스패치 기술이 특정 사이트에서 바람직한지를 결정한다. 제 2 메시지 디스패치 기술이 바람직하다면, 메시지를 수신기 객체로 디스패치(dispatch)하기 위하여 특정 사이트에서 제 2 메시지 디스패치 기술을 실행한다. 선호되는 실시예에 있어서, 특정 사이트가 서로 다른 수신기 객체 타입의 예상되는 개수보다 더 많은 개수로 메시지를 디스패치(dispatch)한다면, 제 2 메시지 디스패치 기술이 바람직한지를 결정한다.
본 발명의 다른 특징(特徵)과 이점(利點) 등은, 부속되는 도면과 관련하여 다음 상세한 기술(記述)의 재검토에서 빠르게 분명해질 것이다.
정의(Definition)
함수(function) - 소프트웨어 루틴(또한 서브-루틴, 절차, 멤버 함수 및 방법 등으로 명명된다).
메시지 디스패치(message dispatch) - 객체로 보내졌던 메시지를 객체-지향 환경(object-oriented environment)으로 처리하는 방법을 결정하는 과정.
수신기 객체(또는 수신기) - 객체-지향 환경(object-oriented environment)에서 메시지를 받았던 객체.
수신기 타입(receiver type) - 수신기 객체가 속해있는 클래스.
호출 사이트(또는 사이트) - 메시지를 객체로 신속히 디스패치(dispatch)하는 프로그램이 있는 위치 또는 영역.
개요(overview)
다음의 기술(記述)에 있어서, 본 발명은 JavaTM 가상 기계(JavaTM virtual machine)를 위하여 설계된 선호되는 실시예에 관하여 기술(記述)될 것이다. 보다 더 상세하게, IBM 개인 컴퓨터를 지향하는 실시예를 기술(記述)할 것이다. 하지만, 본 발명은 특별한 언어, 컴퓨터 구조, 특별한 구현 등에 제한되어 있지 아니한다. 그러므로, 설명을 위하여, 제한이 없게 하기 위하여 실시예의 기술(記述)은 다음과 같다.
도 5 는, 본 발명 실시예의 소프트웨어를 실행시키는데 이용될 수 있는 컴퓨터 시스템의 실시예를 설명한다. 디스플레이(303), 스크린(305), 컴퓨터 상자(307), 키보드(309) 및 마우스(311) 등을 포함하는 컴퓨터 시스템(301)(computer system)이다. 마우스(311)는 그래픽 사용자 인터페이스(graphical user interface )와 상호 작용할 목적으로, 하나 이상의 버튼을 가질 수 있다. 컴퓨터 상자(307)는, 본 발명으로 구현되는 컴퓨터 코드를 합체(合體)하는 소프트웨어 프로그램, 본 발명에서 이용되는 데이터, 그리고 그 외(外)의 여러 가지 등을 기억하고 검색하는데 이용될 수 있는 CD-ROM 드라이브(313), 시스템 메모리 및 하드 드라이브 등을 수용한다(도 6 을 보라). CD-ROM(315)은 예로써 주어진 컴퓨터에 의하여 판독 가능한 기억 매체로써 보여지고 있지만, 플로피 디스크, 테이프, 플래쉬 메모리, 시스템 메모리, 및 하드 드라이브 등을 포함하는 컴퓨터에 의하여 판독 가능한 다른 기억 매체를 이용할 수 있다. 추가로, (즉, 인터넷(Internet)을 포함하는 네트워크에 있어서) 반송파(carrier wave)에서 실시되는 데이터 신호(data signal)는, 컴퓨터에 의하여 판독 가능한 기억 매체가 될 수 있다.
도 6 은, 본 발명 실시예의 소프트웨어를 실행시키는데 이용되는 컴퓨터 시스템(301)의 시스템 블록 다이어그램이다. 도 5 에서처럼, 컴퓨터 시스템(301)은 모니터(303), 키보드(309), 및 마우스(311) 등을 포함한다. 또한 컴퓨터 시스템(301)은, 중앙 프로세서(351)(central processor), 시스템 메모리(353)(system memory), 고정 기억 장치(355)(fixed storage)(즉, 하드 드라이브), 이동 가능한 기억 장치(57)(removable storage)(즉, CD-ROM 드라이브), 디스플레이 어댑터(359) (display adaptor), 사운드 카드(361)(sound card), 스피커(363)(speaker),및 네트워크 인터페이스(365)(network interface) 등과 같은 서브-시스템(subsystem)을 포함한다. 본 발명의 이용에 적합한 다른 컴퓨터 시스템은 추가의 서브-시스템, 또는 적은 수의 서브-시스템을 포함할 수 있다. 예를 들면, 또 하나의 컴퓨터 시스템은 하나 이상의 프로세서(351) (즉, 멀티-프로세서 시스템) 또는 캐시 메모리를 포함한다.
컴퓨터 시스템(301)의 시스템 버스 구조는 화살표(367)에 의하여 대표된다. 하지만, 상기 화살표는 서브-시스템을 연결시키는데 도움이 되는 연결 도해를 설명한다. 예를 들면, 지역 버스(local bus)는 중앙 프로세서를 시스템 메모리와 디스플레이 어댑터 등에 연결시키는데 이용될 수 있었다. 도 6 에서 보여지는 컴퓨터 시스템(301)은 본 발명의 이용에 적합한 컴퓨터의 예(例)일뿐이다. 서브-시스템의 서로 다른 구조를 가지는 다른 컴퓨터 구조를 또한 이용할 수 있다.
JavaTM 프로그램밍 언어(JavaTM programing language)는 Sun Microsystems 에 의하여 개발되었다. 일반적으로 자바(Java) 프로그램밍 언어에 의하여 기록된 컴퓨터 프로그램은 바이트-코드(bytecode) 또는 자바(Java) 가상 기계 명령어(Java virtual machine instruction) 등으로 컴파일(compile)되며, 그 다음에 자바(Java) 가상 기계에 의하여 실행된다. 바이트-코드(bytecode)는 클래스 파일에 기억되며, 클래스 파일은 해석(interpretation)을 위하여 자바(Java) 가상 기계로 입력된다. 도 7 은 해석기(interpreter), 자바(Java) 가상 기계(Java virtual machine)에 의한 실행을 통하여 자바(Java) 원시 코드의 단순한 부분의 진행을 보여준다.
자바(Java) 원시 코드(401)는 자바(Java)로 기록된 흔하게 예로써 드는 Hello World program 으로 이루어져 있다. 그 다음에 원시 코드는 바이트-코드 컴파일러(403)(bytecode compiler)로 입력되며, 바이트-코드 컴파일러(403)(bytecode compiler)는 원시 코드를 바이트-코드로 컴파일(compile)한다. 컴퓨터를 흉내내는 소프트웨어(software emulated computer)에 의하여 바이트-코드를 실행시키는 것처럼, 바이트-코드는 가상 기계 명령어이다. 일반적으로, 가상 기계 명령어는 일반적이지만(특별한 마이크로프로세서 또는 특별한 컴퓨터 구조를 위하여 설계되어 있지 않지만), 특별한 마이크로프로세서 또는 특별한 컴퓨터 구조를 요구하지 않는다. 바이트-코드 컴파일러는 자바(Java) 프로그램을 위한 바이트-코드로 이루어진 자바(Java) 클래스 파일(405)을 출력한다.
자바(Java) 클래스 파일은 자바(Java) 가상 기계(407)로 입력된다. 자바(Java) 가상 기계는 자바(Java) 클래스 파일에서 바이트-코드를 해독하고 실행하는 해석기(interpreter)이다. 자바(Java) 가상 기계는 해석기이지만, 자바(Java) 가상 기계는 소프트웨어에서 마이크로프로세서 또는 컴퓨터 구조를 흉내내듯이(즉, 마이크로프로세서 또는 컴퓨터 구조는 하드웨어에서 존재할 수 없듯이), 통상적으로 가상 기계를 가리킨다. 자바(Java) 가상 기계의 실행 속력을 증가시킬 목적으로, 보다 빠른 실행을 위하여 방법은 원래 기계 명령으로 컴파일될 수 있다. 다음의 선호되는 실시예의 기술(記述)에 있어서, 자바(Java) 가상 기계 명령어를 원래 기계 명령어로 번역을 맡기는데 컴파일(compilation)을 이용한다.
사이트 특정 인-라인 캐시(site specific inline cache)
본 발명은, 객체-지향 환경에서 메시지 디스패치(message dispatch)를 구현할 목적으로, 사이트 특정 인-라인 캐시 기술(site specific inline cache technique)을 공급한다. 수신기 타입 정보(receiver type information)는 호출 사이트에 기억되며, 수신기 타입 정보(receiver type information)에 의하여 호출 사이트의 프로그램이 실행되는 시간의 특징에 따라서 각각의 호출 사이트는 다양해진다. 상기에만 의하여, 메시지 디스패치(message dispatch)는 보다 더 효율적으로 되는 것은 아니지만, 보다 더 탄력적으로 된다.
도 8 은 본 발명의 하나의 실시예에 따라서 사이트 특정 인-라인 캐시 기술(site specific inline cache technique)을 설명한다. 본 명세서의 서론에서 기술(記述)한 것처럼, 처음에 방법(51)은 디스패치(dispatch)를 위하여 메시지 x.foo() 를 포함하였다. 상기 메시지를 신속히 디스패치(dispatch)하는 처음에는, 메시지를 처리하는 적합한 방법의 설정을 결정할 목적으로, 시스템이 방법 조사 루틴(method lookup routine)을 호출할 수 있다. 대신에, 프로그램이 실행되는 시간 전(前)에 어떤 것이 정정(訂正) 방법이 될 가능성이 있는지를 결정할 목적으로, 시스템은 정적 분석(static analysis)을 실행할 수 있다.
사이트 특정 인-라인 캐시(site specific inline cache)에 있어서, 메시지를 처리해야만 하는 객체의 클래스를 일단 결정하면, 수신기 타입이나 클래스를 저장하기 위하여 호출 사이트에서 명령어를 발생시킨다. 그 다음에 메시지 디스패치를 메시지를 처리해야만 하는 특정 방법으로의 호출로써 중복 기재한다. 그러므로 메시지 디스패치는, 수신기 타입을 저장하는 하나의 명령어, 그리고 적합한 방법으로의 호출 등의 두 개의 명령어가 된다.
보여지는 것처럼, 방법 451 은 클래스 A 를 위한 id 를 특별한 레지스터에 기억하는 이동 명령어(move instruction)를 포함한다. 단지 동일 확인을 위한 목적을 위하여 레지스터를 특별한 레지스터라고 부른다. 중요한 것은, 레지스터를 이용한다면 레지스터를 상기 호출 사이트에서 달리 이용하지 않아야 한다. 레지스터를 이용하는 것은 가장 효과적인 실행 속력을 공급할 수 있지만, 다른 기억 메커니즘을 이용할 수 있다. 예를 들면, 수신기 타입은 시스템 메모리에 기억될 수 있거나, 파리미터로써 메시지를 처리하는 방법으로 전송될 수 있다.
일단 수신기 타입을 저장한다면, 메시지를 처리하는 방법 453 으로의 호출을 만들며, 이것은 A::foo() 로써 보여진다. 객체 x 가 저장된 수신기 타입의 객체인지를 프로로그(455)는 검사하며, 이것은 특별한 레지스터에서 회복된다. 보여지는 예에서 클래스 A 는 기억된 수신기 타입이다. 그러므로, 객체 x 가 클래스 A 의 객체라면, A::foo() 의 방법 코드(457)로의 점프를 만든다. 그렇지 않으면, 메시지를 처리하는 적합한 방법을 설정하기 위하여, 방법 조사 루틴을 호출한다. 그 다음에 객체 x 의 수신기 타입과 방법 조사 루틴에 의하여 찾은 방법으로의 호출 등을 저장하기 위하여 호출 사이트를 갱신할 수 있다.
그러므로 호출 사이트에 기억된 수신기 타입은 예상된 수신기 타입이다. 시스템이 예상하는 수신기 타입은, 메시지를 수신하는 다음 객체의 수신기 타입일 것이다. 예상된 수신기 타입이 객체의 수신기 타입에 일치한다면, 메시지 디스패치는 보다 더 효과적이다. 추가로, 각각의 메시지 디스패치 사이트는 상기 호출 사이트에 특정이고 저장된 수신기 타입 정보를 가지고, 또 하나의 사이트는 저장된 수신기 타입 정보를 중복 기재하지 않는다.
도 9 는, 메시지 디스패치를 위한 사이트 특정 인-라인 캐시 기술에 대한 실시예의 순서도를 보여준다. 단계(501)에서 예상된 수신기 타입은 메시지를 수신기 객체로 디스패치(dispatch)하는 사이트에 저장된다. 선호되는 실시예에서, 레지스터에서 수신기 타입을 위치시키는데 이동 명령어(move instruction)를 이용하는 것에 의하여 수신기 타입을 저장한다. 하지만, 당해 기술 종사 업자에게 잘 공지되고, 시스템 메모리 또는 파라미터 패싱의 이용을 포함하는 수신기 타입을 저장하는 다른 방법을 이용할 수 있다.
단계(503)에서 메시지를 수신기 객체를 전송한다. 방법 조사 루틴을 이용하는 대신에, 메시지를 처리하는 방법을 실행하도록 하는 직접 호출에 의하여, 메시지를 전송한다.
일단 수신기 객체가 메시지를 수신한다면, 단계(505)에서 수신기 객체는 저장되고 예상된 수신기 타입의 수신기 객체라는 것을 확인한다. 선호되는 실시예에서, 방법의 프로로그에서 상기 확인을 실행한다(도 8 을 보라). 단계(507)에서 수신기 객체가 저장되고 예상된 수신기 타입과 같은 타입의 수신기 객체라면, 단계(509)에서 메시지를 처리하는 방법을 실행한다. 단계(509)는 메시지를 처리하는 방법 코드의 시작으로의 점프를 실행하는 것을 포함한다.
수신기 객체가 저장되고 예상된 수신기 타입과 같은 타입의 수신기 객체가 아니라면, 호출 사이트에서 예상된 수신기 타입은 단계(511)에서 수신기 객체의 수신기 타입으로 변환된다. 단계(513)에서 새로운 방법을 얻을 목적으로 방법 조사 루틴을 호출한다. 이용되는 방법 조사 루틴은, 당해 기술 종사 업자에게 공지되고, 디스패치 테이블 검색과 가상 함수 테이블을 포함하는 것이 될 수 있다. 방법 조사 루틴은 메시지를 처리하는 적합한 방법을 공급한다. 그 다음에 호출 사이트에서 메시지 디스패치는, 단계(515)에서 방법 조사 루틴에 의하여 돌아가는 방법으로 변환된다.
예로써, 도 8 에서 객체 x 가 클래스 A 의 객체이고, 그리고 방법(451)에 있어서 호출 사이트에 저장된 예상된 수신기 타입이 클래스 A 라고 가정한다. 하지만, 결과적으로 객체 x 가 클래스 B 의 객체라면, 특별한 레지스터에서 클래스 B 를 예상된 수신기 타입으로써 기억하는 이동 명령어를, 프로로그(455)는 변경한다. 추가로, 방법 조사 루틴에 의하여 돌아오는 방법을 실행하도록 메시지 디스패치를 변경할 것이다. 그 다음에 클래스 B 의 수신기 객체에서 지시되는 상기 호출 사이트에서 결과적인 메시지 디스패치는, 보다 더 효과적일 것이다.
도 9 는, 사이트에서 방법을 변환시키는 단계(515) 후(後)에 실행되는 방법을 보여준다. 방법을 실행시키는 단계는 단계(513) 내(內)에서 또는 다른 위치에서 실질적으로 일어날 수 있다. 그러므로, 보여지는 순서도에 있어서, 본 발명의 정신에서 벗어나지 아니하고 특별한 구현에 따라서, 단계를 다시-정리하고 추가하고 지운다.
상기(上記)에서 기술(記述)된 것처럼, 호출 사이트에서 예상된 수신기 타입을 저장하는 사이트 특정 인-라인 캐시 기술을 공급한다. 호출 사이트에서 예상된 수신기 타입을 기억하는 것에 의하여, 메시지 디스패치는 보다 더 효과적이고 탄력적일 수 있다. 예를 들면, 각각의 호출 사이트에서의 작동을 서로에 대하여 고립시킬 수 있음으로써, 하나의 호출 사이트는 또 하나의 호출 사이트에 대한 설정을 변환시키지 아니한다.
사이트 특정 메시지 디스패치(site specific message dispatch)
본 발명은, 서로 다른 메시지 디스패치 기술(different message dispatch technique)을 각각의 사이트에서 이용하는 것이 가능할 정도로 탄력성이 있는, 사이트 특정 메시지 디스패치 기술(site specific message dispatch technique)을 공급하는 것이다. 추가로, 프로그램이 실행되는 시간 동안에 호출 사이트에서 이용되는 메시지 디스패치 기술은 시간에 대하여 변화될 수 있다. 새롭거나 색다른 메시지 디스패치가 특정 사이트에서 바람직하다고 일단 결정되면, 특정 호출 사이트에서의 이용을 위하여, 새로운 메시지 디스패치 기술(new message dispatch technique)을 설정한다. 그러므로, 호출 사이트에 관하여서만이 아니라, 프로그램이 실행되는 중(中)의 서로 다른 시간 동안에 호출에서 이용되는 메시지 디스패치 기술에 관하여, 메시지 디스패치(message dispatch)는 보다 더 탄력적으로 된다.
도 10 은, 사이트 특정 메시지 디스패치의 실시예에 대한 하이-레벨 순서도를 보여준다. 단계(511)에서 제 1 메시지 디스패치 기술은 특정 메시지 디스패치 사이트에서 실행된다. 제 1 메시지 디스패치 기술은, 당해 기술에서 공지된 메시지 디스패치 기술의 개수가 될 수 있다. 제 1 메시지 디스패치 기술은 본 발명에 따른 기술이 되는 것을 선호한다. 예를 들면, 제 1 메시지 기술은 상기(上記)에서 기술(記述)된 사이트 특정 인-라인 캐시의 실시예가 될 수 있다. 제 1 메시지 디스패치 기술은, 프로그램이 실행되는 시간 전(前)에 정적으로, 또는 프로그램이 실행되는 시간 중(中)에 동적으로 결정될 수 있다.
단계(553)에서, 시스템은 제 2 메시지 디스패치 기술이 특정 사이트에서 바람직한지를, 프로그램이 실행되는 시간 중(中)에 동적으로 결정한다. 제 2 메시지 디스패치 기술이 바람직한지를 결정하도록, 어떤 개수의 방식을 이용할 수 있다. 예를 들면, 상기 호출 사이트에서 부닥치는 서로 다른 수신기 타입의 개수가 임계값에서 일단 교차하면, 서로 다른 메시지 디스패치 기술로 교환하는 것이 바람직하다. 추가로, 방법 조사 루틴을 호출하는 주파수에서 계산을 실행함으로써, 주파수가 너무 높으면 새로운 메시지 디스패치는 정당화될 수 있다.
어떠한 속도로, 일단은 제 2 메시지 디스패치 기술이 바람직하다고 결정하면, 제 2 메시지 디스패치 기술은 단계(555)에서 특정 사이트에서 실행된다. 새로운 메시지 디스패치 기술을 교환하는 메커니즘은, 새로운 기술 그 자체에 일반적으로 의존한다. 하이-레벨 흐름을 지금 막 기술(記述)하였지만, 제 2 메시지 디스패치 기술이 바람직한지를 동적으로 결정하는 단계의 실시예를 보다 더 상세하게 토론하는 것이 유리하다.
도 11 은, 제 2 메시지 디스패치 기술이 바람직한지를 동적으로 결정하는 실시예를 보여준다. 제 1 메시지 디스패치 기술과 제 2 메시지 디스패치 기술 등의 라벨(label)은, 하나의 메시지 디스패치 기술을 또 하나의 메시지 디스패치 기술로 특정 사이트에서 교환하는 일반적인 지적으로써 제시되어있다. 하지만, 본 발명은 두 개의 기술에만 제한되어있지 아니하고, 세 개나 그 이상의 기술에 적용되는 것이 유리할 수 있다. 그러므로, 제 1 메시지 디스패치 기술과 제 2 메시지 디스패치 기술 등의 라벨(label)은, 본 발명이 단지 두 개의 메시지 디스패치 기술에 제한되는 것을 지적하는 것이 아니다.
도 11 에서 보여진 실시예는, 메시지 디스패치가 변환되어야만 하는 때의 지적기로써 특정 호출 사이트에서 부닥치는 서로 다른 수신기 타입의 개수에 의존한다. 예로써, 다섯 개의 서로 다른 수신기 타입이 상기 호출 사이트에서 부닥칠 때까지, 사이트 특정 인-라인 캐시 기술을 이용할 수 있다. 서로 다른 수신기 타입을 상기 상황에서 이용할 때, 예상된 수신기 타입이 실질적인 수신기 타입과는 달랐던 다섯 가지 예가 있었음을 의미한다. 약 5 배 방법 조사 루틴을 호출하였고, 호출 사이트에서 기억되고 예상된 수신기 타입을 변화시킨다는 것을 의미한다. 예로써, 클래스 A 와 클래스 B 등의 수신기 객체 등의 사이에서 다섯 배를 변경시키는 호출 사이트는, 다섯 개의 서로 다른 수신기 타입으로써 세어질 수 있다.
특정 수신기 타입 계수기(specific receiver type counter)를 각각의 호출 사이트에서 이용할 수 있지만, 계수기(counter)를 유지하는 메모리와 컴퓨터 코드의 이용을 수반한다. 선호되는 실시예에 있어서, 계수기(counter)는 메시지를 처리하는 방법의 앞에 있는 다중 비(非)-작동(multiple no-operation) 명령어로써 구현된다. 도 12 에 관하여 보다 더 상세하게 기술(記述)될 것이지만, 방법 전(前)에 구현되는 개수 NOP 명령어는, 부닥쳤던 서로 다른 수신기 타입의 개수를 지적한다.
도 11 에 관하여, 순서도는 방법 조사 루틴을 호출하였다는 것을 가정하며, 그렇지 않으면 가장 가능성 있게 현재의 메시지 디스패치 기술을 효과적으로 실행하고 있다. 단계(601)에서, 시스템은 메시지를 처리하는 방법의 앞에 있는 NOP 명령어로 메시지를 디스패치(dispatch)한다. 얼마나 많은 NOP 명령어를 방법 전(前)에 실행하는지를 결정하는 것에 의하여, 시스템은 서로 다른 수신기 타입의 개수를 센다. 일반적으로, 어떠한 프로로그를 포함하는 실질적인 방법의 주소에서, 상기 사이트에 대하여 메시지를 디스패치(dispatch)하였던 주소를 빼는 것에 의하여, 개수(count)를 결정할 것이다.
단계(605)에서, 개수(count)는 미리-결정된 개수와 비교된다. 서로 다른 메시지 디스패치 기술로 교환하는 것이 바람직하기 전(前)에, 호출 사이트에서 부닥칠 수 있는 서로 다른 수신기 타입의 개수는, 미리-결정된 개수이다. 미리-결정된 개수는 정적으로 정의될 수 있거나, 프로그램이 실행되는 시간 동안에 동적으로 계산될 수 있다.
단계(607)에서 개수(count)가 미리-결정된 개수보다 크다면, 단계(609)에서 제 2 메시지 디스패치 기술로의 교환을 만든다. 개수(count)가 미리-결정된 개수와 같거나 더 작다면, 현재 제 2 메시지 디스패치 기술로 교환하는 것이 바람직하지 않다는 것을 지적한다. 얼마나 많은 NOP 명령어를 개수(count)로서 이용될 수 있는지를 설명하는데, 예(例)는 도움이 될 수 있다.
도 12 는, 특정 호출 사이트에서 부닥쳤던 서로 다른 수신기 타입의 개수의 개수(count)로서 얼마나 많은 NOP 명령어를 개수(count)로서 이용될 수 있는지를 설명한다. 상기에서 기술(記述)된 사이트 특정 인-라인 캐시를 갖춘 방법(651)을 보여준다. 하지만, 방법(653)은 메시지를 처리하며, 다중 NOP 명령어를 가지는 NOP 섹션(655)은 방법의 앞이다. NOP 명령어는 아무 것도 아니하고, 방법의 작동 속도에 부당하게 효과를 주지 아니할 때, NOP 명령어는 선택될 수 있다. 다른 실시예에서 NOP 명령어 대신에 다른 명령어를 이용할 수 있다.
NOP 섹션(655)은, 방법(653)의 프로로그(657)와 방법 코드(659) 등에 선행한다. NOP 섹션은 NOP 명령어의 미리-결정된 개수로 이루어지며, 일반적으로 서로 다른 메시지 디스패치 기술로의 교환이 초기화되기 전(前)에, 호출 사이트에서 부닥칠 수 있는 서로 다른 수신기 타입과 같은 개수로 이루어진다. 방법 조사 루틴을 프로로그(657)에서 호출할 때마다, 이동 명령어는 객체 x 의 수신기 타입으로 임시 정정(訂正) 된다. 추가로, 결과적인 메시지 디스패치(예를 들면 A::foo())는, 방법 조사 루틴에 의하여 찾아진 새로운 방법의 NOP 섹션(655)에서 NOP 명령어의 하나로 변환된다.
보여지는 것처럼, 메시지 디스패치는 방법(653) 전(前)의 제 3 NOP 명령어를 지적한다. 객체 x 가 클래스 A 의 객체가 아니라고 프로로그(657)가 결정한다면, 호출 사이트의 주소 특정과 방법(653)의 처음 등의 사이에서 프로로그는 차이를 계산하며, 공지된 방법의 개수에 의하여 프로그램이 실행되는 시간 동안에 얻을 수 있다. 차이나 개수(count)는 상기 특정 호출 사이트에서 부닥쳤던 서로 다른 수신기 타입의 개수를 지적한다. 개수(count)가 미리-결정된 개수보다 크다면, 프로로그(657)는 상기 호출 사이트에서 이용되는 메시지 디스패치 기술을 교환할 수 있다.
방법 전(前)에 NOP 명령어를 이용하는 것은 쉽고 빠르게 구현되며, 개수(count)를 유지하는 컴퓨터 코드의 초과되는 양을 요구하지 않는다. 추가로, NOP 섹션(655)에서 NOP 명령어는, 서로에 대한 어떤 충격 없이 다중의 서로 다른 호출 사이트에 의하여 참조될 수 있다.
제 1 메시지 디스패치 기술이 사이트 특정 인-라인 캐시가 되는 것을 보여준다. 제 2 메시지 디스패치 기술은 폴리몰픽 인-라인 캐시가 될 수 있거나, 해싱 기술이 될 수 있으며, 여기서 각각은 다중 수신기 타입을 처리하도록 설계될 수 있다. 물론, 본 발명에 따라서 이용될 수 있는 메시지 디스패치 기술에 있어서 제한은 없다. 특정 메시지 디스패치 기술은, 심사관의 이해를 돕기 위하여 여기에 기술(記述)되었다.
상기에서 기술(記述)된 것처럼, 바람직하다고 생각될 때, 특정 호출 사이트에서 새로운 메시지 디스패치 기술을 이용하는 것이 가능한 사이트 특정 메시지 디스패치 기술을 공급한다. 바람직하게 될 때, 각각의 호출 사이트가 메시지 디스패치 기술을 교환하는 것이 가능하게 하는 것에 의하여, 메시지 디스패치는 보다 더 효과적이 될 수 있고, 탄력적이 될 수 있다. 추가로, 각각의 호출 사이트에서 작동은 서로에 대하여 고립될 수 있음으로써, 하나의 호출 사이트는 또 하나의 호출 사이트에 대한 설정을 변환시키지 않는다.
인-라인 데이터베이스(inline database)
본 발명은 프로그램의 결과로서 일어나는 실행을 위한 수신기 타입(receiver type)과 인-라인닝 정보(inlining information), 또는 어느 한쪽을 저장하는 기술(技術)을 공급한다. 수신기 타입(receiver type)과 인-라인닝 정보(inlining information) 등은 프로그램이 실행되는 시간 중(中)에 수집될 수 있으며, 그 다음에 프로그램이 실행되는 시간에 있어서 수집된 정보를 기억함으로써, 다시 정보를 수집해야만 할 필요없이 프로그램의 결과로서 일어나는 실행은 수집된 정보의 이익을 현실화할 수 있다. 상기(上記)에 의하여, 프로그램이 실행되는 시간 동안에 최적화된 상태에 도달하는 것이 가능하고, 프로그램의 결과로서 일어나는 실행에서 최적화된 상태로 재빨리 돌아갈 수 있다.
도 13 은, 수신기 타입 정보를 수집하고, 프로그램의 결과로서 일어나는 실행에 대하여 수신기 타입 정보를 기억하는 본 발명에 있어서, 실시예의 하이-레벨 순서도를 보여준다. 단계(701)에서 프로그램 방법의 메시지 디스패치 사이트에서 수신기 타입 정보를 수집한다. 수신기 타입 정보는, 기술(技術)에 있어서 여기에서 또는 다른 곳에서 공지된 메시지 디스패치 기술의 어느 것에 의하여 수집된다. 수신기 타입 정보는 호출 사이트로 특별하게 되는 것을 선호함으로써, 수신기 타입 정보는 다중 호출 사이트를 위하여 수집될 수 있다.
특정 사이트를 위한 수신기 타입 정보를 일단 수집한다면, 단계(703)에서 프로그램의 결과로서 일어나는 실행에 대하여 수집된다. 사용자의 입력에 의하여, 그렇지 않으면 사용자의 입력 없이, 수신기 타입 정보는 프로그램이 실행되는 시간 중(中)에 어떤 지점에서 또는 프로그램의 정상적인 말단에서 저장될 수 있다.
도 14 는, 수신기 타입 정보를 수집하는 실시예의 순서도를 보여준다. 단계(751)에서 수신기 타입 정보는 방법의 해석 중(中)에 수집된다. 일반적으로 방법을 컴파일(compile)하는 것이 장점이 있다고 결정이 생길 때까지, 자바(Java) 가상 기계에서 방법을 해석한다. 방법을 즉각적으로 컴파일(compile)하는 시스템에 있어서, 흐름은 결과로서 일어나는 실행에서 시작될 수 있다.
예를 들면 특정 호출 사이트에서 부닥쳤던 서로 다른 수신기 타입과 같은수신기 타입 정보를 해석 중(中)에 수집할 때, 하나나 그 이상의 메시지 디스패치 기술을 이용할 수 있다. 어떤 지점에 있어서, 상기 방법이 단계(753)에서 컴파일(compile)되어야만 하는지를 문제가 될 수 있다. 예를 들면, 방법이 미리-결정된 배수의 개수보다 더 많은 개수로 해석되었다면, 방법을 컴파일(compile)하여야만 하는 것을 결정할 수 있다. 그렇지 않으면, 수신기 타입 정보는 방법의 해석 중(中)에 계속해서 수집될 수 있다.
단계(755)에서, 방법을 컴파일(compile)하고 수집된 수신기 타입 정보를 방법으로 컴파일(compile)한다. 상기 방식에서, 컴파일(compile)된 방법은 수집된 타입의 정보의 이익을 실현할 수 있다. 추가로, 선호되는 실시예에 있어서, 컴퓨터 코드는 단계(757)에서 계속해서 타입 정보를 수집하는 컴파일(compile)되는 방법에서 생성된다.
선호되는 실시예에 있어서, 시스템은 또한 컴파일(compile)된 방법의 작업 세트를 또한 유지할 수 있다. 상기 작업 세트는 또한 수집된 타입 정보에서 저장됨으로써, 시스템이 유용한 처리 능력을 가질 때(즉, 시스템이 사용자 입력을 기달리고 있을 때), 프로그램의 결과로서 일어나는 실행에서 시스템은 작업 세트에서 방법을 컴파일(compile)할 수 있다.
일단 방법을 컴파일(compile)하면, 시간의 어떤 지점에서 방법을 다시-컴파일(compile)하는 장점이 있다. 단계(759)에서 방법을 다시 컴파일(compile)해야만 하는지를 결정한다. 예로써, 새로운 수신기 타입 정보의 실질적인 양을 수집한다면, 방법을 다시-컴파일(compile)하는 장점이 있을 수 있다. 선호되는 실시예에서, 방법은 상기 방법으로 인-라인되어야 하는지를 결정한다면(즉, 스스로 발견하게 한다면), 방법을 다시-컴파일(compile)한다. 인-라인닝(inlining)은 방법을 호출하는 대신에 방법을 호출 방법으로 컴파일(compile)한다는 것을 의미한다. 예를 들면, 방법을 인-라인하는 것이 유익하다고 결정된다면, 방법은 호출 방법으로 컴파일(compile)되고, 그러므로 호출 방법은 인-라인 방법의 호출 사이트를 지금 포함한다.
수신기 객체를 프로그램이 실행되는 시간까지 결정할 수 없었기 때문에, 종래의 객체-지향 시스템은 방법을 인-라인하는 것이 가능하더라도 어려웠다. 하지만, 수신기 타입 정보를 수집하는 본 발명에 있어서, 방법의 인-라인닝을 실행하는 것이 장점이 될 수 있다. 추가로, 인-라인되는 방법은 수신기 타입 정보로써 저장됨으로써, 프로그램의 결과로서 일어나는 실행은 인-라인닝 정보에 유리할 수 있고, 요구되어지다면 같은 방법을 인-라인할 수 있다.
어떤 지점에서, 수신기 타입 정보의 수집은 단계(761)에서 보여지는 것처럼멈추어지고 저장될 수 있다. 단계(761)는 순서도의 말단에서 보여지지만, 도 14 의 순서도의 어떤 지점에서 일어날 수 있다. 예를 들면, 실행 중(中)에 수집된 수신기 타입 정보는 저장될 수 있는데, 자동적으로 그렇지 않으며 사용자 입력의 직접 결과로써 저장될 수 있다. 결과적으로, 일반적으로 수신기 타입 정보의 수집은 프로그램의 정상적인 말단에서 멈출 것이다.
단계(755)에서 수집된 수신기 타입 정보는 방법으로 컴파일(compile)될 수 있었다. 도 15 는, 방법으로 컴파일(compile)되었던 수신기 타입 정보의 실시예를 보여준다. 방법(801)은 컴퓨터 코드로 컴파일(compile)되는 폴리몰픽 인-라인 캐시로써 보여진다. 일반적으로 컴파일(compile)된 코드는 원래의 기계 명령어지만, 폴리몰픽 인-라인 캐시의 일반적인 흐름이 보여지는 것처럼 될 수 있다. 객체 x 가 클래스 A 의 객체라면, 메시지를 처리하는 방법으로의 직접 호출을 만든다. 비슷하게, 표현은 또한 클래스 B 와 C 등에 대하여 존재한다. 객체 x 가 클래스 A 의 객체라면, 방법 조사 루틴으로의 호출에 의하여 조사될 것이다. 상기 새로운 수신기 타입 정보는 컴파일(compile)된 방법에 의하여 누적될 수 있음으로써, 더 나중의 컴파일(compile)은 새로운 수신기 타입 정보에 유리하다(단계(759)를 보라).
수집된 수신기 타입 정보를 저장하는 것은, 프로그램의 결과로서 일어나는 실행이 상기에서의 수집된 수신기 타입 정보에 유리하게 한다. 그러므로, 방법을 최적화한다면, 프로그램의 결과로서 일어나는 실행에서 최적화된 상태로 재빨리 돌아온다. 도 16 은, 수집된 수신기 타입 정보가 자바(Java) 클래스 파일에서 어떻게 기억될 수 있는지를 설명한다.
자바 클래스 파일(851)은 다수의 섹션을 포함한다. 헤더 섹션(853)은 매직 수(OxCAFEBABE), 마이너 버전수 및 메이저 버전 수를 포함한다. 콘스탄트 풀(855)은 상수들을 포함한다. 한 접근 정보 섹션(857)은 접근 플래그(flags)와 상기 콘스탄트 풀내의 이같은 클래스와 슈퍼클레스들로의 포인터를 포함한다. 추가로 인터페이스 파일(851), 필드 섹션(861) 및 방법 섹션(863)이 있다.
클래스 파일(851)의 끝에는 속성 섹션(865)이 있다. 네스트된 수신기 타입은 도시된 바와 같은 상기 속성 섹션내에 저장된다. 도시된 바와 같이 수신기 타입이 만나게 되는 호출 사이트에 대한 참조가 있을 수 있다. 상기 참조들은 상기 방법내의 오프셋들이다. 상기 수신기 타입은 상기 방법내에서 상기 호출 사이트가 얼마나 깊이 위치하는가에 관련하여 네스트된다. 따라서 만약 호출 사이트들이 인라인된 방법으로부터 오는 것이라면 이들 호출 사이트들은 더욱 깊게 네스트될 것이다. 바람직한 실시예에서, 상기 네스트된 수신기 타입은 수신기 타입 정보를 수집하는데 사용될 수 있는 폴리모픽 이라면 캐쉬를 닯은 텍스트이다. 자바 가상 머신 구현은 인식하지 않는 속성 섹션(865)내 모든 또는 어떠한 속성도 무시하도록 요구된다. 따라서 이같은 위치에 수집된 수신기 타입 정보를 위치시키는 것은 다른 가상 머신 구형에 나쁜 영향을 미치지 않을 것이다.
속성 섹션(865)은 인라이닝 정보를 포함하는 네스트된 수신기 타입을 도시한다. 상기 수(15)는 클래스 A, B 및 C가 (15)로 참조된 호출사이트(가령, 오프셋)에서 만나게 되었음을 나타낸다. 클래스 A의 경우, 이같은 호출사이트에서 호출된 방법이 인라인되었으며, 이는 네스트된 상기 엔트리에 의해 표시된다. 수 4 는 상기 인라인된 방법에서 4로 참조된 호출사이트에서 클래스 R이 만나게되었음을 나타낸다. 이와 유사하게, 클래스 C의 경우에는 클래스 R과 T가 상기 인라인된 방법에서 4 로 참조된 호출사이트에서 만나게되었음을 나타내는 것이다. 따라서, 수신기 타입 정보는 앞선 프로그램 실행으로부터 인라인닝 정보를 제공한다.
상기에서 설명된 바와 같이, 상기 프로그램의 뒤이은 한 실행을 위해 호출사이트에 수집된 수신기 타입 정보를 저장하는 한 인라인 데이터베이스가 제공된다. 상기 프로그램이 실행된 다음에는 이같은 정보를 다시 수집하는 시간을 들이지 않고 프로그램을 최적화하기 위해 상기 자바 가상 머신이 앞서 수집된 수신기 타입을 사용할 수 있다. 따라서, 한 자바 프로그램이 한 최적화된 상태에 도달하고 상기 클래스 파일 내에 저장된 수집된 수신기 타입 정보를 갖는때 뒤이은 실행에서 상기 프로그램이 보다 효율적으로 동작될 수 있다. 또한 클래스 파일이 머신 인디펜던트이기 때문에, 상기의 효율은 어느 한 컴퓨터 시스템 또는 아키텍쳐로 제한되지 않는다.
결론(conclusion)
상기 설명은 본 발명의 바람직한 실시예에 대한 것이며, 이에대한 변경, 대체 및 동등물이 사용될 수도 있다. 일례로서, 가령 인라인 데이터베이스 기술이 수신기 타입 정보를 수집하기 위해 폴리모픽 인라인 캐쉬를 사용하는 것으로 설명되었다. 그러나 본 발명은 어느 한 메시지 디스패치 기술로 제한되지 않으며 다른 메시지 디스패치 기술에 적용될 수도 있을 것이다. 따라서 상기 설명은 본 발명의 범위를 제한하는 것으로 받아들여서는 안된다.
도 1 은, 객체-지향 환경(object-oriented environment)에서 가상 함수(virtual function)를 포함하는 클래스의 클래스 분류 체계(class hierarchy)를 설명한다 ;
도 2 는, 객체-지향 메시지 디스패치(object-oriented message dispatch)를 위한 인-라인 캐시 기술(inline cache technique)을 설명한다 ;
도 3 는, 객체-지향 메시지 디스패치(object-oriented message dispatch)를 위한 폴리몰픽 인-라인 캐시 기술(polymorphic inline cache technique)을 설명한다 ;
도 4 는, 객체-지향 메시지 디스패치(object-oriented message dispatch)를 위한 해싱 기술(hashing technique)을 설명한다 ;
도 5 는, 본 발명의 실시예에 있어서 소프트웨어를 실행시키는데 이용될 수 있는 컴퓨터 시스템의 예(例)를 설명한다 ;
도 6 는, 도 5 의 컴퓨터 시스템의 시스템 블록 다이어그램을 설명한다 ;
도 7 은, 자바(Java) 원시 코드 프로그램을 어떻게 실행하는지를 설명한다 ;
도 8 은, 객체-지향 메시지 디스패치(object-oriented message dispatch)를 위한 사이트 특정 인-라인 캐시 기술(site specific inline cache technique)의 실시예를 설명한다 ;
도 9 는, 객체-지향 메시지 디스패치(object-oriented message dispatch)를 위한 사이트 특정 인-라인 캐시 기술(site specific inline cache technique)의 실시예에 있어서, 하이-레벨 순서도를 보여준다 ;
도 10 은, 사이트 특정 메시지 디스패치 기술(site specific message dispatch technique)의 실시예에 있어서, 하이-레벨 순서도를 보여준다 ;
도 11 은, 또 하나의 메시지 디스패치 기술이 특정 사이트에서 바람직한지를 동적으로 결정하는 순서도를 보여준다 ;
도 12 는, 부닥쳤던 서로 다른 수신기 타입의 개수를 세는데 NOP 명령어를 이용하는 사이트 특정 메시지 디스패치 기술(site specific message dispatch technique)의 실시예를 설명한다 ;
도 12 는, 부닥쳤던 서로 다른 수신기 타입의 개수를 세는데 NOP 명령어를 이용하는 사이트 특정 메시지 디스패치 기술(site specific message dispatch technique)의 실시예를 설명한다 ;
도 13 은, 프로그램의 결과로서 일어나는 실행을 위한 수신기 타입 정보를 저장하기 위하여 이용될 수 있는 인-라인 데이터베이스(inline database)의 하이-레벨 순서도를 보여준다 ;
도 14 는, 인-라인 데이터베이스(inline database)를 위한 프로그램의 해석(interpretation)과 컴파일된 실행(compiled execution) 중(中)에 수신기 타입 정보를 수집하는 순서도를 보여준다 ;
도 15 는, 객체-지향 메시지 디스패치를 위한 폴리몰픽 인-라인 캐시 기술을 포함하도록 컴파일(compile)되었던 방법을 설명한다 ;
도 16 은, 수신기 타입 정보가 클래스 파일의 속성 섹션에서 기억되었던 것을 특징으로 하는 자바(Java) 클래스 파일을 설명한다 ;
* 참조 번호 설명
1 : 클래스 분류 체계(class hierarchy) 3, 5, 7, 9, 11 : 클래스(class)
51 : 방법(method) 53 : 클래스(class)
55 : 프로로그(prolog) 57 : 방법 코드(method code)
101 : 방법(method) 103 : 스터브(stub)
151 : 방법(method) 153 : 해시 함수(hash function)
155 : 해시 테이블(hash table) 157 : 색인(index)
159 : 수신기 타입(receiver type) 161 : 메시지(message)
163 : 방법(method)
301 : 컴퓨터 시스템(computer system) 303 : 디스플레이, 모니터
305 : 스크린 307 : 컴퓨터 상자
309 : 키보드 311 : 마우스
313 : CD-ROM 드라이브 315 : CD-ROM
401 : 자바(Java) 원시 코드
403 : 바이트-코드 컴파일러(bytecode compiler)
405 : 자바(Java) 클래스 파일 407 : 자바(Java) 가상 기계
451, 453 : 방법(method) 455 : 프로로그(prolog)
457 : 방법 코드(method code) 801 : 방법(method)
851 : 방법(method)

Claims (27)

  1. 컴퓨터 시스템에 있어서 객체-지향 프로그램을 위한 메시지 디스패치(message dispatch)를 구현하는 방법에 있어서, 상기 방법은,
    - 메시지를 수신기 객체(receiver object)에게로 디스패치(dispatch)하는 제 1 방법의 사이트에서 수신기 타입 정보(receiver type information)를 수집하고, 이때, 수신기 타입 정보의 수집은 프로그램을 해석(interpretation)하는 동안 실행되며, 그리고
    - 프로그램의 차후 실행(subsequent execution)을 위해 수신기 타입 정보(receiver type information)를 저장하는
    단계들을 포함하는 것을 특징으로 하는, 컴퓨터 시스템에 있어서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  2. 제 1 항에 있어서, 상기 수신기 타입 정보는 상기 사이트로부터 메시지를 디스패치(dispatch)받았던 서로 다른 수신기 타입을 포함하는 것을 특징으로 하는, 컴퓨터 시스템에 있어서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  3. 제 1 항에 있어서, 상기 수신기 타입 정보는 상기 사이트로부터 메시지를 디스패치(dispatch)받았던 서로 다른 수신기 타입을 위한 호출 사이트들에 대한 기준(references)을 포함하는 것을 특징으로 하는, 컴퓨터 시스템에 있어서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  4. 제 1 항에 있어서, 상기 수신기 타입 정보는 인-라인 방법의 호출 사이트에서 부닥쳤던 수신기 타입들을 포함하는 것을 특징으로 하는, 컴퓨터 시스템에 있어서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  5. 제 1 항에 있어서,
    - 메시지를 수신기 객체로 디스패치(dispatch)하는 사이트를 포함하는 제 1 방법을, 언제 컴파일(compile)하는 것이 바람직한지를 결정하는
    단계를 추가로 포함하는 것을 특징으로 하는, 컴퓨터 시스템에 있어서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  6. 제 5 항에 있어서, 제 1 방법을 언제 컴파일(compile)하는 것이 바람직한지를 결정하는 단계는, 제 1 방법이 지정 횟수보다 더 많이 호출되는 시기를 결정하는 단계를 포함하는 것을 특징으로 하는, 컴퓨터 시스템에 있어서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  7. 제 1 항에 있어서,
    - 메시지를 수신기 객체에 디스패치(dispatch)하는 사이트에서 수신기 타입 정보를 포함하는 제 1 방법을 컴파일(compile)하는
    단계를 추가로 포함하는 것을 특징으로 하는, 컴퓨터 시스템에 있어서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  8. 제 7 항에 있어서, 컴파일(compile)된 제 1 방법은 계속해서 수신기 타입 정보를 수집하는 것을 특징으로 하는, 컴퓨터 시스템에 있어서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  9. 제 1 항, 또는 제 5 항 내지 제 8 항 중 어느 한 항에 있어서, 폴리몰픽 인-라인 캐시(polymorphic inline cache)에서 수신기 타입 정보를 수집하는 것을 특징으로 하는, 컴퓨터 시스템에 있어서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  10. 제 1 항, 또는 제 5 항 내지 제 8 항 중 어느 한 항에 있어서, 수신기 타입 정보는 제 1 방법을 위한 클래스 파일에 저장되는 것을 특징으로 하는, 컴퓨터 시스템에 있어서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  11. 제 10 항에 있어서, 수신기 타입 정보는 클래스 파일의 속성 섹션에서 저장되는 것을 특징으로 하는, 컴퓨터 시스템에 있어서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  12. 객체-지향 프로그램을 위한 메시지 디스패치(message dispatch)를 구현하는, 컴퓨터에 의하여 판독가능한 매체(computer readable medium)로서, 상기 컴퓨터에 의하여 판독가능한 매체는,
    - 프로그램을 해석(interpretation)하는 동안, 메시지를 수신기 객체로 디스패치(dispatch)하는 제 1 방법의 사이트에서 수신기 타입 정보를 수집하는 컴퓨터 코드(computer code), 그리고
    - 프로그램의 차후 실행을 위해 수신기 타입 정보를 저장하는 컴퓨터 코드(computer code)
    를 기억하는 것을 특징으로 하는, 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는, 컴퓨터에 의하여 판독가능한 매체.
  13. 객체-지향 프로그램을 위한 메시지 디스패치(message dispatch)를 구현하는 컴퓨터 시스템에 있어서,
    상기 컴퓨터 시스템은 프로세서와, 컴퓨터에 의하여 판독가능한 매체(computer readable medium)를 포함하고,
    상기 프로세서는 아래의 컴퓨터 코드를 실행하고, 상기 컴퓨터에 의하여 판독가능한 매체는 아래의 컴퓨터 코드를 기억하는 것을 특징으로 하는 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 컴퓨터 시스템.
    - 프로그램을 해석(interpretation)하는 동안, 메시지를 수신기 객체로 디스패치(dispatch)하는 제 1 방법의 사이트에서 수신기 타입 정보를 수집하는 컴퓨터 코드, 그리고
    - 프로그램의 차후 실행을 위해 수신기 타입 정보를 저장하는 컴퓨터 코드.
  14. 컴퓨터 시스템에서 객체-지향 프로그램을 위한 메시지 디스패치(message dispatch)를 구현하는 방법에 있어서, 상기 방법은,
    - 해석(interpretation) 중에, 메시지를 수신기 객체로 디스패치(dispatch)하는 제 1 방법의 사이트에서 수신기 타입 정보를 수집하며, 이때, 상기 수신기 타입 정보는 사이트에서 메시지를 디스패치(dispatch)받았던 각각의 서로 다른 수신기 타입과, 각각의 서로 다른 수신기 타입을 위한 사이트에 대한 기준을 포함하며,
    - 메시지를 수신기 객체로 디스패치(dispatch)하는 사이트를 포함하는 제 1 방법을 컴파일(compile)하는 것이 바람직한지를 결정하며,
    - 수신기 객체로 메시지를 디스패치하는 사이트에서 수신기 타입 정보를 포함하도록 제 1 방법을 컴파일하고, 그리고
    - 프로그램의 차후 실행을 위해 수신기 타입 정보를 저장하는
    단계들을 포함하는 것을 특징으로 하는, 컴퓨터 시스템에서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  15. 제 14 항에 있어서, 수신기 타입 정보는 인-라인 방법의 호출 사이트에서 부닥치는 수신기 타입을 포함하는 것을 특징으로 하는, 컴퓨터 시스템에서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  16. 제 14 항 또는 제 15 항에 있어서, 제 1 방법을 컴파일(compile)하는 것이 바람직한지를 결정하는 단계는, 상기 제 1 방법이 지정 횟수보다 더 많이 호출되는지를 결정하는 단계를 포함하는 것을 특징으로 하는, 컴퓨터 시스템에서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  17. 제 14 항에 있어서, 컴파일(compile)된 제 1 방법은 계속해서 수신기 타입 정보를 수집하는 것을 특징으로 하는, 컴퓨터 시스템에서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  18. 제 14 항에 있어서, 폴리몰픽 인-라인 캐시(polymorphic inline cache)에서 수신기 타입 정보를 수집하는 것을 특징으로 하는, 컴퓨터 시스템에서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  19. 제 14 항에 있어서, 상기 제 1 방법을 위한 자바 클래스 파일에 상기 수신기 타입 정보가 저장되는 것을 특징으로 하는, 컴퓨터 시스템에서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  20. 제 19 항에 있어서, 수신기 타입 정보는 자바(Java) 클래스 파일의 속성 섹션에서 저장되는 것을 특징으로 하는, 컴퓨터 시스템에서 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 방법.
  21. 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는, 컴퓨터에 의하여 판독가능한 매체(computer readable medium)에 있어서, 상기 컴퓨터에 의하여 판독 가능한 매체는,
    - 해석(interpretation) 중에, 메시지를 수신기 객체로 디스패치(dispatch)하는 제 1 방법의 사이트에서 수신기 타입 정보를 수집하는 컴퓨터 코드로서, 이때, 상기 수신기 타입 정보는 사이트에서 메시지를 디스패치(dispatch)받았던 각각의 서로 다른 수신기 타입과, 각각의 서로 다른 수신기 타입을 위한 사이트에 대한 기준을 포함하는 바의 상기 컴퓨터 코드,
    - 메시지를 수신기 객체로 디스패치(dispatch)하는 사이트를 포함하는 상기 제 1 방법을 컴파일(compile)하는 것이 바람직한지를 결정하는 컴퓨터 코드,
    - 메시지를 수신기 객체로 디스패치(dispatch)하는 사이트에서 수신기 타입 정보를 포함하도록 상기 제 1 방법을 컴파일(compile)하는 컴퓨터 코드, 그리고
    - 프로그램의 차후 실행을 위해 수신기 타입 정보를 저장하는 컴퓨터 코드
    를 기억하는 것을 특징으로 하는, 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는, 컴퓨터에 의하여 판독가능한 매체.
  22. 객체-지향 프로그램을 위한 메시지 디스패치(message dispatch)를 구현하는 컴퓨터 시스템에 있어서,
    상기 컴퓨터 시스템은 프로세서와, 컴퓨터에 의하여 판독가능한 매체를 포함하고,
    상기 프로세서는 아래의 컴퓨터 코드를 실행하고, 상기 컴퓨터에 의하여 판독가능한 매체는 아래의 컴퓨터 코드를 기억하는 것을 특징으로 하는 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 컴퓨터 시스템.
    - 해석(interpretation) 중에, 메시지를 수신기 객체로 디스패치(dispatch)하는 제 1 방법의 사이트에서 수신기 타입 정보를 수집하는 컴퓨터 코드로서, 이때, 상기 수신기 타입 정보는 사이트에서 메시지를 디스패치(dispatch)받았던 각각의 서로 다른 수신기 타입과, 각각의 서로 다른 수신기 타입을 위한 사이트에 대한 기준을 포함하는 바의 상기 컴퓨터 코드,
    - 메시지를 수신기 객체로 디스패치(dispatch)하는 사이트를 포함하는 상기 제 1 방법을 컴파일(compile)하는 것이 바람직한지를 결정하는 컴퓨터 코드,
    - 메시지를 수신기 객체로 디스패치(dispatch)하는 사이트에서 수신기 타입 정보를 포함하도록 상기 제 1 방법을 컴파일(compile)하는 컴퓨터 코드, 그리고
    - 프로그램의 차후 실행을 위해 수신기 타입 정보를 저장하는 컴퓨터 코드.
  23. 제 22 항에 있어서, 상기 수신기 타입 정보는 상기 사이트로부터 메시지를 디스패치(dispatch)받았던 서로 다른 수신기 타입을 포함하는 것을 특징으로 하는 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 컴퓨터 시스템.
  24. 제 22 항에 있어서, 상기 수신기 타입 정보는 상기 사이트로부터 메시지를 디스패치(dispatch)받았던 서로 다른 수신기 타입을 위한 호출 사이트들에 대한 기준(references)을 포함하는 것을 특징으로 하는, 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 컴퓨터 시스템.
  25. 제 22 항에 있어서, 상기 수신기 타입 정보는 인-라인 방법의 호출 사이트에서 부닥쳤던 수신기 타입들을 포함하는 것을 특징으로 하는, 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 컴퓨터 시스템.
  26. 제 22 항에 있어서, 폴리몰픽 인-라인 캐시(polymorphic inline cache)에서 수신기 타입 정보를 수집하는 것을 특징으로 하는, 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 컴퓨터 시스템.
  27. 제 22 항에 있어서, 수신기 타입 정보는 제 1 방법을 위한 클래스 파일에 저장되는 것을 특징으로 하는, 객체-지향 프로그램을 위한 메시지 디스패치를 구현하는 컴퓨터 시스템.
KR1019980042467A 1997-10-06 1998-10-07 객체-지향 시스템에서 수신기 타입을 위한 인-라인데이터베이스 KR100555116B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/944,332 1997-10-06
US8/944,332 1997-10-06
US08/944,332 US6317796B1 (en) 1997-10-06 1997-10-06 Inline database for receiver types in object-oriented systems

Publications (2)

Publication Number Publication Date
KR19990037015A KR19990037015A (ko) 1999-05-25
KR100555116B1 true KR100555116B1 (ko) 2007-01-03

Family

ID=25481207

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980042467A KR100555116B1 (ko) 1997-10-06 1998-10-07 객체-지향 시스템에서 수신기 타입을 위한 인-라인데이터베이스

Country Status (6)

Country Link
US (2) US6317796B1 (ko)
EP (1) EP0908815B1 (ko)
JP (1) JP2000003280A (ko)
KR (1) KR100555116B1 (ko)
CN (1) CN1237737A (ko)
DE (1) DE69810056T2 (ko)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
FR2796178B1 (fr) * 1999-07-06 2001-08-03 Schlumberger Systems & Service Procede de realisation de liens dynamiques dans une machine virtuelle
US6754887B1 (en) * 1999-10-22 2004-06-22 International Business Machines Corporation Methods for implementing virtual bases with fixed offsets in object oriented applications
JP2001243182A (ja) * 2000-02-29 2001-09-07 Nec Corp サーバシステム及びWebコンテンツとサーバシステムとの連動方法
US7913286B2 (en) * 2000-10-20 2011-03-22 Ericsson Television, Inc. System and method for describing presentation and behavior information in an ITV application
JP3664478B2 (ja) * 2001-03-29 2005-06-29 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置
DE10131944A1 (de) * 2001-07-02 2003-01-16 Siemens Ag Verfahren zur Verarbeitung von Daten
US7290254B2 (en) * 2003-03-25 2007-10-30 Intel Corporation Combining compilation and instruction set translation
US7386686B2 (en) * 2003-03-28 2008-06-10 Intel Corporation Inlining with stack trace cache-based dynamic profiling
US7478402B2 (en) * 2004-02-12 2009-01-13 Microsoft Corporation Configurable message pipelines
US7526502B2 (en) * 2004-09-10 2009-04-28 Microsoft Corporation Dynamic call site binding
US7530059B2 (en) * 2005-02-18 2009-05-05 International Business Machines Corporation Method for inlining native functions into compiled java code
US7818668B2 (en) * 2005-04-19 2010-10-19 Microsoft Corporation Determining fields for presentable files
US20060242654A1 (en) * 2005-04-22 2006-10-26 Lund Kasper V Process and apparatus for sharing inline caches
CN100342379C (zh) * 2005-05-25 2007-10-10 北京四方继保自动化股份有限公司 一种实现iec61850信息间接接入实时数据库的方法
US8291395B2 (en) * 2006-03-31 2012-10-16 Apple Inc. Fast function call dispatching
US8024720B2 (en) * 2006-04-17 2011-09-20 International Business Machines Corporation Speculative inlining of overridden methods without using profiling information
US8307379B2 (en) 2006-12-21 2012-11-06 International Business Machines Corporation Determining an extension to use to process an input object to a call in a program
US7634499B2 (en) * 2007-01-06 2009-12-15 Objectivity, Inc. Method, system and computer-readable media for repairing data record corruption
US20090182689A1 (en) * 2008-01-15 2009-07-16 Microsoft Corporation Rule-based dynamic operation evaluation
US8291397B2 (en) * 2008-04-02 2012-10-16 International Business Machines Corporation Compiler optimized function variants for use when return codes are ignored
US9748771B2 (en) * 2012-04-12 2017-08-29 International Business Machines Corporation Plug arrangements for alleviating peak loads
US20130332434A1 (en) * 2012-06-11 2013-12-12 Actian Netherlands, B.V. System and method using partial just-in-time complation to resolve memory access pattern problems in hash table probing
US9256410B2 (en) 2012-08-09 2016-02-09 Apple Inc. Failure profiling for continued code optimization
US9569185B2 (en) 2014-02-07 2017-02-14 Oracle International Corporation Changing de-optimization guard representation during the compilation process
KR101827143B1 (ko) * 2016-08-26 2018-02-08 강원대학교산학협력단 객체의 바이너리 호환성을 유지하는 컴퓨팅 장치 및 방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5361350A (en) * 1991-12-12 1994-11-01 International Business Machines Corporation Object oriented method management system and software for managing class method names in a computer system
JPH07200296A (ja) * 1993-12-13 1995-08-04 Microsoft Corp オブジェクト接続を動的に発生する方法及びシステム

Family Cites Families (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57153339A (en) * 1981-03-18 1982-09-21 Hitachi Ltd Information processor
US4399507A (en) * 1981-06-30 1983-08-16 Ibm Corporation Instruction address stack in the data memory of an instruction-pipelined processor
JPS5856153A (ja) 1981-09-30 1983-04-02 Fujitsu Ltd サブル−チンリタ−ン方式
US5694603A (en) * 1982-09-28 1997-12-02 Reiffin; Martin G. Computer memory product with preemptive multithreading software
US4658351A (en) * 1984-10-09 1987-04-14 Wang Laboratories, Inc. Task control means for a multi-tasking data processing system
US5329611A (en) * 1990-05-22 1994-07-12 International Business Machines Corp. Scalable flow virtual learning neurocomputer
US5265206A (en) * 1990-10-23 1993-11-23 International Business Machines Corporation System and method for implementing a messenger and object manager in an object oriented programming environment
US5379426A (en) * 1991-01-25 1995-01-03 Sun Microsystems, Inc. Method and apparatus for object oriented interprocess message switching
US5297284A (en) * 1991-04-09 1994-03-22 Microsoft Corporation Method and system for implementing virtual functions and virtual base classes and setting a this pointer for an object-oriented programming language
US5421016A (en) 1991-12-12 1995-05-30 International Business Machines Corporation System and method for dynamically invoking object methods from an application designed for static method invocation
US5274817A (en) * 1991-12-23 1993-12-28 Caterpillar Inc. Method for executing subroutine calls
DE4211966A1 (de) 1992-04-09 1993-10-14 Philips Patentverwaltung Anordnung zum Abspeichern und Auslesen von Rücksprungdaten
US5404525A (en) * 1992-09-30 1995-04-04 International Business Machines Corporation Efficient method router that supports multiple simultaneous object versions
US5991538A (en) * 1992-12-18 1999-11-23 Inprise Corporation System for generating and using programs in an object-oriented environment with a message dispatch architecture
US5367685A (en) * 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
US5442793A (en) * 1993-02-26 1995-08-15 Microsoft Corporation Method and system for locating an inherited virtual function member of a derived class
JP3499252B2 (ja) * 1993-03-19 2004-02-23 株式会社ルネサステクノロジ コンパイル装置及びデータ処理装置
US5517645A (en) * 1993-11-05 1996-05-14 Microsoft Corporation Method and system for interfacing components via aggregate components formed by aggregating the components each with an instance of a component manager
US5475822A (en) * 1993-11-15 1995-12-12 Motorola, Inc. Data processing system for resuming instruction execution after an interrupt and method therefor
US5742848A (en) * 1993-11-16 1998-04-21 Microsoft Corp. System for passing messages between source object and target object utilizing generic code in source object to invoke any member function of target object by executing the same instructions
US5600838A (en) * 1994-01-18 1997-02-04 Sybase, Inc. Object oriented dispatch and supercall process and arrangement
US5522071A (en) * 1994-01-18 1996-05-28 Sybase, Inc. Run-time message redirection for invoking object oriented methods based on alternate dispatch variable
US5682532A (en) * 1994-05-02 1997-10-28 Microsoft Corporation System and method having programmable containers with functionality for managing objects
US5734903A (en) * 1994-05-13 1998-03-31 Apple Computer, Inc. System and method for object oriented message filtering
US5634046A (en) * 1994-09-30 1997-05-27 Microsoft Corporation General purpose use of a stack pointer register
US5586328A (en) * 1994-10-21 1996-12-17 Microsoft Corporation Module dependency based incremental compiler and method
US5748964A (en) * 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
US5590331A (en) 1994-12-23 1996-12-31 Sun Microsystems, Inc. Method and apparatus for generating platform-standard object files containing machine-independent code
AUPN191395A0 (en) * 1995-03-22 1995-04-27 M.I.M. Holdings Limited Atmospheric mineral leaching process
US5606682A (en) * 1995-04-07 1997-02-25 Motorola Inc. Data processor with branch target address cache and subroutine return address cache and method of operation
JP3130446B2 (ja) * 1995-05-10 2001-01-31 松下電器産業株式会社 プログラム変換装置及びプロセッサ
JP2857600B2 (ja) 1995-05-11 1999-02-17 松下電器産業株式会社 プロセッサ及びプログラム翻訳装置
US5774721A (en) * 1995-09-08 1998-06-30 Iq Systems, Inc. Method of communication between processors in a distributed processing system having a host processor and at least one object oriented processor
US5794044A (en) * 1995-12-08 1998-08-11 Sun Microsystems, Inc. System and method for runtime optimization of private variable function calls in a secure interpreter
US5822606A (en) * 1996-01-11 1998-10-13 Morton; Steven G. DSP having a plurality of like processors controlled in parallel by an instruction word, and a control processor also controlled by the instruction word
US5784553A (en) * 1996-01-16 1998-07-21 Parasoft Corporation Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs
EP0976029A2 (en) * 1996-01-24 2000-02-02 Sun Microsystems, Inc. A processor for executing instruction sets received from a network or from a local memory
US5768593A (en) * 1996-03-22 1998-06-16 Connectix Corporation Dynamic cross-compilation system and method
JPH09282167A (ja) * 1996-04-10 1997-10-31 Internatl Business Mach Corp <Ibm> メソッド起動方法及びメソッド起動制御装置
US5761491A (en) * 1996-04-15 1998-06-02 Motorola Inc. Data processing system and method for storing and restoring a stack pointer
GB2312766A (en) * 1996-05-01 1997-11-05 Ibm Transactional layer for object management system
US5960197A (en) * 1996-05-09 1999-09-28 Sun Microsystems, Inc. Compiler dispatch function for object-oriented C
US5884083A (en) * 1996-09-20 1999-03-16 Royce; Robert Computer system to compile non-incremental computer source code to execute within an incremental type computer system
US6243763B1 (en) * 1996-11-12 2001-06-05 International Business Machines Corporation Method for sending a message to a group and the group broadcasts the message to its members or references within an object-oriented system
US5884316A (en) * 1996-11-19 1999-03-16 Microsoft Corporation Implicit session context system with object state cache
US5937193A (en) * 1996-11-27 1999-08-10 Vlsi Technology, Inc. Circuit arrangement for translating platform-independent instructions for execution on a hardware platform and method thereof
CA2194848C (en) * 1997-01-10 2003-12-23 Jonathan Layes Condition handling using script interpreters
US5907707A (en) * 1997-01-14 1999-05-25 International Business Machines Corporation Object model for Java
US6044220A (en) * 1997-02-25 2000-03-28 Motorola, Inc. Method and apparatus for operating a data processor to execute software written using a foreign instruction set
US5905895A (en) * 1997-03-07 1999-05-18 International Business Machines Corporation Method and system for optimizing non-native bytecodes before bytecode interpretation
US5898850A (en) * 1997-03-31 1999-04-27 International Business Machines Corporation Method and system for executing a non-native mode-sensitive instruction within a computer system
US5845298A (en) * 1997-04-23 1998-12-01 Sun Microsystems, Inc. Write barrier system and method for trapping garbage collection page boundary crossing pointer stores
US5953736A (en) * 1997-04-23 1999-09-14 Sun Microsystems, Inc. Write barrier system and method including pointer-specific instruction variant replacement mechanism
US6021273A (en) * 1997-06-30 2000-02-01 Sun Microsystems, Inc. Interpreter generation and implementation utilizing interpreter states and register caching
US6513156B2 (en) * 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6385660B2 (en) * 1997-10-06 2002-05-07 Sun Microsystems, Inc. Site specific message dispatch in object-oriented systems
US5933635A (en) 1997-10-06 1999-08-03 Sun Microsystems, Inc. Method and apparatus for dynamically deoptimizing compiled activations
US6009517A (en) * 1997-10-06 1999-12-28 Sun Microsystems, Inc. Mixed execution stack and exception handling
US6553426B2 (en) * 1997-10-06 2003-04-22 Sun Microsystems, Inc. Method apparatus for implementing multiple return sites
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US5970249A (en) * 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US6170083B1 (en) * 1997-11-12 2001-01-02 Intel Corporation Method for performing dynamic optimization of computer code
US6118940A (en) * 1997-11-25 2000-09-12 International Business Machines Corp. Method and apparatus for benchmarking byte code sequences
US6332216B1 (en) * 1999-03-09 2001-12-18 Hewlett-Packard Company Hybrid just-in-time compiler that consumes minimal resource

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5361350A (en) * 1991-12-12 1994-11-01 International Business Machines Corporation Object oriented method management system and software for managing class method names in a computer system
JPH07200296A (ja) * 1993-12-13 1995-08-04 Microsoft Corp オブジェクト接続を動的に発生する方法及びシステム

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
ACM Trans. Programming Languages and Dystem 18(4): 355-400, 1996 *
ECOOP ''91 Conference Proceedings, 1991.07 *
Published in the proceedings of OOPSLA''95, 1995.10 *
Reconciling responsiveness with preformance in pure object-oriented languages" JULY 1996 *

Also Published As

Publication number Publication date
EP0908815B1 (en) 2002-12-11
EP0908815A3 (en) 2000-06-07
JP2000003280A (ja) 2000-01-07
DE69810056T2 (de) 2003-04-30
US20040244009A1 (en) 2004-12-02
US7137123B2 (en) 2006-11-14
KR19990037015A (ko) 1999-05-25
US6317796B1 (en) 2001-11-13
CN1237737A (zh) 1999-12-08
EP0908815A2 (en) 1999-04-14
DE69810056D1 (de) 2003-01-23

Similar Documents

Publication Publication Date Title
KR100555116B1 (ko) 객체-지향 시스템에서 수신기 타입을 위한 인-라인데이터베이스
US6385660B2 (en) Site specific message dispatch in object-oriented systems
US6968546B2 (en) Debugging support using dynamic re-compilation
US6966057B2 (en) Static compilation of instrumentation code for debugging support
EP3465428B1 (en) Sample driven profile guided optimization with precise correlation
US6381737B1 (en) Automatic adapter/stub generator
US8769511B2 (en) Dynamic incremental compiler and method
US9495136B2 (en) Using aliasing information for dynamic binary optimization
JPH09330233A (ja) 最適目的コード生成方法
WO2005008479A2 (en) Shared code caching method and apparatus for program code conversion
JPH11312097A (ja) メモリリ―ク及び他のランタイム情報を発見するためのオブジェクトヒ―プ解析技術
Burrows et al. Efficient and flexible value sampling
GB2404043A (en) Shared code caching for program code conversion
Gal et al. Incremental dynamic code generation with trace trees
Kistler Continuous program optimization
US20080052691A1 (en) Communicating with and recovering state information from a dynamic translator
JP2013105256A (ja) 情報処理装置、プロファイル対象決定プログラム及び方法
US6308324B1 (en) Multi-stage profiler
JP5129904B2 (ja) 実行時における関数の実行性能を増大させるための方法、計算機システム、実行時における関数の実行性能を増大させるための、コンピュータプログラムを格納するコンピュータ読み取り可能媒体
Yeh et al. Performing file prediction with a program-based successor model
US20040205320A1 (en) Method and apparatus for refining an alias set of address taken variables
Tikir et al. PMaC binary instrumentation library for PowerPC/AIX
Porto et al. Trace execution automata in dynamic binary translation
Pierce Cache behavior in the presence of speculative execution: the benefits of misprediction
Nakamura et al. Performance Study of Kotlin and Java Programs with Bytecode Analysis

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
FPAY Annual fee payment

Payment date: 20130117

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20140121

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20150119

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20160119

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20170119

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20180118

Year of fee payment: 13

EXPY Expiration of term