KR100589798B1 - 중지동안 바이트 코드 최적화 장치 및 방법 - Google Patents

중지동안 바이트 코드 최적화 장치 및 방법 Download PDF

Info

Publication number
KR100589798B1
KR100589798B1 KR1019980041791A KR19980041791A KR100589798B1 KR 100589798 B1 KR100589798 B1 KR 100589798B1 KR 1019980041791 A KR1019980041791 A KR 1019980041791A KR 19980041791 A KR19980041791 A KR 19980041791A KR 100589798 B1 KR100589798 B1 KR 100589798B1
Authority
KR
South Korea
Prior art keywords
routine
compilation
routines
computer program
list
Prior art date
Application number
KR1019980041791A
Other languages
English (en)
Other versions
KR19990036882A (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 KR19990036882A publication Critical patent/KR19990036882A/ko
Application granted granted Critical
Publication of KR100589798B1 publication Critical patent/KR100589798B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/48Incremental compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation

Landscapes

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

Abstract

컴퓨터 프로그램의 실행시 유휴기간동안 루틴과 관련된 바이트 코드를 동적으로 컴파일링하는 장치 및 방법이 발표된다. 기술된 방법은 인터프리팅된 바이트 코드와 컴파일링된 바이트 코드를 실행하도록 배열된 컴퓨터 시스템에서 사용하기에 특히 적합하다. 어떤 구체예에서 동적으로 컴파일링되는 루틴이 하나이상의 리스트에서 참조된다. 최고의 우선순위 루틴의 컴파일링이 먼저 촉진되도록 리스트의 우선순위가 결정된다. 한 구체예에서, 제 1 컴파일 리스트가 컴퓨터 프로그램의 처리에 앞서 생성되고 다른 하나가 컴퓨터 프로그램의 처리동안 생성되는 한쌍의 컴파일 리스트가 제공된다.

Description

중지동안 바이트 코드 최적화 장치 및 방법
본 발명은 소프트웨어 응용프로그램 실행을 최적화하는 장치 및 방법에 관계한다. 특히, 본 발명은 컴퓨터 시스템 사용을 최적화하기 위해서 컴퓨터 프로그램의 전체 실행에서 중지동안 컴파일링 또는 기타 활동을 수행하는 장치 및 방법에 관계한다.
컴퓨터 시스템은 소프트웨어 응용프로그램과 같은 자원을 공유할 수 있도록 네트워크, 예컨대 근거리 통신망, 인트라넷 및 인터넷을 통해 연결된다. 일반적으로, 소프트웨어 응용프로그램 또는 컴퓨터 프로그램은 각 컴퓨터 시스템이 특정 포맷의 소프트웨어 응용프로그램을 필요로 한다는 사실 때문에 상이한 컴퓨터 시스템에 상이한 포맷으로 전달될 수 있다. 혹은, 컴퓨터 시스템은 다양한 컴퓨터 시스템에 의해 한가지 형태의 컴퓨터 프로그램이 활용될 수 있게 하기 위해서 기계독립성 형태, 즉 바이트 코드로서 컴퓨터 시스템에 전달될 수 있다.
컴퓨터 프로그램이 기계 독립성 형태로 전달될 경우 프로그램은 직접 인터프리팅되거나 기계종속코드, 즉 "기계코드" 로 변환된다. 직접 인터프리팅된 프로그램은 기계코드로 변환된 프로그램보다 컴퓨터 시스템에서 더 적은 공간을 점유한다. 그러나, 직접 인터프리팅된 프로그램은 대개의 경우에 기계코드로 변환된 프로그램보다 느린 실행속도를 갖는다. 이와 같이 컴퓨터 프로그램을 기계코드로 변환시키지 않고 컴퓨터 프로그램을 직접 인터프리팅할지 여부의 결정은 실행속도에 대한 공간의 상대적 중요성에 기초한다.
컴파일 방법중 하나는 실행을 위해 처음 호출될 때 능동적으로 수행중인 프로그램내 루틴을 컴파일링하는 것이다. 이 방법은 동적 또는 "실행시간" 컴파일링이라 불린다. 동적 컴파일링의 한가지 문제점은 프로그램과 관련된 컴파일 오버헤드가 과도하게 될 수 있다는 점이다. 즉, 많은 수의 루틴이 동시에 컴파일링 되어야 할 때 프로그램의 컴파일링과 관련된 오버헤드가 프로그램의 전체 실행에 악효과를 주는 레벨에 있을 수 있다. 일반적으로, 컴파일링을 위해 시스템 자원을 남용하면 프로그램의 실행이 덜 효율적이고 느려진다. 추가로, 능동 프로그램 실행동안 루틴을 컴파일링하는 컴파일러에 의해 소모된 시간은 프로그램의 실행에 사용자 가시적 중지를 도입할 수 있다. 예컨대, 프로그램의 컴파일 오버헤드가 높을동안 사용자가 프로그램에 지령을 입력하면 사용자 입력에 대한 응답의 지연이 있을 수 있다. 이러한 응답지연은 사용자에게 귀찮을 것이다. 그러므로 컴퓨터 프로그램에서 루틴의 동적 컴파일링의 효율을 증가시키는 메카니즘이 바람직할 것이다.
컴퓨터 프로그램의 실행에서 유휴기간동안 루틴을 동적으로 컴파일링 하는 방법 및 장치가 발표된다. 기술된 방법은 인터프리팅된 바이트 코드와 컴파일링된 바이트 코드를 둘다 실행하도록 배열된 컴퓨터 시스템에서 사용하기에 특히 적합하다. 본 발명의 한 측면에 따르면 컴퓨터 프로그램의 처리에서 유휴기간 또는 낮은 오버헤드 기간이 식별된다. 컴파일링용으로 식별된 하나이상의 루틴는, 식별된 유휴기간동안 동적으로 컴파일링된다. 어떤 구체예에서 동적으로 컴파일링될 루틴이 하나이상의 리스트에서 참조된다. 리스트 우선순위가 정해져서 최고 우선순위 루틴의 컴파일링이 먼저 촉진된다. 한 구체예에서 한쌍의 컴파일링 리스트가 제공되는데 제 1 컴파일링 리스트는 컴퓨터 프로그램 처리에 앞서 생성된 데이타베이스 리스트이고 다른 하나는 컴퓨터 실행동안 생성된 실행 리스트이다.
한 구체예에서, 루틴 컴파일링 동안 인터럽트가 수신되면 예정된 기간동안 컴파일링이 계속된다. 예정된 기간동안 컴파일링이 완결되지 않으면 컴파일링이 중지된다.
본 발명의 또다른 측면에 따르면 컴퓨터 프로그램의 처리에서 저활성 기간동안 바이트 코드화 루틴을 동적으로 컴파일링하기 위한 컴퓨터 시스템은 저활성 기간을 식별하는 장치를 포함한다. 이 시스템은 저활성 기간동안 컴파일링할 루틴 식별 장치를 더욱 포함한다. 저활성 기간동안 식별된 루틴의 컴파일링을 개시하도록 컴파일러가 배열된다. 한 구체예에서 시스템은 식별된 루틴의 컴파일링동안 수신된 인터럽트 신호를 취급하도록 배열된 인터럽트 프로세서와 필요할 때 루틴의 컴파일링을 중지시키는 장치를 포함한다.
프로그램이 활발히 실행중일 때 바이트 코드화 프로그램과 관련된 루틴의 동적 컴파일링은 프로그램을 비효율적으로 실행시킬 수 있다. 이러한 비효율성은 컴파일러 또는 컴파일 오버헤드에 의한 이용가능한 컴퓨터 시스템 자원의 과도한 사용의 결과일 수 있다. 능동 프로그램 실행동안 루틴을 동적으로 컴파일링하는 컴파일러에 의해 소모되는 시간은 프로그램 실행을 지연시킬 수 있다. 이러한 지연이 사용자에게 인식될 때 특히 지연기간이 200밀리초 이상 길 경우 이러한 지연은 허용할 수 없다고 간주될 수 있다.
이러한 프로그램의 성능을 향상시키는 한가지 방법은 인터프리팅된 바이트코드와 동적 컴파일링된 바이트 코드의 혼합을 허용하는 것이다. 이러한 시스템내에서 특정 루틴을 컴파일링 하는 것이 효과적인 시기를 결정해야 한다. 본 발명에서 컴파일 오버헤드가 비교적 높을 때 컴퓨터 프로그램에서 루틴의 동적 컴파일링을 지연시키는 방법 및 장치가 기술된다. 특히, 컴파일 오버헤드가 너무 높다고 결정될 때 적어도 일부 루틴의 동적 컴파일링이 프로그램 전체 처리에서 비교적 낮은 활성기간이 있을 때까지 지연될 수 있다.
컴파일링이 예정된 적어도 일부 바이트 코드화 루틴의 동적 컴파일링을 지연함으로써 컴퓨터 자원은 더욱 효과적으로 활용될 수 있다. 컴퓨터 프로그램은 처리동안 비활성 상태에 있을 때, 예컨대 사용자로 부터의 입력을 대기하는 동안 컴퓨터 프로그램이 유휴상태에 있을 때 프로그램의 실행과 관련된 전체 자원 활용 오버헤드는 비교적 낮다. 이러한 낮은 활성기간동안 이용가능한 시스템자원은 컴파일링될 루틴으로 식별된 루틴의 컴파일링을 수행하는데 사용될 수 있다. 컴퓨터 프로그램의 컴파일 오버헤드가 낮을동안 컴파일링 수행은 전체 시스템 자원의 효과적 사용을 허용하며 사용자가 인식할 수 있는 지연을 초래하지 않는다.
도 1 에서, 바이트 코드가 동적으로 컴파일링될 수 있게 하는 컴퓨터 시스템이 기술된다. 바이트 코드(144)는 실행시간에 컴퓨터 시스템(146)에 입력으로서 제공된다. 컴퓨터 프로그램으로서 조직될 수 있는 바이트 코드(144)는 루틴과 같은 해석가능한 세그멘트로 배열된다. 한 구체예에서 바이트 코드(144)는 가상기계내의 컴파일 시간 환경에 의해 실행시간 환경, 예컨대 동일한 가상기계의 컴퓨터 시스템(146)에 제공될 수 있다. 본 발명을 구현시키는 적당한 가상기계가 도 6 을 참조로 상술될 것이다.
바이트 코드(144)가 컴퓨터 시스템(146)에 제공될 때 인터프리터(148)를 사용하여 바이트 코드(144)가 처리될 수 있다. 혹은 컴파일러(150)에 의해 바이트 코드(144)가 컴파일링 되어서 컴파일링된 바이트 코드(152)를 생성할 수 있다. 바이트 코드(144)는 동시에 처리하기 위해서 인터프리터(148)와 컴파일러(150)에 둘다 입력될 수도 있다.
루틴이 호출될 때마다 루틴이 컴파일링 되지 않으면 루틴과 관련된 바이트 코드(144)는 인터프리터(148)를 사용하여 인터프리팅 된다. 한 구체예에서 루틴이 인터프리팅되는 횟수의 측정값이 유지된다. 이러한 측정값은 각 인터프리팅된 루틴에 포함되며 루틴이 인터프리팅 될 때마다 증가되는 호출 카운터를 포함한다.
루틴이 인터프리팅 되는 횟수가 한계값을 초과할 때 루틴은 컴파일러(150)를 사용하여 컴파일링 될 수 있다. 빈번히 실행된 코드(150)에 포함된 루틴을 반복 인터프리팅하는 것은 인터프리팅된 바이트 코드(154)가 컴파일링된 코드보다 느리고 비효율적으로 실행되므로 비효율적이다. 빈번히 실행된 코드(158)를 컴파일링 하면 빈번히 실행된 코드(158)에 포함된 루틴이 더 효율적으로 실행될 수 있는데, 그 이유는 루틴 컴파일링으로 수득된 시간 절감이 컴파일 과정과 관련된 컴파일 오버헤드를 보상하기 때문이다.
실행시간동안, 컴파일러(150)를 사용하여 바이트 코드(144)를 컴파일링 하는 것과 관련된 컴파일 오버헤드는 컴파일 오버헤드가 예정된 최대 허용수준을 초과하지 않도록 모니터링된다. 컴파일 오버헤드는 컴파일링에 필요한 프로세서 시간 퍼센트로 표현된다. 예정된 최대 오버헤드 수준은 특정시스템의 특징 및 필요조건에 따라 다양하게 변화될 수 있다. 예컨대 고실행성능을 제공하는 가상기계의 경우에 예정된 최대 수준은 전체 시스템 자원의 10 내지 30%이다. 바이트 코드(144) 컴파일링과 관련된 오버헤드가 예정된 최대 수준을 초과할 때 컴파일 오버헤드가 더 낮다면 컴파일링될 루틴이 실행 리스트 또는 대기행렬에 위치될 수 있다. 이러한 실행 리스트는 컴파일 오버헤드가 더 낮을 때 처리될 수 있는 루틴의 대기 리스트에 있다. 즉, 실행 리스트에 있는 루틴은 컴파일 오버헤드가 더 낮을 때 컴파일링 될 수 있다. 특히, 컴퓨터 시스템(146)과 관련된 전체 연산 오버헤드와 컴파일 오버헤드 둘다가 낮은 레벨에 있을 때 실행 리스트가 처리될 수 있다.
프로그램의 전체 실행에서 유휴 기간동안, 예컨대 바이트 코드 처리시 발생하는 유휴 기간동안 바이트 코드가 컴파일링 될 수 있을 때 프로그램은 중지가 일어나는 시기를 결정하도록 모니터링 될 수 있다. 도 2 에서 중지동안 코드 컴파일링 능력을 포함하는 프로그램 실행 과정이 기술될 것이다. 프로그램의 실행은 단계(210)에서 시작되고 단계(212)에서 프로그램의 실행이 유휴기간에 도달했는지 여부가 결정된다.
유휴기간은 프로그램이 비활성 상태에 있는 동안 프로그램 처리의 중지이다. 프로그램은 관련 운영 시스템으로 부터 타이머 신호와 같은 작용을 대기하거나 능동적인 계속 실행에 앞서 사용자 입력을 대기할 수 있다. 일반적으로 프로그램이 사용자로 부터의 작용을 대기하는 동안 중지가 일어난다. 유휴기간의 길이는 다양할 수 있다. 예컨대 유휴기간의 길이는 수밀리초 내지 반초이다. 프로그램이 사용자로 부터의 입력을 대기하기 때문에 유휴기간이 발생할 경우에 유휴기간은 수초, 수분, 수일 이상의 크기로 훨씬 길어질 수 있다.
일반적으로, "유용한" 중지를 인식하는데 한계값이 사용된다. 예컨대, 실제 중지가 예정된 수밀리초동안 지속된다면 시스템은 이 중지를 더 오래 계속되는 유용한 중지로서 인식할 수 있다. 중지가 계속될 때 중지를 이용하기 위해서 컴파일링이 계속될 수 있다. 이와 같이 프로그램의 실행이 유휴 기간에 도달하였는지에 대한 결정은 단계(212)에서 저활성 기간이 한계값, 예컨대 100밀리초 또는 반초에 도달하였는지 결정하는 것이다.
일반적으로, 유휴기간 또는 저활성 기간의 발생은 프로그램 실행과 관련된 중앙처리장치(CPU)의 사용을 모니터링 함으로써 식별될 수 있다. 혹은, 유휴 기간의 존재가 전체 컴퓨터 시스템과 관련된 스레드(thread)의 상태를 모니터링 함으로써 결정될 수 있다.
CPU 사용이 비활성 기간을 식별하도록 모니터링될 때 CPU 사용이 사용한계 이하가 될 때를 결정하도록 CPU 사용이 모니터링된다. 사용한계, 즉 "저활성 한계값"은 다양하다. 예컨대 커서를 주기적으로 깜박거리게 하는 것과 같은 낮은 오버헤드의 활성만이 실행될 때 프로그램이 유휴상태라고 간주되도록 사용한계값이 설정될 수 있다. 한 구체예에서 프로그램 처리동안 CPU 사용이 전체 시스템 자원의 약 20%인 사용한계값 이하가 될 때 프로그램의 전체 처리는 저활성 기간에 있다고 간주된다. 이러한 시기에 시스템 자원의 80% 이상이 사용가능하다.
스레드 상태 모니터링은 스레드 스케쥴러를 조사하는 것이다. 스레드 스케쥴러가 모든 스레드 차단을 표시할 때, 즉 모든 스레드가 "실행불능한" 상태에 있을 때 프로그램은 CPU시간을 소모하지 않는다. CPU시간은 스레드가 해제되는 순간인 신호가 도달될 때까지 소모되지 않는다. CPU시간이 소모되지 않을 때 프로그램은 유휴기간에 있다.
단계(212)에서 프로그램의 실행이 유휴기간에 있지 않다고 결정되면 단계(210)로 진행하여 프로그램은 계속 실행된다. 대신에 단계(212)에서 프로그램이 유휴기간에 있다고 결정되면 단계(214)에서 컴파일링과 같은 계류중인 업무가 있는지 결정이 행해진다. 즉, 유휴기간동안 일어날것으로 예정된 태스크가 있는지 여부가 결정된다. 태스크는 컴파일링 및 불필요 정보수집과 같은 다양한 태스크를 포함한다. 이러한 태스크는 시스템내에 상대적 중요성에 따라 우선순위가 정해진다. 기술된 구체예에서 태스크는 계류중인 컴파일링 측면에서 기술될 것이다.
계류중인 컴파일링은 컴파일링의 "후보" 루틴의 리스트인 데이타베이스 리스트와 실행 리스트로 부터 수득될 수 있다. 데이타베이스 리스트 생성장치는 데이타베이스가 인라인 될 때 데이타베이스 리스트를 생성하는 장치와 같은 컴파일링된 루틴을 모니터링 하는 시스템을 포함한다. 이러한 시스템에서 데이타베이스 리스트는 프로그램의 이전 실행동안 컴파일링되는 루틴의 "작업 집합" 또는 "후보 집합" 이며 프로그램의 후속 실행에서 컴파일링될 루틴으로서 고려된다. 또다른 장치가 데이타베이스 리스트 형성 또는 첨가에 사용될 수 있다. 어떤 구체예에서, 불필요 정보수집의 수행과 같은 기타 태스크를 데이타베이스 리스트가 포함할 수 있다.
실행 리스트는 프로그램의 현재 실행동안 생성되는 루틴의 대기 행렬 또는 루틴의 후보집합이다. 실행 리스트는 컴파일 오버헤드가 너무 높아서 루틴이 컴파일링 되게 할 수 없다고 간주되는 사실로 인하여 컴파일링이 억제된 루틴을 포함하거나 식별할 수 있다. 실행 리스트는 루틴이 인터프리팅되는 횟수를 추적하며 인터프리팅된 루틴과 관련된 호출 카운터를 조사하는 별도의 스위퍼 프로세스에 의해 리스트에 주기적으로 첨가되는 루틴을 식별할 수도 있다. 일반적으로, 루틴이 호출될 때마다 루틴 호출 카운터가 증가된다. 스위퍼는 최근에 호출되지 않은 루틴의 호출 카운터가 컴파일링에 적합한 루틴으로 최근에 간주되는 레벨에 있는지를 결정하기 위해서 호출 카운터를 주기적으로 조사한다. 한계값, 예컨대 루틴이 컴파일링 되도록 도달되어야 하는 루틴 호출횟수가 프로그램 실행동안 변할 수 있기 때문에 최근의 한계값 이상인 호출 카운터를 갖는 루틴이 스위퍼에 의해 실행리스트에 첨가될 수 있다. 다른 장치가 실행 리스트 생성 또는 첨가에 사용될 수 있다. 어떤 구체예에서, 실행 리스트는 불필요 정보수집과 같은 태스크에 추가적으로 계류중인 컴파일링을 포함하는 일반 작업 리스트와 조합될 수 있다.
단계(214)에서 실행리스트 및 데이타베이스 리스트 조사를 통해서 계류중인 태스크가 없다고 결정될 때 단계(210)로 복귀하여 프로그램은 계속 실행된다. 반면에 계류중인 태스크가 있다고 결정되면 단계(216)에서 컴파일링과 같은 태스크가 수행된다. 계류중인 컴파일링 수행과 관련된 단계는 도 3 을 참조로 기술될 것이다. 계류중인 컴파일링이 수행된 이후에 단계(210)로 진행하여 프로그램이 계속 실행된다.
루틴 컴파일링과 컴파일링된 루틴 호출이 루틴 인터프리팅보다 효과적이다고 결정될 때 루틴이 컴파일링 된다. 이러한 컴파일링은 과도한 컴파일 오버헤드를 방지하기 위해서 전체 프로그램 실행동안 유휴 기간이 있을 때까지 지연될 수 있다. 도 3 은 지연된 루틴 컴파일링을 수행하는 단계(즉, 도 2 의 단계(216))를 보여주는 순서도이다. 컴파일링 수행과정은 최고 우선순위를 갖는 후보 루틴이 식별되는 단계(302)에서 시작한다. 한 구체예에서 최고 우선순위 루틴은 최고의 호출 횟수를 갖는 루틴일 수 있다. 혹은 최고 우선순위 루틴은 실행 리스트에서 가장 짧은 컴파일링 시간을 갖는 루틴일 수 있다. 최고 우선순위 루틴의 식별은 도 4 를 참고로 아래에 설명될 것이다.
최고 우선순위 루틴이 단계(302)에서 식별된 이후에 단계(304)에서 최고 우선순위 루틴이 컴파일링 되었는지 여부를 결정한다. 최고 우선순위 루틴은 다양한 이유로 이미 컴파일링 될 수 있다. 예컨대 루틴이 실행 리스트에 위치된 이후에 전체 프로그램 실행과정동안 컴파일 오버헤드가 낮을동안 호출되고 컴파일링 될 수 있다. 이와 같이 실행 리스트 반복 갱신이 비용이 들기 때문에 루틴이 이미 컴파일링 되었거나 실행 리스트로 부터 제거되지 않을 수 있다. 최고 우선순위 루틴은 루틴이 데이타베이스 리스트로 부터 수득된다면 앞서 컴파일링 될 수도 있다. 즉, 동일한 루틴이 실행리스트와 데이타베이스 리스트 둘다에 존재할 때 루틴이 실행리스트를 사용하여 이미 컴파일링되었고 데이타베이스 리스트는 높은 비용 때문에 갱신되지 않는다면 데이타베이스 리스트에서 최고 우선순위 루틴으로서 식별될 때 루틴은 이미 컴파일링 될 수 있다.
단계(304)에서 최고 우선순위 루틴이 이미 컴파일링 되었다고 결정될 때 루틴은 실행 리스트나 데이타베이스 리스트로 부터 제거되어 새로운 최고 우선순위 루틴이 식별되는 단계(302)로 복귀한다. 그러나 만약 최고 우선순위 루틴이 컴파일링 되지 않았다고 결정되면 단계(306)에서 최고 우선순위 루틴의 컴파일링이 시작된다. 즉, 최대 우선순위 루틴의 컴파일링이 초기화된다.
최고 우선순위 루틴의 컴파일링동안 인터럽트가 수신될 수 있다. 일반적으로, 인터럽트는 타이머 신호, 사용자 입력(키보드 입력)을 포함한다. 단계(308)에서 인터럽트가 수신되었는지 여부가 결정된다. 인터럽트가 수신될 때 최고 우선순위 루틴의 컴파일링은 필요에 따라 인터럽트가 처리되도록 자동으로 중단한다.
인터럽트가 수신되면 최고 우선순위의 컴파일링은 단계(314)에서 예정된 기간동안 계속된다. 예정된 기간은 적어도 하나의 스레드를 실행가능한 상태로 설정하는 신호가 수신된 이후에 컴파일링을 위해 "유지될 시간"이다. 인터럽트 수신 직후 컴파일링을 계속할 수 있게 함으로써 컴파일링이 완결 근처에 있을 경우 컴파일링이 완결될 기회를 제공한다.
예정된 기간이 다양할 수 있지만 수밀리초, 예컨대 "X 밀리초"이다. 10 내지 200밀리초의 짧은 기간이 선호되는데, 그 이유는 사용자 입력에 응답하여 약 200밀리초 이상의 지연시간은 인식할 수 있어서 사용자를 귀찮게 하기 때문이다. 기간은 실행가능한 상태의 스레드의 우선순위 또는 신호의 소스에 기초하여 다양해질 수 있으며 더 짧은 기간은 더 높은 우선순위 신호 또는 스레드에 대해 사용된다.
단계(314)에서 예정된 기간동안 컴파일링이 계속됨을 허용한 이후에 단계(316)에서 예정된 기간동안 컴파일링이 성공적으로 완결되었는지 여부가 결정된다. 컴파일링이 완결되면 도 2 의 단계(210)로 진행하여 프로그램의 전체 실행이 계속된다. 컴파일링이 완료되면 루틴이 수득되는 리스트에 따라서 새로 컴파일링된 루틴이 실행리스트나 데이타베이스 리스트로 부터 제거된다.
예정된 기간동안 컴파일링이 완결되지 않으면 단계(316)로 부터 단계(318)로 진행하여 컴파일링이 중지된다. 컴파일링 완결 허용은 전체 프로그램의 실행 또는 인터럽트의 처리에 상당한 지연을 가져올 수 있기 때문에 컴파일링 완료가 허용되지 않는다. 컴파일링이 중지될 때 "소거" 가 일어난다. 즉, 컴파일링에 사용된 시스템 자원은 포기된다. 컴파일링이 중지되면 도 2 의 단계(210)로 진행하여 프로그램의 전체 실행이 계속된다.
단계(308)로 돌아와서 최고 우선순위 루틴의 컴파일링 동안 인터럽트가 수신되지 않을 경우에 컴파일링이 단계(310)에서 계속된다. 단계(312)에서 컴파일링이 완료되었는지 여부가 결정된다. 컴파일링이 완료되었다고 결정되면 최고 우선순위 루틴이 적절한 리스트로 부터 제거되고 단계(302)로 복귀하여 새로운 최고 우선순위 루틴이 식별된다. 혹은, 단계(312)에서 컴파일링이 완결되지 않았다고 결정되면 컴파일링이 계속되거나 단계(308)에서 인터럽트 수신시 중지된다.
일반적으로 실행리스트 및 데이타베이스 리스트에 있는 루틴이 컴파일링 되는 "순서" 는 다양한 인자에 의해 결정된다. 각 리스트의 루틴은 동일한 리스트의 다른 루틴에 대해서 우선순위 값이 할당된다. 우선순위값은 프로그램 전체 실행동안 임의의 순간에 할당되고 프로그램 실행 과정에서 더욱 갱신된다. 예컨대, 루틴이 리스트에 첨가될 때마다 리스트에 있는 우선순위 값이 계산 및 갱신, 즉 재평가될 수 있다. 실행리스트와 데이타베이스 리스트에 있는 루틴의 우선순위가 루틴이 컴파일링을 위해 선택된 순간에 있도록 각 유휴기간의 시작시 우선순위값이 재평가될 수도 있다.
루틴의 우선순위 값이 루틴호출함수, 리스트내의 루틴 위치, 루틴의 추정된 컴파일링 시간, 프로그램 전체 실행동안 현재 유휴기간의 길이에 기초하여 계산될 수 있다. 혹은, 한 구체예에서 루틴의 우선순위 값이 무작위로 할당될 수 있다.
리스트에서 최고의 호출횟수를 가지는 루틴은 가장 빈번히 호출된 루틴과 마찬가지로 최고의 컴파일링 우선순위를 갖는다. 리스트내의 루틴의 위치는 루틴에 할당되는 우선순위 값에 영향을 줄 수 있는데, 그 이유는 리스트에 최근에 첨가된 루틴이 중간에 필요할 수 있기 때문이다. 리스트에서 가장 짧은 컴파일링 시간을 갖는 루틴이 더 긴 컴파일링 시간을 갖는 루틴의 컴파일링에 비해서 유휴 기간동안 완결된 가능성이 크기 때문에 최고의 컴파일링 우선순위를 가질 수 있다. 일반적으로, 루틴의 컴파일링 시간은 루틴의 길이에 의해 추정될 수 있다. 즉, 더 짧은 루틴은 더 짧은 컴파일링 시간을 가진다.
현재 유휴기간의 길이 역시 루틴 우선순위값에 영향을 줄 수 있다. 예컨대, 현재 유휴기간이 비교적 길면 유휴기간이 오래 지속될 가능성은 일반적으로 증가된다. 긴 유휴기간은 종종 사용자가 컴퓨터를 떠나기 때문에 발생하며, 오랜기간동안 프로그램의 전체 실행이 이루어진다. 이와 같이 현재의 유휴 기간이 비교적 길다고 결정될 때 유휴 기간이 오래 지속될 가능성은 높아진다. 그러므로, 유휴 기간이 비교적 길다고 기대될 때 더 오랜 컴파일링 시간을 갖는 루틴이 더 높은 컴파일링 우선순위를 가질 수 있다. 왜냐하면 더 짧은 컴파일링 시간을 갖는 루틴은 후속의 더 짧은 유휴기간동안 쉽게 컴파일링 될 수 있기 때문이다.
루틴의 우선순위 값은 여러 인자에 기초한다. 다시 말하자면 우선순위 함수가 우선순위 값 결정에 사용될 수 있다. 이러한 우선순위 함수의 형태는 일반적으로 다양하다. 예컨대 우선순위 함수는 루틴의 호출계수를 루틴의 추정된 컴파일링 시간으로 나누어서 루틴의 우선순위값을 획득할 수 있다. 혹은, 우선순위 함수는 더 짧은 추정된 컴파일링 시간을 갖는 루틴에 대한 호출계수를 사용하며 더 긴 측정된 컴파일링 시간을 갖는 루틴에 대해 상수로 나뉘어진 호출계수를 사용한다.
도 4 에서, 최고 우선순위 값을 갖는 루틴 식별과 관련된 단계(도 3 의 단계(302))가 기술된다. 최고 우선순위를 갖는 루틴의 식별은 단계(402)에서 시작하여 프로그램과 관련된 실행 리스트에 루틴이 존재하는지 여부가 결정된다.
일반적으로, 실행리스트에 있는 루틴이 데이타베이스 리스트에 있는 루틴보다 높은 컴파일링 우선순위를 갖는다고 간주된다. 실행리스트에 있는 루틴은 프로그램 실행 과정동안 루틴이 반복 호출되므로 더 효율적으로 실행함으로써 관련된 컴파일 오버헤드를 극복할 수 있는 것으로 식별된 루틴이다. 혹은, 데이타베이스 리스트에 있는 루틴은 반복 호출될 수 있으므로 루틴 컴파일링이 이득이 되는 루틴이다. 즉, 실행리스트는 루틴의 현재 또는 실제 사용을 반영하며 데이타베이스 리스트는 장기간 루틴 사용을 반영한다. 그러므로 실행 리스트로 부터 루틴이 데이타베이스 리스트로 부터 루틴 이전에 컴파일링을 위해 선택되는데, 그 이유는 실행 리스트에 있는 루틴을 컴파일링 하는 것이 루틴을 사용하는 프로그램의 더욱 효과적인 실행을 가능하게 하기 때문이다.
단계(402)에서 실행 리스트에 루틴이 있다고 결정되면 실행 리스트에서 최고 우선순위를 갖는 루틴이 컴파일링에 선택된다. 실행 리스트에서 루틴이 선택되면 최고 우선순위 루틴 식별과정이 완결된다. 혹은 단계(402)에서 실행 리스트에 루틴이 없다고 결정하면 데이타베이스 리스트에서 최고 우선순위를 갖는 루틴이 컴파일링을 위해 선택된다. 데이타베이스 리스트에서 루틴이 선택된 이후에 최고 우선순위 루틴을 식별하는 과정이 완결된다.
본 발명은 적당한 컴퓨터 시스템에서 실시될 수 있다. 특히, 프로그램의 전체 실행에서 유휴기간동안 대기된 루틴의 컴파일링은 도 6 의 가상기계를 사용하여 수행될 수 있다. 도 5 는 본 발명 실시에 적합한 범용 컴퓨터 시스템이다. 컴퓨터 시스템(530)은 주저장 장치(534(ROM), 536(RAM))를 포함하는 메모리 장치에 연결된 프로세서(532, CPU)를 포함한다.
컴퓨터 시스템(530) 또는 CPU(532)는 가상기계를 지원하도록 배열될 수 있다. 컴퓨터 시스템(30)의 지원을 받는 가상기계의 일례가 도 6 을 참조로 기술될 것이다. ROM은 CPU(532)에 단일 방향으로 지령과 데이타를 전달한다. 반면에 RAM은 양방향으로 데이타와 지령을 전달하는데 사용된다. CPU(532)는 여러개의 프로세서를 포함한다. 제 1 저장장치(534, 536)는 컴퓨터 - 판독가능한 매체를 포함한다. 제 2 저장매체(538)는 대체로 대량 메모리 장치이며 CPU(532)에 양방향 연결되며 추가 데이타 저장용량을 제공한다. 대량 메모리 장치(538)는 컴퓨터 코드, 데이타등을 포함하는 프로그램을 저장하는데 사용되는 컴퓨터 - 판독가능한 매체이다. 대체로 대량 메모리 장치(538)는 제 1 저장 장치(534, 536)보다 느린 하드디스크 또는 테이프와 같은 저장매체이다. 대량 메모리 장치(538)는 자기 또는 종이 테이프 판독기 형태를 가진다. 대량 메모리 장치(538)에 유지된 정보는 적절한 경우에 RAM(536)의 일부로서 표준 방식으로 가상 메모리에 포함된다. CD-ROM과 같은 제 1 저장 장치(534)는 CPU(532)에 데이타를 단일방향으로 통과시킬 수 있다.
CPU(532)는 비디오 모니터, 트래볼 마우스, 키보드, 마이크로폰, 접촉성 디스플레이, 트랜스듀서 카드판독기, 자기 또는 종이 테이프 판독기, 태블릿, 스타일러스, 음성 또는 필기 인식기 또는 기타 입력장치와 같은 것을 포함하는 하나 이상의 입/출력 장치(540)에 연결된다. CPU(532)는 네트워크 연결(512)을 사용하여 컴퓨터 또는 원격통신 네트워크, 예컨대 근거리통신망, 인터넷 네트워크 또는 인트라넷 네트워크에 연결된다. 이러한 네트워크 연결을 사용하여 CPU(532)는 네트워크로 부터 정보를 수신하거나 위에서 언급된 방법의 단계를 수행하는 과정에서 네트워크에 정보를 출력할 수 있다. CPU(532)를 사용하여 실행되는 지령 순서로 표시되는 이러한 정보는 반송파에 포함된 컴퓨터 데이타 신호 형태로 입출력된다.
가상기계는 컴퓨터 시스템(530)상에서 실행할 수 있다. 도 6 은 도 10 의 컴퓨터 시스템(530)의 지원을 받는 가상기계를 보여준다. Sun Microsystems (Palo Alto, California)에 의해 개발된 Java 프로그램 언어로 작성된 컴퓨터 프로그램이 실행될 때 원시코드(610)가 컴파일 시간 환경(605)내에서 컴파일러(620)에 제공된다. 컴파일러(620)는 원시코드(610)를 바이트 코드(630)로 변환한다. 일반적으로, 원시코드(610)는 소프트웨어 개발자에 의해 생성된 타임 원시코드(610)에서 바이트 코드(630)로 변환된다.
바이트 코드(630)는 도 5 의 네트워크(512)를 통해 분배, 다운로드 또는 재생되거나 도 10 의 주 저장장치(534)에 저장된다. 바이트 코드(630)는 플랫포옴에 무관하다. 즉, 바이트 코드(630)는 적당한 가상기계(640)를 통해 실행되는 모든 컴퓨터 시스템에서 실행될 수 있다. 예컨대 Java 환경에서 바이트 코드(630)는 Java 가상 기계를 실행하는 컴퓨터 시스템에서 실행될 수 있다.
바이트 코드(630)는 가상기계(640)를 포함한 실행시간 환경(635)에 제공된다. 실행시간 환경(635)은 도 5 의 CPU(532)와 같은 프로세서를 사용하여 실행될 수 있다. 가상기계(640)는 컴파일러(642), 인터프리터(644), 및 실행시간 시스템(646)을 포함한다. 바이트 코드(630)는 컴파일러(642) 또는 인터프리터(644)에 제공된다.
바이트 코드(630)가 컴파일러(642)에 제공될 때 바이트 코드(632)에 포함된 루틴이 기계 지령으로 컴파일 된다. 반면에 바이트 코드(630)가 인터프리터(644)에 제공될 때 바이트 코드(630)는 한 번에 1 바이트 코드씩 인터프리터(644)에서 판독된다. 인터프리터(644)는 이후에 각 바이트 코드가 인터프리터(644)에서 판독될 때 각 바이트 코드에 의해 한정되는 작동을 수행한다. 일반적으로, 인터프리터(644)는 바이트 코드(630)를 처리하여 바이트 코드(630)와 관련된 작동을 연속으로 수행한다.
운영시스템(660)으로 부터 루틴이 호출될 때 루틴이 인터프리팅된 루틴으로서 호출될 수 있다고 결정되면 실행시간 시스템(646)은 인터프리터(644)로 부터 루틴을 획득할 수 있다. 반면에 루틴이 컴파일링된 루틴으로서 호출될 수 있다고 결정되면 실행시간 시스템(646)은 컴파일러(642)를 활성화시킨다. 컴파일러(642)는 바이트 코드(630)로 부터 기계 지령을 발생하고 기계어 지령을 실행한다. 일반적으로 기계어 지령은 가상기계(640)가 종결할 때 폐기된다.
유휴기간동안 컴파일링 수행과 관련된 단계는 재명령, 제거 또는 첨가될 수 있다.
컴파일링을 위한 최고 우선순위 루틴이 실행 리스트와 데이타베이스 리스트에 있는 모든 루틴으로 부터 선택된다고 기술되었다. 최고 컴파일링 우선순위를 갖는 루틴을 위치시키기 위해서 실행 리스트 또는 데이타베이스 리스트에 있는 모든 루틴을 검색하는 것은 실행 리스트가 비싼 경우에 비용이 들 수 있다. 그러므로, 한 구체예에서 최고 우선순위 컴파일링 루틴을 식별하기 위해서 전체 실행 리스트 대신에 실행리스트의 하부집합이 검색될 수 있다. 예컨대 실행 리스트로 부터 "N" 후보 루틴이 제 1 N 후보 루틴에서 최고 우선순위 루틴을 식별하도록 검색될 수 있다.
루틴의 컴파일링 우선순위는 호출 카운터를 사용하여 식별될 수 있다. 호출 카운터는 루틴이 접근될 때마다 증가되는 카운터이다. 어떤 경우에 호출 카운터는 시간이 지나면 쇠퇴될 수 있다. 예컨대, 루틴이 프로그램 초기에 반복 호출되고 컴파일링되지만 다시 호출되지 않는다면 이 루틴의 컴파일링 우선순위를 감소시키기 위해서 호출카운터가 쇠퇴될 수 있다. 루틴의 호출 카운터가 쇠퇴된다면 루틴 컴파일링은 더 이상 추천되지 않는다. 이와 같이 이러한 루틴이 실행 리스트에서 주기적으로 제거된다.
유사하게, 컴파일링 수행동안 컴파일링될 루틴이 앞서 컴파일링 되었는지 여부가 결정된다. 혹은 앞서 컴파일링된 루틴이 실행 리스트 또는 데이타베이스 리스트에서 제거된다. 일반적으로 컴파일링된 루틴에 대한 실행 리스트 및 데이타베이스 리스트 검사와 관련된 오버헤드가 상당할 수 있다. 그러나 유휴기간의 초기에 컴파일링된 루틴이 주기적으로 제거될 수 있다.
실행 리스트가 인터프리팅된 루틴의 리스트 또는 대기행렬로서 기술되었지만 실행리스트는 유휴기간이 있을 때까지 재-컴파일링이 지연되는 컴파일링된 루틴을 포함할 수도 있다. 예컨대 2레벨의 컴파일러를 갖는 시스템에서 루틴이 컴파일링되고 이 루틴이 반복실행된다면 이 루틴이 더 효율적으로 재컴파일되는 것이 바람직하다. 이러한 시스템에서 재-컴파일링 또는 제 2 컴파일링되는 루틴은 컴파일링될 인터프리팅된 루틴과 동일한 실행 리스트에 포함될 수 있다. 그러나 재컴파일링될 루틴은 별도의 실행 리스트에 포함된다.
실행리스트는 지연된 태스크와 계류중인 컴파일링을 포함하는 작업리스트이다. 이러한 태스크는 우선순위가 정해진다. 작업리스트에서 한가지 태스크가 실행중일 때 인터럽트가 수신되면 태스크는 완결될 수 있다. 예컨대 태스크가 불필요 정보수집을 포함하면 불필요 정보수집 과정의 지연 및 "보류"는 이 과정을 완결시키는 것보다 비용이 들 수 있다. 이와 같이 불필요 정보수집은 완결될 수 있다. 인터럽트가 수신될 때 태스크가 지연될 수 있다.
도 1 은 본 발명의 구체예에 따라서 코드를 동적으로 컴파일링하는 컴퓨터 시스템의 블록선도이다.
도 2 는 본 발명의 구체예에 따라서 중지동안 코드 컴파일링 능력을 포함한 프로그램 실행과 관련된 단계를 보여주는 순서도이다.
도 3 은 본 발명의 구체예에 따라서 루틴 컴파일링 수행과 관련된 단계(도 2 의 단계(216))를 보여주는 순서도이다.
도 4 는 본 발명의 구체예에 따라서 최고 우선순위 루틴 식별과 관련된 단계(도 3 의 단계(302))를 보여주는 순서도이다.
도 5 는 본 발명 실사에 적합한 범용 컴퓨터 시스템이다.
도 6 은 본 발명 실사에 적합한 가상 기계이다.
* 부호설명
144 ... 바이트 코드 146 ... 컴퓨터 시스템
150 ... 컴파일러 152 ... 컴파일링된 바이트 코드
154 ... 인터프리팅된 바이트 코드 158 ... 빈번히 실행된 코드
530 ... 컴퓨터 시스템 532 ... 프로세서
534 ... ROM 536 ... RAM
538 ... 제 2 저장매체 605 ... 컴파일 시간 환경
610 ... 원시코드 620 ... 컴파일러
630 ... 바이트 코드 640 ... 가상기계
642 ... 컴파일러 644 ... 인터프리터
646 ... 실행시간 시스템 660 ... 운영 시스템

Claims (22)

  1. 유휴기간을 식별하고;
    유휴기간동안 컴퓨터 프로그램에 포함된 복수의 루틴으로 부터 선택된 제 1 루틴을 식별하며, 이때, 상기 컴퓨터 프로그램은 인터프리팅된 프로그램 코드와 컴파일링된 프로그램 코드 둘다를 실행하도록 배열되며;
    유휴기간동안에 일어나는 제 1 루틴의 컴파일링을 초기화하는 단계들을 포함하는 것을 특징으로 하는 컴퓨터 프로그램 처리에서 유휴기간동안 루틴을 동적으로 컴파일링하는 방법.
  2. 제 1 항에 있어서, 복수의 루틴이 컴퓨터 프로그램과 관련된 제 1 리스트에서 참조되며, 제 1 루틴이 제 1 리스트와 관련된 최고 우선순위의 루틴임을 특징으로 하는 컴퓨터 프로그램 처리에서 유휴기간동안 루틴을 동적으로 컴파일링하는 방법.
  3. 제 1 항에 있어서, 복수의 루틴으로 부터 선택된 제 1 루틴 집합이 제 1 리스트와 관련되고, 복수의 루틴으로 부터 선택된 제 2 루틴 집합이 제 2 리스트와 관련되며, 상기 제 1 리스트는 컴퓨터 프로그램 처리동안 생성되고, 상기 제 2 리스트는 컴퓨터 프로그램 처리 이전에 생성되며, 제 1 루틴 식별단계가 상기 제 1 리스트로 부터 최고 우선순위 루틴으로서 제 1 루틴을 선택하는 과정을 포함함을 특징으로 하는 컴퓨터 프로그램 처리에서 유휴기간동안 루틴을 동적으로 컴파일링 하는 방법.
  4. 제 1 항에 있어서, 복수의 루틴으로 부터 선택된 제 1 루틴집합이 제 1 리스트와 관련되고, 복수의 루틴으로 부터 선택된 제 2 루틴집합이 제 2 리스트와 관련되며, 상기 제 1 리스트는 컴퓨터 프로그램 처리동안 생성되며, 상기 제 2 리스트는 컴퓨터 프로그램 처리 이전에 생성되며, 제 1 루틴 식별단계가 상기 제 2 리스트로 부터 최고 우선순위 루틴으로서 제 1 루틴을 선택하는 과정을 포함함을 특징으로 하는 컴퓨터 프로그램 처리에서 유휴기간동안 루틴을 동적으로 컴파일링하는 방법.
  5. 제 1 항 내지 4 항 중 어느 한 항에 있어서,
    제 1 루틴의 컴파일링 초기화 이후에 인터럽트가 컴퓨터 프로그램에 의해 수신되는지 여부를 결정하고;
    인터럽트가 수신되었다고 결정될 때 예정된 기간동안 제 1 루틴의 컴파일링을 계속하고;
    예정된 기간 이후에 제 1 루틴의 컴파일링이 완결되었는지 여부를 결정하고;
    예정된 기간후에 제 1 루틴의 컴파일링이 완결되지 않았다고 결정될 때 제 1 루틴의 컴파일링을 중지하는 단계들을 더욱 포함함을 특징으로 하는 컴퓨터 프로그램 처리에서 유휴기간동안 루틴을 동적으로 컴파일링하는 방법.
  6. 저활성 기간을 식별하고;
    저활성 기간동안 컴퓨터 프로그램에 포함된 복수의 루틴으로 부터 선택된 제 1 루틴을 식별하며;
    제 1 루틴이 컴파일링되는지 여부를 저활성 기간동안 결정하고;
    제 1 루틴이 컴파일링 되지 않는다고 결정될 때 저활성 기간동안 제 1 루틴의 컴파일링을 초기화하는 단계들을 포함하는 것을 특징으로 하는 컴퓨터 프로그램 전체 실행에서 저활성 기간동안 루틴을 동적으로 컴파일링하는 방법.
  7. 제 6 항에 있어서,
    제 1 루틴이 컴파일링된다고 결정될 때 저활성기간동안 복수의 루틴으로 부터 선택된 제 2 루틴을 식별하고;
    제 2 루틴이 컴파일링 되는지 여부를 저활성 기간동안 결정하며,
    제 2 루틴이 컴파일링 되지 않는다고 결정될 때 저활성 기간동안 제 2 루틴의 컴파일링을 초기화하는 단계들을 더욱 포함함을 특징으로 하는 컴퓨터 프로그램 전체 실행에서 저활성 기간동안 루틴을 동적으로 컴파일링하는 방법.
  8. 제 7 항에 있어서, 상기 방법은,
    복수의 루틴 각각에 대한 우선순위 값을 결정하는 단계를 포함하고, 이때, 상기 제 1 루틴이 제 1 루틴에 대한 우선순위 값에 기초하여 식별됨을 특징으로 하는 컴퓨터 프로그램 전체 실행에서 저활성 기간동안 루틴을 동적으로 컴파일링하는방법.
  9. 제 8 항에 있어서, 복수의 루틴 각각에 대한 우선순위 값을 결정하는 단계가 저활성 기간동안 복수의 루틴 각각과 관련된 호출 카운터를 처리하는 과정을 포함함을 특징으로 하는 컴퓨터 프로그램 전체 실행에서 저활성 기간동안 루틴을 동적으로 컴파일링하는 방법.
  10. 제 8 항에 있어서, 복수의 루틴 각각에 대한 우선순위 값 결정단계가 저활성 기간동안 복수의 루틴 각각에 대한 컴파일링 시간을 추정하는 과정을 포함함을 특징으로 하는 컴퓨터 프로그램 전체 실행에서 저활성 기간동안 루틴을 동적으로 컴 파일링하는 방법.
  11. 제 6 항에 있어서, 복수의 루틴으로 부터 선택된 제 1 루틴집합이 제 1 리스트와 관련되고, 복수의 루틴으로 부터 선택된 제 2 루틴집합이 제 2 리스트와 관련되며, 상기 제 1 리스트는 컴퓨터 프로그램 처리동안 생성되고, 상기 제 2 리스트는 컴퓨터 프로그램 처리 이전에 생성되며, 제 1 루틴 식별단계가 제 1 리스트로 부터 최고 우선순위 루틴으로서 제 1 루틴을 선택하는 과정을 포함함을 특징으로 하는 컴퓨터 프로그램 전체 실행에서 저활성 기간동안 루틴을 동적으로 컴파일링하는 방법 .
  12. 제 6 항 내지 제 11 항 중 어느 한 항에 있어서,
    제 1 루틴 컴파일링 초기화 이후에 컴퓨터 프로그램에 의해 인터럽트가 수신되는지 여부를 결정하고;
    인터럽트가 수신되었다고 결정될 때 예정된 기간동안 제 1 루틴의 컴파일링을 계속하며;
    예정된 기간후에 제 1 루틴의 컴파일링이 완결되었는지 여부를 결정하고;
    예정된 기간후에 제 1 루틴의 컴파일링이 완결되지 않았다고 결정될 때 제 1 루틴의 컴파일링을 중지하는 단계들을 더욱 포함함을 특징으로 하는 컴퓨터 프로그램 전체 실행에서 저활성 기간동안 루틴을 동적으로 컴파일링하는 방법.
  13. 제 12 항에 있어서,
    인터럽트가 수신되지 않았다고 결정될 때 제 1 루틴 컴파일링을 완료하고;
    저활성 기간동안 복수의 루틴으로 부터 선택된 제 2 루틴을 식별하며;
    저활성 기간동안 제 2 루틴이 컴파일링 되는지 여부를 결정하고;
    제 2 루틴이 컴파일링되지 않았다고 결정될 때 저활성 기간동안 제 2 루틴의 컴파일링을 초기화하는 단계들을 더욱 포함함을 특징으로 하는 컴퓨터 프로그램 전체 실행에서 저활성 기간동안 루틴을 동적으로 컴파일링하는 방법.
  14. 컴퓨터 프로그램의 처리에서 유휴 기간을 식별하고;
    컴퓨터 프로그램의 처리에서 유휴기간동안 컴퓨터 프로그램에 포함된 복수의 데스크로 부터 제 1 데스크를 식별하며, 이때, 상기 컴퓨터 프로그램은 인터프리팅된 프로그램 코드와 컴파일링된 프로그램 코드 둘다를 실현하도록 배열되며,
    유휴기간동안 제 1 태스크를 시작하는 단계들을 포함하는 것을 특징으로 하는 컴퓨터 프로그램의 처리에서 유휴 기간동안 지연된 태스크를 동적으로 처리하는 방법.
  15. 제 14 항에 있어서, 인터럽트가 수신될 때 제 1 태스크를 완결하는 단계를 더욱 포함함을 특징으로 하는 컴퓨터 프로그램의 처리에서 유휴 기간동안 지연된 태스크를 동적으로 처리하는 방법.
  16. 제 14 항에 있어서, 인터럽트가 수신될 때 제 1 태스크를 지연시키는 단계를 더욱 포함함을 특징으로 하는 컴퓨터 프로그램의 처리에서 유휴 기간동안 지연된 태스크를 동적으로 처리하는 방법.
  17. 저활성 기간을 식별하는 장치;
    저활성 기간동안 복수의 루틴으로 부터 선택된 제 1 루틴을 식별하는 장치;
    저활성 기간동안 제 1 루틴의 컴파일링을 초기화하는 컴파일러를 포함하는 것을 특징으로 하는 컴퓨터 프로그램 처리에서 저활성 기간동안 바이트 코드화 루틴을 동적으로 컴파일링 하는 컴퓨터 시스템.
  18. 제 17 항에 있어서, 상기 컴퓨터 시스템은,
    제 1 복수의 루틴 집합에 대해 배열된 제 1 리스트와,
    제 2 복수의 루틴 집합에 대해 배열된 제 2 리스트를 포함하며,
    상기 제 1 리스트는 컴퓨터 프로그램과 관련되며, 제 1 루틴은 상기 제 1 리스트와 관련된 최고 우선순위 루틴이며,
    상기 제 2 리스트는 컴퓨터 프로그램 처리 이전에 생성되고, 상기 제 1 리스트는 컴퓨터 프로그램 처리동안 생성됨을 특징으로 하는 컴퓨터 시스템.
  19. 제 17 항에 있어서,
    제 1 루틴 컴파일링 동안 인터럽트 신호를 수신하도록 배열되며 컴파일러와 통신하는 인터럽트 프로세서로서, 이때, 상기 컴파일러는 인터럽트 프로세서로 부터의 신호에 응답하여 예정된 기간동안 제 1 루틴의 컴파일링을 계속하도록 배열되는 특징의 상기 인터럽트 프로세서; 그리고
    상기 컴파일러와 통신하며 제 1 루틴의 컴파일링을 중지하도록 배열되는 중지 장치를 더욱 포함함을 특징으로 하는 시스템.
  20. 제 17 항 내지 제 19 항중 어느 한 항에 있어서, 상기 제 1 루틴이 컴파일링되는 시기를 식별하도록 배열되는 진단장치를 더욱 포함함을 특징으로 하는 시스템.
  21. 유휴 기간을 식별하는 컴퓨터 프로그램 코드 디바이스;
    유휴 기간동안 컴퓨터 프로그램에 포함된 복수의 루틴으로 부터 선택된 제 1 루틴을 식별하는 컴퓨터 프로그램 코드 디바이스;
    유휴 기간동안 제 1 루틴의 컴파일링을 초기화하는 컴퓨터 프로그램 코드 디바이스를 포함하는 것을 특징으로 하는 컴퓨터 프로그램 처리에서 유휴 기간동안 루틴을 동적으로 컴파일링 하도록 배열된 컴퓨터 프로그램 코드 디바이스들을 포함하는 컴퓨터로 판독가능한 매체.
  22. 제 21 항에 있어서, 상기 컴퓨터 프로그램 코드 디바이스들이 반송파로 구현되는 것을 특징으로 하는 컴퓨터로 판독가능한 매체.
KR1019980041791A 1997-10-06 1998-10-07 중지동안 바이트 코드 최적화 장치 및 방법 KR100589798B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/944,735 1997-10-06
US8/944,735 1997-10-06
US08/944,735 US5970249A (en) 1997-10-06 1997-10-06 Method and apparatus for performing byte-code optimization during pauses

Publications (2)

Publication Number Publication Date
KR19990036882A KR19990036882A (ko) 1999-05-25
KR100589798B1 true KR100589798B1 (ko) 2006-10-25

Family

ID=25481974

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980041791A KR100589798B1 (ko) 1997-10-06 1998-10-07 중지동안 바이트 코드 최적화 장치 및 방법

Country Status (6)

Country Link
US (2) US5970249A (ko)
EP (1) EP0908818B1 (ko)
JP (1) JPH11237989A (ko)
KR (1) KR100589798B1 (ko)
CN (1) CN100392595C (ko)
DE (1) DE69834230T2 (ko)

Families Citing this family (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6960133B1 (en) 2000-08-28 2005-11-01 Igt Slot machine game having a plurality of ways for a user to obtain payouts based on selection of one or more symbols (power pays)
US6513156B2 (en) * 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
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
US6792600B1 (en) * 1998-05-14 2004-09-14 International Business Machines Corporation Method and apparatus for just in time compilation of instructions
US6141793A (en) * 1998-04-01 2000-10-31 Hewlett-Packard Company Apparatus and method for increasing the performance of interpreted programs running on a server
US6405367B1 (en) 1998-06-05 2002-06-11 Hewlett-Packard Company Apparatus and method for increasing the performance of Java programs running on a server
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6205578B1 (en) * 1998-08-14 2001-03-20 Ati International Srl Interpreter for stack-based languages
JP2000122875A (ja) * 1998-10-19 2000-04-28 Internatl Business Mach Corp <Ibm> 例外処理方法およびシステム
GB9825102D0 (en) 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6324687B1 (en) * 1998-12-03 2001-11-27 International Business Machines Corporation Method and apparatus to selectively control processing of a method in a java virtual machine
US20050149694A1 (en) * 1998-12-08 2005-07-07 Mukesh Patel Java hardware accelerator using microcode engine
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
GB2344907A (en) * 1998-12-19 2000-06-21 Int Computers Ltd Instruction translation and execution mechanism
US6327702B1 (en) * 1998-12-30 2001-12-04 Microsoft Corporation Generating a compiled language program for an interpretive runtime environment
JP3470948B2 (ja) * 1999-01-28 2003-11-25 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
US6507946B2 (en) * 1999-06-11 2003-01-14 International Business Machines Corporation Process and system for Java virtual method invocation
GB2352914A (en) 1999-08-03 2001-02-07 Sony Uk Ltd Data broadcast method
JP3356742B2 (ja) * 1999-11-17 2002-12-16 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム実行方法
JP3605327B2 (ja) 1999-11-18 2004-12-22 富士通株式会社 プログラム実行装置
DE19963832A1 (de) * 1999-12-30 2001-07-05 Ericsson Telefon Ab L M Programmprofilierung
US6865730B1 (en) * 2000-03-08 2005-03-08 International Business Machines Corporation Interprocedural analysis and optimization of an object oriented program in the presence of dynamic class loading
US6769985B1 (en) 2000-05-31 2004-08-03 Igt Gaming device and method for enhancing the issuance or transfer of an award
US7695363B2 (en) 2000-06-23 2010-04-13 Igt Gaming device having multiple display interfaces
US7699699B2 (en) 2000-06-23 2010-04-20 Igt Gaming device having multiple selectable display interfaces based on player's wagers
US7240342B1 (en) * 2000-06-30 2007-07-03 Intel Corporation User transparent continuous compilation
US6973646B1 (en) * 2000-07-21 2005-12-06 International Business Machines Corporation Method for compiling program components in a mixed static and dynamic environment
US6935955B1 (en) 2000-09-07 2005-08-30 Igt Gaming device with award and deduction proximity-based sound effect feature
EP1197847A3 (en) * 2000-10-10 2003-05-21 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US6739973B1 (en) 2000-10-11 2004-05-25 Igt Gaming device having changed or generated player stimuli
US6964039B2 (en) * 2000-12-13 2005-11-08 Esmertec Ag Method to create optimized machine code through combined verification and translation of JAVA™ bytecode
US7040983B2 (en) 2001-03-21 2006-05-09 Igt Gaming device having a multi-round, multi-characteristic matching game
US6978451B2 (en) * 2001-05-31 2005-12-20 Esmertec Ag Method for fast compilation of preverified JAVA bytecode to high quality native machine code
US7901291B2 (en) 2001-09-28 2011-03-08 Igt Gaming device operable with platform independent code and method
US7666098B2 (en) 2001-10-15 2010-02-23 Igt Gaming device having modified reel spin sounds to highlight and enhance positive player outcomes
US7708642B2 (en) 2001-10-15 2010-05-04 Igt Gaming device having pitch-shifted sound and music
US6848996B2 (en) 2001-10-15 2005-02-01 Igt Gaming device with sound recording changes associated with player inputs
US6993755B1 (en) * 2001-10-24 2006-01-31 Sun Microsystems, Inc. Dynamic compilation control
CA2359862A1 (en) * 2001-10-24 2003-04-24 Ibm Canada Limited - Ibm Canada Limitee Using identifiers and counters for controlled optimization compilation
US6996814B2 (en) 2001-11-14 2006-02-07 Sun Microsystems, Inc. Method and apparatus for dynamically compiling byte codes into native code
US20040088690A1 (en) * 2002-08-27 2004-05-06 Hayim Shaul Method for accelerating a computer application by recompilation and hardware customization
US7290254B2 (en) * 2003-03-25 2007-10-30 Intel Corporation Combining compilation and instruction set translation
JP4713820B2 (ja) * 2003-05-28 2011-06-29 パナソニック株式会社 プログラム実行制御装置、プログラム実行制御方法
US7789748B2 (en) * 2003-09-04 2010-09-07 Igt Gaming device having player-selectable music
US7105736B2 (en) 2003-09-09 2006-09-12 Igt Gaming device having a system for dynamically aligning background music with play session events
US8954420B1 (en) 2003-12-31 2015-02-10 Google Inc. Methods and systems for improving a search ranking using article information
US20050149498A1 (en) * 2003-12-31 2005-07-07 Stephen Lawrence Methods and systems for improving a search ranking using article information
US7788657B2 (en) * 2004-02-27 2010-08-31 Tvworks, Llc Targeted runtime compilation
US8161053B1 (en) 2004-03-31 2012-04-17 Google Inc. Methods and systems for eliminating duplicate events
US7941439B1 (en) 2004-03-31 2011-05-10 Google Inc. Methods and systems for information capture
US8631076B1 (en) 2004-03-31 2014-01-14 Google Inc. Methods and systems for associating instant messenger events
US7725508B2 (en) 2004-03-31 2010-05-25 Google Inc. Methods and systems for information capture and retrieval
US7680888B1 (en) 2004-03-31 2010-03-16 Google Inc. Methods and systems for processing instant messenger messages
US8275839B2 (en) * 2004-03-31 2012-09-25 Google Inc. Methods and systems for processing email messages
US7581227B1 (en) 2004-03-31 2009-08-25 Google Inc. Systems and methods of synchronizing indexes
US7333976B1 (en) 2004-03-31 2008-02-19 Google Inc. Methods and systems for processing contact information
US8099407B2 (en) 2004-03-31 2012-01-17 Google Inc. Methods and systems for processing media files
US7412708B1 (en) * 2004-03-31 2008-08-12 Google Inc. Methods and systems for capturing information
US8346777B1 (en) 2004-03-31 2013-01-01 Google Inc. Systems and methods for selectively storing event data
US8386728B1 (en) 2004-03-31 2013-02-26 Google Inc. Methods and systems for prioritizing a crawl
KR100725386B1 (ko) * 2004-09-25 2007-06-07 삼성전자주식회사 가상 머신 어플리케이션을 실행하는 방법 및 그 방법을이용한 디지털 방송 수신기
US8043155B2 (en) 2004-10-18 2011-10-25 Igt Gaming device having a plurality of wildcard symbol patterns
US20060212840A1 (en) * 2005-03-16 2006-09-21 Danny Kumamoto Method and system for efficient use of secondary threads in a multiple execution path processor
US9262446B1 (en) 2005-12-29 2016-02-16 Google Inc. Dynamically ranking entries in a personal data book
JP5167589B2 (ja) * 2006-02-13 2013-03-21 富士通株式会社 アプリケーションサーバ装置および仮想マシンプログラム
US7784041B2 (en) * 2006-03-30 2010-08-24 Oracle America, Inc. Mechanism for reducing detectable pauses in dynamic output caused by dynamic compilation
US8799876B2 (en) * 2006-09-29 2014-08-05 Intel Corporation Method and apparatus for assigning subroutines
US8146065B2 (en) 2007-08-13 2012-03-27 International Business Machines Corporation Running time of short running applications by effectively interleaving compilation with computation in a just-in-time environment
US20090125519A1 (en) * 2007-11-13 2009-05-14 Intel Corporation Device, system, and method for regulating software lock elision mechanisms
KR20090098500A (ko) * 2008-03-14 2009-09-17 삼성전자주식회사 가상 머신의 유휴 구간 검사 장치 및 방법, 그리고 그방법을 수행하기 위한 컴퓨터 프로그램
US8591308B2 (en) 2008-09-10 2013-11-26 Igt Gaming system and method providing indication of notable symbols including audible indication
JP5093509B2 (ja) * 2008-10-28 2012-12-12 日本電気株式会社 Cpuエミュレーションシステム、cpuエミュレーション方法及びcpuエミュレーションプログラム
US8677329B2 (en) * 2009-06-03 2014-03-18 Apple Inc. Methods and apparatuses for a compiler server
US9117071B2 (en) 2009-06-03 2015-08-25 Apple Inc. Methods and apparatuses for secure compilation
JP2011192239A (ja) * 2010-03-17 2011-09-29 Sony Corp 記憶装置および記憶システム
JP2011192240A (ja) * 2010-03-17 2011-09-29 Sony Corp 記憶装置および記憶システム
CN102610002B (zh) * 2011-01-20 2015-11-25 鸿富锦精密工业(深圳)有限公司 机台状态侦测系统及方法
JP2013061810A (ja) * 2011-09-13 2013-04-04 Fujitsu Ltd 情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラム
US8460090B1 (en) 2012-01-20 2013-06-11 Igt Gaming system, gaming device, and method providing an estimated emotional state of a player based on the occurrence of one or more designated events
US9245407B2 (en) 2012-07-06 2016-01-26 Igt Gaming system and method that determines awards based on quantities of symbols included in one or more strings of related symbols displayed along one or more paylines
US8740689B2 (en) 2012-07-06 2014-06-03 Igt Gaming system and method configured to operate a game associated with a reflector symbol
US9027007B2 (en) * 2013-03-06 2015-05-05 Qualcomm Incorporated Reducing excessive compilation times
US9996325B2 (en) 2013-03-06 2018-06-12 Qualcomm Incorporated Dynamic reconfigurable compiler
JP6127639B2 (ja) 2013-03-26 2017-05-17 富士通株式会社 プログラム実行制御プログラム、プログラム実行制御方法
US9239712B2 (en) * 2013-03-29 2016-01-19 Intel Corporation Software pipelining at runtime
US9009691B1 (en) * 2013-07-12 2015-04-14 Google Inc. Using an inline stack to improve performance of an applications binary
US9192857B2 (en) 2013-07-23 2015-11-24 Igt Beat synchronization in a game
US9569185B2 (en) 2014-02-07 2017-02-14 Oracle International Corporation Changing de-optimization guard representation during the compilation process
CN105718298B (zh) * 2014-12-03 2019-02-15 龙芯中科技术有限公司 动态编译方法及装置
CN104951335B (zh) * 2015-05-22 2019-01-04 小米科技有限责任公司 应用程序安装包的处理方法及装置
US9947170B2 (en) 2015-09-28 2018-04-17 Igt Time synchronization of gaming machines
CN105373430A (zh) 2015-10-13 2016-03-02 惠州Tcl移动通信有限公司 一种动态分配编译机的系统及其方法
US11029929B2 (en) * 2019-01-24 2021-06-08 Red Hat, Inc. Using emulation to improve startup time for just-in-time compilation
CN112379984B (zh) * 2020-11-16 2024-07-23 神州融安科技(北京)有限公司 执行任务的方法、设备、电子设备及计算机可读存储介质
KR20230019619A (ko) * 2021-08-02 2023-02-09 삼성전자주식회사 어플리케이션 최적화 방법 및 이를 지원하는 장치

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US5394537A (en) * 1989-12-13 1995-02-28 Texas Instruments Incorporated Adaptive page placement memory management system
US5586328A (en) * 1994-10-21 1996-12-17 Microsoft Corporation Module dependency based incremental compiler and method
US5995997A (en) * 1997-05-02 1999-11-30 Microsoft Corporation Apparatus and methods for optimally allocating currently available computer resources to future task instances versus continued execution of current task instances
US5933635A (en) * 1997-10-06 1999-08-03 Sun Microsystems, Inc. Method and apparatus for dynamically deoptimizing compiled activations
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs
US6009517A (en) * 1997-10-06 1999-12-28 Sun Microsystems, Inc. Mixed execution stack and exception handling

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Proc. 6th Workshop HotOS-VI(1997) *

Also Published As

Publication number Publication date
CN1234552A (zh) 1999-11-10
JPH11237989A (ja) 1999-08-31
CN100392595C (zh) 2008-06-04
DE69834230D1 (de) 2006-05-24
US6240548B1 (en) 2001-05-29
US5970249A (en) 1999-10-19
DE69834230T2 (de) 2006-08-31
KR19990036882A (ko) 1999-05-25
EP0908818A2 (en) 1999-04-14
EP0908818A3 (en) 2001-06-20
EP0908818B1 (en) 2006-04-19

Similar Documents

Publication Publication Date Title
KR100589798B1 (ko) 중지동안 바이트 코드 최적화 장치 및 방법
US6237141B1 (en) Method and apparatus for dynamically optimizing byte-coded programs
US6865734B2 (en) Method and apparatus for performing byte-code optimization during pauses
US7958499B2 (en) Program execution control device, program execution control method, control program, and recording medium
US6530075B1 (en) JIT/compiler Java language extensions to enable field performance and serviceability
US6631515B1 (en) Method and apparatus to reduce code size and runtime in a Java environment
EP0767938B1 (en) Method for enforcing a hierarchical invocation structure in real time asynchronous software applications
KR101825772B1 (ko) 선택된 실행 런타임을 갖는 실행을 위한 사용자 코드의 런타임 독립적 표현 기법
US7406684B2 (en) Compiler, dynamic compiler, and replay compiler
US9389889B2 (en) Application server for optimizing timing of performing dynamic compilation
JP2000040022A (ja) 実行マルチスレッドのタイムプロファイリング方法、被選択スレッドの実行状態決定方法、タイムプロファイリングシステム、コンピュ―タ読取可能な記録媒体
US6978285B2 (en) Methods and apparatus for concurrent enumeration of an object reference root set
EP1444575B1 (en) Method and apparatus for dynamically compiling byte codes into native code
US20040015925A1 (en) Method, article of manufacture and apparatus for performing automatic intemodule call linkage optimization
JP2004078322A (ja) タスク管理システム、プログラム、記録媒体、及び制御方法
US7225443B2 (en) Stack usage in computer-related operating systems
US20050066305A1 (en) Method and machine for efficient simulation of digital hardware within a software development environment
CN110750346B (zh) 任务运行优化方法、装置、终端及存储介质
JP3642772B2 (ja) コンピュータ装置及びプログラム実行方法
US11435989B2 (en) Thread-local return structure for asynchronous state machine
US6671877B1 (en) Method and device to calculate activity degrees of method programs
US8091077B1 (en) System and method for handling rare events by modification of executable code
JP2970262B2 (ja) プログラムディスパッチ方式
JPH06324888A (ja) スケジューリングシステム
CN105786586A (zh) 热点方法识别方法及装置

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: 20130522

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20140521

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20150518

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20160517

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20170522

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20180516

Year of fee payment: 13

EXPY Expiration of term