KR19990036881A - 바이트 코드 프로그램 동적 최적화 방법 및 장치 - Google Patents

바이트 코드 프로그램 동적 최적화 방법 및 장치 Download PDF

Info

Publication number
KR19990036881A
KR19990036881A KR1019980041790A KR19980041790A KR19990036881A KR 19990036881 A KR19990036881 A KR 19990036881A KR 1019980041790 A KR1019980041790 A KR 1019980041790A KR 19980041790 A KR19980041790 A KR 19980041790A KR 19990036881 A KR19990036881 A KR 19990036881A
Authority
KR
South Korea
Prior art keywords
routine
threshold
overhead
compilation
code
Prior art date
Application number
KR1019980041790A
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 KR19990036881A publication Critical patent/KR19990036881A/ko

Links

Classifications

    • 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
    • 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
    • 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
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM

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 순서를 호출하는 것을 포함한다. 제 1 선택된 순서의 호출은 제 1 선택된 순서를 번역하는 것을 포함한다. 제 1 선택된 순서의 호출 번호를 추적하도록 배열된 호출 추적자가 갱신되고 제 1 선택된 순서의 호출 번호가 한계값을 초과함을 호출추적자가 표시할 때 제 1 선택된 순서가 번역된다. 한계값은 번역 오버헤드를 허용가능한 범위내에 유지하도록 주기적으로 조절된다.

Description

바이트 코드 프로그램 동적 최적화 방법 및 장치
본 발명은 소프트웨어 응용프로그램 실행을 최적화하는 장치 및 방법에 관계한다. 특히, 본 발명은 실행시간동안 소프트웨어 응용프로그램을 최적화하기 위해서 코드부위가 번역되어야 하는지 컴파일되어야 하는지 동적으로 결정하는 장치 및 방법에 관계한다.
근거리 통신망, 인트라넷 및 인터넷과 같은 컴퓨터 시스템 네트워크에서 자료를 공유하는 컴퓨터 시스템의 사용이 증가하고 있다. 따라서, 소프트웨어 응용프로그램 또는 컴퓨터 프로그램은 특정 컴퓨터 시스템이 특정 컴퓨터 시스템에 특이적인 포맷으로 소프트웨어 응용프로그램이 존재할 것을 필요로 하므로 상이한 컴퓨터 시스템에 상이한 포맷으로 전달될 수 있다. 혹은, 컴퓨터 프로그램은 많은 상이한 컴퓨터 시스템에 의해 한가지 형태의 컴퓨터 프로그램이 사용될 수 있게 하기 위해서 기계독립성 형태로 컴퓨터 시스템에 전달될 수 있다.
컴퓨터 프로그램이 기계독립성 형태로 전달될 경우에 프로그램은 직접 번역되거나 기계종속 코드, 즉 "기계코드"로 변환될 수 있다. 번역된 프로그램은 기계코드로 변환된 프로그램보다 컴퓨터 시스템에서 더 적은 공간을 차지한다. 그러나, 직접 번역된 프로그램은 대개의 경우에 기계코드로 변환된 프로그램보다 실행속도가 느리다. 이와 같이, 컴퓨터 프로그램을 기계코드로 변환하지 않고 직접 번역할 것인가의 여부를 결정하는 것은 실행속도에 대한 공간의 중요성을 기초한다.
컴퓨터 프로그램은 바이트 코드로서 컴퓨터 시스템에 전달될 수 있다. 바이트 코드를 수신하는 컴퓨터 시스템은 실행시간에 바이트 코드를 컴파일하는데 사용되는 컴파일러를 포함한다. 실행시간에 바이트 코드를 컴파일하는 것은 바이트 코드를 기계코드로 변환하는 것이다. 도 1a 는 바이트 코드 컴파일러를 갖는 컴퓨터 시스템의 블록선도이다. 컴퓨터 프로그램으로서 배열될 수 있는 바이트 코드(104)는 컴퓨터 시스템(105)에 제공된다. 바이트 코드(104)는 다양한 소스에 의해 제공된다. 바이트 코드(104)가 실행될 때 바이트 코드(104)는 실행시간에 컴파일러(106)를 사용하여 컴파일 된다. 컴파일러(106)에 의해 생성된 컴파일 코드(108)는 시스템(105)에 특이적이며 시스템내에서 실행될 수 있는 기계 종속 코드이다. 즉, 컴파일러(106)는 바이트 코드(104)를 실행시간에 컴파일 코드(108)로 변환시킨다.
어떤 컴퓨터 시스템은 앞서 컴파일된 코드 부위가 반복 실행되는 것이 발견될 때 앞서 컴파일된 코드 부위가 "재-컴파일"될 수 있게 한다. 다시 말하자면, 제 2 의 더욱 비용이 드는 컴파일 과정이 반복 호출된 앞서 컴파일된 코드를 컴파일하여서 반복 호출된 코드의 더욱 효과적인 실행을 허용하는데 사용될 수 있다. 도 1b 는 두가지 컴파일 과정을 사용하는 컴퓨터 시스템의 블록선도이다. 컴퓨터 시스템(115)은 제 1 컴파일러(116)와 제 2 컴파일러(122)를 포함한다. 바이트 코드(144)는 실행을 위해 컴퓨터 시스템(115)에 제공된다. 실행시간에 제 1 컴파일러(116)는 바이트 코드(114)를 기계 종속 컴파일 코드(118) 또는 기계코드로 변환한다.
기계 종속 컴파일 코드(118)가 실행되고 기계 종속 컴파일 코드(118)내에 포함된 다양한 순서가 추적되어서 가장 빈번히 호출된 순서가 제 2 컴파일러(122)로 컴파일 될 수 있을 시기를 결정한다. 반복 실행된 컴파일 코드(120)가 식별될 경우에 컴퓨터 프로그램의 실행속도를 증가시키기 위해서 반복 실행된 컴파일 코드(120)가 재-컴파일된다. 이와 같이, 제 2 컴파일러(122)는 반복 실행된 컴파일 코드(120)를 재-컴파일된 고실행 코드(124)로 변환한다.
제 2 컴파일러(122)는 제 1 컴파일러(116)보다 느린 컴파일러이지만, 제 2 컴파일러(122)를 사용하여 컴파일된 코드는 제 1 컴파일러(116)를 사용하여 컴파일된 코드보다 더욱 효과적으로 실행한다. 그러므로, 고실행 컴파일 코드(120)를 재-컴파일하는 시기의 결정은 총 실행시간 측면에서 추가 컴파일 오버헤드가 재-컴파일된 고실행 코드(124)에 의해 부여되는 효율향상간의 흥정이 관련된다.
효율증가를 위해 앞서 컴파일된 코드가 재-컴파일될 수 있게 하는 시스템은 순서와 같이 컴파일된 코드의 특정 부위가 얼마나 자주 호출되는지에 기초하여 앞서 컴파일된 코드를 재-컴파일할 것인지 여부를 결정한다. 만약 순서가 고정된 한정값보다 여러번 호출되었다면 이 순서는 재-컴파일된다. 고정된 한계값은 실행 효율 증가를 위해서 순서가 재-컴파일 되기 이전에 순서가 호출된 횟수를 반영한다.
컴파일러가 바이트 코드를 실행시간에 기계종속코드로 변환하는데 사용될 때 상당한 컴파일 오버헤드가 프로그램의 실행에 종종 첨가된다. 이와 같이, 기계코드가 번역된 코드보다 빠르게 실행될 수 있지만, 기계코드 실행에 앞서 프로그램의 모든 부분을 기계코드로 컴파일 하는 것은 증가된 실행속도가 프로그램 컴파일링과 관련된 오버헤드를 보상하지 못할 경우에 바람직하지 않다. 다시 말하자면, 프로그램 컴파일링에 소모되는 시간이 프로그램 실행동안 회복되지 않을 경우에 프로그램은 번역된 코드로서 더 빠르게 실행된다.
앞서 기술된 기존의 시스템에서 컴파일링된 프로그램의 루틴을 재-컴파일링 하는 것은 프로그램을 더욱 효율적으로 실행시킬 수 있지만 루틴이 재컴파일링 되어야 하는 시기를 결정하기 위해서 고정된 한계값을 사용하는 것은 최적이 아닌 실행을 가져온다. 예컨대, 프로그램의 모든 루틴이 재-컴파일링 되도록 한계값이 설정된다면 재-컴파일링으로 수득된 실행속도 증가는 재-컴파일링과 관련된 컴파일 오버헤드를 보상하지 못할 수 있다.
그러므로, 필요한 것은 바이트 코드 포맷으로 프로그램을 효과적으로 실행하는 방법이다. 특히, 바람직한 것은 컴퓨터 프로그램의 부위가 번역되어야 하는 시기와 기계코드로 변환되어야 하는 시기를 동적으로 결정함으로써 컴퓨터 프로그램의 효과적인 실행을 보장하는 것이다.
도 1a 는 바이트 코드 컴파일러를 갖는 컴퓨터 시스템의 블록선도이다.
도 1b 는 두 개의 컴파일 프로세스를 사용하는 컴퓨터 시스템의 블록선도이다.
도 2a 는 본 발명의 구체예에 따라 코드를 동적으로 컴파일하는 컴퓨터 시스템의 블록선도이다.
도 2b 는 본 발명의 구체예에 따라 바이트 코드를 처리하는 단계를 보여주는 순서도이다.
도 3 은 본 발명의 구체예에 따라서 프로그램 실행과 관련된 단계(도 2b 의 단계(206))를 보여주는 순서도이다.
도 4 는 본 발명의 구체예에 따라서 순서 실행과 관련된 단계(도 3 의 단계(320))를 보여주는 순서도이다.
도 5 는 본 발명의 구체예에 따라서 재컴파일러 실행과 관련된 단계(도 4 의 단계(420))를 보여주는 순서도이다.
도 6 은 본 발명의 구체예에 따라서 한계값 증가와 관련된 단계(도 5 의 단계(516))를 보여주는 순서도이다.
도 7 은 본 발명의 구체예에 따라서 한계값 모니터의 실행과 관련된 단계(도 2b 의 단계(204))를 보여주는 순서도이다.
도 8 은 본 발명의 구체예에 따라서 한계값 감소와 관련된 단계(도 7 의 단계(712))를 보여주는 순서도이다.
도 9 는 본 발명의 구체예에 따라서 번역 오버헤드 계산과 관련된 단계를 보여주는 순서도이다.
도 10 은 본 발명의 실시에 적합한 범용 컴퓨터 시스템의 개략도이다.
도 11 은 본 발명의 실시예 적합하며 도 10 의 컴퓨터 시스템에 의해 지원 받는 가상기계의 개략도이다.
* 부호설명
104,114,144,154,1130 ... 바이트 코드
106,116,122,150,170,1120,1142 ... 컴파일러
108,118,120,166 ... 컴파일 코드 115,146,1030 ... 컴퓨터 시스템
124,158,162,174 ... 코드 148,1144 ... 번역기
1012 ... 네트워크 1032 ... 프로세서
1034,1036,1038 ... 저장장치 1105 ... 컴파일 시간환경
1110 ... 원시코드 1135 ... 실행시간 환경
1140 ... 가상기계 1146 ... 실행시간 시스템
1160 ... 운영 시스템
실행시간동안 소프트웨어 응용프로그램을 최적화 하기 위해서 바이트 코드 부위가 번역되어야 하는지 또는 컴파일링 되어야 하는지 여부를 동적으로 결정하는 장치 및 방법이 발표된다. 본 발명의 한 측면에 따르면 선택된 순서가 호출될 때 초기에 번역된다. 호출 추적자는 선택된 순서의 호출 횟수를 추적한다. 선택된 순서의 호출 횟수가 한계값을 초과할 때 이 순서는 컴파일링 된다. 다양한 순서나 기타 코드 세그멘트의 사용을 독립적으로 추적함으로써 순서가 컴파일링 되어야 하는지 번역되어야 하는지에 대해 결정을 할 수 있다. 어떤 구체예에서 모든 순서에 대해서 단일한 한계값이 사용될 수 있다. 다른 구체예에서 복수의 한계값이 사용될 수 있으며, 각 한계값은 하나 이상의 순서와 관련된다. 이 경우 상이한 순서와 관련된 한계값이 변화될 수 있다.
본 발명의 또다른 측면에서, 특정 순서 컴파일링과 관련된 오버헤드가 측정된다. 이후에 오버헤드는 허용가능한 오버헤드 매개변수와 비교되어서 오버헤드가 허용범위내에 있지 않을 경우 특정 순서의 컴파일링을 조장하는 한계값이 조절된다. 본 발명의 이러한 측면은 순서의 초기 컴파일링 또는 재-컴파일링에 적용될 수 있다.
본 발명의 또다른 측면에 따르면 복수의 순서로서 배열된 바이트 코드를 실행하는 컴퓨터 시스템은 다양한 순서 번역에 적합한 번역기와 선택된 순서의 번역을 계수하는 추적장치를 포함한다. 추적장치는 선택된 순서가 컴파일링에 적합할 시기를 결정하는데 사용된다. 컴퓨터 시스템은 또한 다양한 순서 컴파일링에 적합한 컴파일러를 포함한다. 한 구체예에서 컴퓨터 시스템은 추적 장치와 함께 선택된 순서가 컴파일링에 적합한 시기를 결정하는 한계값 조절 장치를 포함한다. 또다른 구체예에서 컴퓨터 시스템은 컴파일링된 이후에 선택된 순서의 호출을 계수하여 선택된 순서가 재컴파일링에 적합한 시기를 결정하는데 사용되는 또다른 추적장치를 포함한다.
바이트 코드화 컴퓨터 프로그램이 컴퓨터 시스템에 제공될 때 프로그램은 직접 번역되거나 실행을 위한 실행시간에 기계코드로 변환된다. 직접 번역된 프로그램은 기계코드로 변환된 프로그램보다 더 적은 컴퓨터 메모리를 차지한다. 반면에, 기계코드로 변환된 프로그램은 직접 번역된 프로그램보다 빠르게 실행된다. 그러나, 어떤 경우에 기계코드를 발생하기 위해서 컴파일러가 사용될 때 프로그램의 총 실행시간에 첨가되는 컴파일 오버헤드가 프로그램 실행동안 항상 회복되지는 않는다. 이 경우에 프로그램을 직접 번역하는 것이 더 빠르고 더 효과적이다. 일반적으로, 프로그램이 직접 번역시 효과적으로 실행되는지 기계코드로 변환시 효과적으로 실행되는지 여부의 결정은 어렵다. 이와 같이 프로그램은 종종 가장 빠르게 또는 가장 효과적으로 실행되지 않는다.
바이트 코드화 컴퓨터 프로그램이 직접 번역될 수도 있고 기계코드로 변환될 수도 있음은 단지 번역된 프로그램에 의해 수득가능한 실행속도에 비해서 컴퓨터 프로그램의 실행속도를 증가시킨다. 번역코드와 기계(컴파일)코드의 혼합은 기계코드 단독의 실행과 관련된 메모리 조건을 크게 감소시킨다. 이와 같이 번역코드와 컴파일 코드의 혼합은 프로그램 실행 효율을 증가시킨다.
바이트 프로그램의 각 순서는 순서를 컴파일링 하는 것이 프로그램의 전체 실행에 이득이 되는지 여부를 결정하도록 모니터 될 수 있다. 한 구체예에서, 순서 모니터링은 순서가 번역된 순서로서 호출되는 횟수 추적을 포함한다. 번역된 순서의 호출이 어떤 수준, 또는 컴파일링 될 경우 순서가 컴파일 비용을 회복할 가능성을 표시하는 한계값에 도달할 때 순서가 동적으로 컴파일링 된다. 프로그램의 순서 컴파일링과 관련된 컴파일 오버헤드가 허용가능한 수준에 유지됨을 보장하기 위해서 프로그램의 컴파일 오버헤드와 번역 오버헤드 둘다 모니터 된다. 컴파일 오버헤드가 너무 높다고 간주되면 컴파일링 되는 순서의 횟수를 감소시켜서 컴파일 오버헤드를 감소시키도록 조절이 행해질 수 있다. 행해지는 조절은 번역된 순서가 컴파일링 될 수 있을 시기의 결정에 사용되는 한계값을 상승시킴을 포함한다. 한계값이 변형될 수 있게 함으로써 바이트 코드화 프로그램의 실행이 최적화될 수 있다. 다시 말하자면, 번역된 코드와 동적으로 컴파일링된 코드의 혼합이 조절되어서 프로그램에 의해 점유되는 메모리 공간과 프로그램의 실행속도간에 더 양호한 균형과 더 작은 실행시간을 달성시킨다.
도 2a 에서, 바이트 코드가 동적으로 컴파일링 되어야 하는 시기를 결정하는 적응 한계값을 사용하는 컴퓨터 시스템이 기술된다. 바이트 코드(144)는 실행시간에 컴퓨터 시스템(146)에 입력으로서 제공된다. 기계 독립성 컴퓨터 프로그램으로서 조절될 수 있는 바이트 코드(144)는 순서 또는 루틴으로서 배열된다. 한 구체예에서 바이트 코드(144)는 가상 기계내의 컴파일 시간 환경에 의해 동일한 가상 기계내의 실행시간 환경, 즉 컴퓨터 시스템(146)에 제공될 수 있다. 본 발명이 실시될 수 있는 가상 기계는 도 11 을 참조로 상술될 것이다.
바이트 코드(144)가 컴퓨터 시스템(146)에 제공될 때 바이트 코드(144)는 번역기(148)를 사용하여 처리되거나 컴파일 코드 생성을 위해 컴파일러(150)에 의해 컴파일링 될 수 있다. 바이트 코드(144)가 번역기(148)와 컴파일러(150) 둘다에 직접 입력될 수 있을지라도 바이트 코드(144)가 단지 번역기(148)에만 제공된다. 바이트 코드(144) 처리와 관련된 단계가 도 2b 를 참조로 상술될 것이다.
한 순서가 호출될 때마다 이 순서와 관련된 바이트 코드(144)가 번역기(148)를 사용하여 번역된다. 한 순서가 번역되는 횟수에 대한 측정이 이루어진다. 순서가 번역되는 횟수를 추적하는데 측정기가 사용된다. 적당한 측정기의 예로는 순서가 번역되는 횟수를 계수하는 계수기가 있다. 이러한 계수기는 순서가 번역될때마다 계수가 증가되도록 순서내에 구현된다.
순서가 번역되는 횟수가 한계값을 초과할 때 이 순서는 컴파일러(150)에 의해 컴파일링 될 수 있다. 빈번히 실행된 코드(158)에 포함된 순서를 반복 번역하는 것은 번역된 바이트 코드(154)가 컴파일 코드보다 느리거나 덜 효율적으로 실행되므로 비효과적일 수 있다. 빈번히 실행되는 코드(158)의 컴파일링은 순서 컴파일링에 의해 수득되는 시간 절감이 컴파일 과정과 관련된 컴파일 오버헤드를 보상하기 때문에 빈번히 실행된 코드(158)에 포함된 순서가 더욱 효과적으로 실행될 수 있게 한다.
일반적으로 대개의 컴퓨터 프로그램 실행동안 어떤 순서(루틴)는 반복 수행되고 다른 순서는 자주 실행되지 않는다. 빈번히 수행되는 코드(158)는 프로그램 실행의 상당부분을 차지하는 순서를 포함하는 코드의 섹션으로서 분류된다. 빈번히 실행된 코드(158)가 컴파일러(150)에 의해 컴파일링 될 때 빈번히 실행된 코드(162)에 대한 컴파일링된 버전이 생성된다. 그러므로 컴파일링된 자주 실행된 코드(162)내에 포함된 순서가 호출될 때 컴파일링된 순서가 호출된다. 한 구체예에서, 빈번히 실행되는 코드(158)는 총 실행시간의 50% 이상, 예컨대 총실행시간의 90%를 차지하는 순서 그룹을 포함한다.
어떤 컴퓨터 시스템은 단일 컴퓨터 레벨을 포함하며 다른 컴퓨터 시스템은 다중 컴파일 레벨을 포함할 수 있다. 다중 컴파일 레벨을 포함하는 컴퓨터 시스템은 순서 재컴파일링이 이 순서와 관련된 실행효율을 증가시킬 수 있음이 결정될 때 컴파일링된 순서를 재컴파일링 하도록 배열될 수 있다. 예컨대, 컴파일러(150)를 사용하여 달성될 수 있는 제 1 컴파일 레벨이 "중간" 컴파일 레벨과 관련될 수 있다. 중간 컴파일 레벨은 바이트 코드 번역보다 효율적이지만 "최종" 컴파일 레벨만큼 효과적이지 않는 컴파일 형태로 바이트 코드를 컴파일링 하도록 배열될 수 있다. 중간 컴파일 레벨은 컴파일 시간동안 즉시 컴파일링된 순서 실행과 관련된 실행효율을 희생할 수 있지만 최종 컴파일 레벨은 더 오랜 컴파일 시간과 관련되지만 더 효율적인 실행을 시킨다.
한 구체예에서 가장 자주 실행되는 컴파일링된 빈번히 실행된 코드(162)에 포함된 순서를 식별하기 위해서 추적장치가 사용된다. 다시 말하자면, 컴파일링된 빈번히 실행된 코드(162)내에서 고실행 컴파일링된 코드(166)가 식별될 수 있다. 고실행 컴파일링된 코드(166)내의 순서가 실행되는 횟수가 한계값을 초과할 때 추가 컴파일러(170)를 사용하여 고실행 컴파일 코드(166)가 재 컴파일링 될 수 있어서 고실행 코드(174)의 재 컴파일링된 버전을 생성한다. 추가 컴파일러(170)가 컴파일러(150)와 상이한 컴파일러일 수 있다. 혹은, 컴파일러(170)와 컴파일러(150)는 상이한 컴파일러 매개변수로 실현되는 동일한 컴파일러일 수 있다. 단지 두 개의 컴파일 레벨이 기술될지라도 시스템(146)은 일반적으로 임의의 수에 컴파일 레벨을 포함할 수 있다.
도 2b 는 바이트 코드, 예컨대 기계 독립성 컴퓨터 프로그램을 본 발명의 구체예에 따라서 실행하는 것과 관련된 단계를 보여주는 순서도 있다. 과정(202)은 한계값 모니터가 개시되는 단계(204)에서 시작한다. 한계값 모니터는 컴퓨터 프로그램과 동시에 실행되며 특정순서가 컴파일화를 위해서 고려될 수 있기 전에 실행될 수 있는 횟수를 표시하는 한계값을 계속 추적한다. 한계값 모니터에 대한 구체예는 도 7 을 참조로 기술될 것이다.
단계(206)에서 바이트 코드로 구성된 컴퓨터 프로그램이 실행된다(도 3). 컴퓨터 프로그램이 실행된 이후에 바이트 코드 처리가 완결된다. 한계값 모니터와 프로그램은 동시에, 즉 병렬과정으로서 실행된다. 다시 말하자면 단계(204)와 (206)는 병렬 실행된다.
도 3 에서 프로그램 실행과 관련된 단계가 본 발명의 구체예에 따라 기술된다. 즉 도 2b 의 단계(206)가 기술된다. 단계(308)에서 한계값이 초기화된다. 한 구체예에서 한계값은 순서가 컴파일화를 위해 고려될 수 있기 전에 특정 순서가 실행되는 횟수를 표시하는 상한 한계값이다. 한계값은 특정 시스템의 필요조건, 메모리와 성능에 따라서 변화될 수 있다.
한 구체예에서 프로그램 실행과 관련된 모든 순서에 대해 단지 단일한 한계값이 있다. 즉 한계값은 전역 상수 또는 전역 변수일 수 있다. 그러나 다른 구체예에서 다중한계값이 존재할 수 있다. 즉, 한계값은 순서 특이적 상수 또는 순서 특이적 변수이다.
단계(308)에서 한계값이 초기화된 이후에 실행 계수기를 갖지 않는 순서를 포함하는 번역된 코드가 적재되고 실행 계수기가 단계(312)에서 순서에 첨가된다. 다시 말하자면 순서가 할당되고 계수기가 새로 할당된 순서에 첨가된다. 계수기가 첨가되면 새로 할당된 순서에 있는 계수기가 단계(316)에서 초기화, 예컨대 0으로 설정된다.
단계(316)로 부터 적재된 코드에 있는 순서가 코드실행 완료까지 실행되는 단계(320)에 진행한다. 코드실행동안 제어흐름은 이전에 적재되지 않은 순서에 도달하고, 이 경우에 코드는 동적으로 적재될 수 있다. 순서 M 실행과 관련된 단계가 도 4 를 참조로 상술될 것이다. 코드실행동안 적재될 번역 코드가 있는지 여부에 대한 결정이 단계(324)에서 행해진다. 만약 추가 번역코드가 적재될 수 있다고 결정되면 단계(312)로 복귀하여 추가 코드가 적재된다. 혹은, 적재될 추가 번역코드가 없다고 결정되면 단계(320)에서 코드 실행이 계속된다.
도 4 는 본 발명의 구체예에 따라서 순서실행과 관련된 단계, 즉 도 3 의 단계(320)를 보여주는 순서도이다. 순서 M 의 실행은 순서 M 의 계수가 증가되는 단계(404)에서 시작한다. 계수가 증가된 후에 순서 M 의 계수가 단계(408)에서 한계값과 비교된다. 한계값은 순서 M 이 컴파일화를 위해 고려되기 이전에 순서 M 이 실행될 수 있는 횟수를 표시한다.
순서 M 의 계수가 한계값을 초과하는지 여부에 대한 결정은 단계(412)에서 행해진다. 순서 M 의 계수가 한계값을 초과하지 않으면 순서 M 을 컴파일링할 필요가 없다. 따라서, 단계(412)로 부터 단계(416)로 진행하여 번역기를 사용하여 순서 M 이 실행된다. 혹은, 단계(412)에서 순서 M 의 계수가 한계값을 초과한다고 결정되면 순서 M 이 번역되기 보다는 컴파일링 되는 것이 전체 프로그램 실행에 더욱 효율적이다. 이와 같이 순서 M 의 계수가 한계값을 초과하면 재 컴파일러가 단계(420)에서 실행된다. 재컴파일러 실행과 관련된 단계는 도 5 를 참조로 상술될 것이다.
단계(420)에서 재 컴파일러가 실행된 후에 단계(424)로 진행하여 순서 M 가 컴파일링 되는지 결정이 행해진다. 즉, 단계(420)에서 재 컴파일러의 실행의 결과로서 순서 M 이 컴파일링 되는지 결정이 행해진다. 순서 M 이 컴파일링 되지 않는다고 결정되면 단계(416)로 진행하며 순서 M 이 번역을 통해 실행된다. 단계(424)에서 순서 M 이 컴파일링 된다고 결정되면 순서 M 의 컴파일 코드가 단계(428)에서 실행된다.
한 구체예에서, 컴파일러가 순서 M 을 처리하는 방법을 결정하기 위해서 재 컴파일러가 사용된다. 컴파일링이 전체 프로그램이 실행에 이득이 된다고 결정되면 이러한 재 컴파일러는 순서 M 을 컴파일링하기 위해서 컴파일러를 호출하도록 배열된다. 도 5 는 재컴파일러 실행과 관련된 단계, 즉 도 4 의 단계(420)를 보여주는 순서도이다. 재 컴파일러의 실행은 순서 M 의 직접 호출자에 대해 검색이 행해지는 단계(504)에서 시작한다. 일반적으로, 호출자 또는 호출된 순서 M 에 대한 검색은 호출 스택을 검사하는 것이다.
단계(506)에서 순서 M 의 호출자에 대한 검색 이후에 순서 M 의 호출자가 존재하는지 여부가 결정된다. 서브루틴 M 의 호출자가 존재한다고 결정된다면 전체 프로그램과 관련된 컴파일러가 서브루틴 M을 호출자와 인라인시키는지에 대해서 결정이 행해지는 단계(508)로 진행한다. 서브루틴 M과 호출자의 인라인은 서브루틴 M의 번역코드의 사본을 만들어서 코드의 불필요한 부위, 예컨대 호출자로 부터 서브루틴 M으로의 변수나 매개변수의 통과와 관련된 코드를 제거한 후에 복사된 코드를 호출자에 포함시킨다. 호출자가 반복 실행되어 서브루틴 M을 반복실현되게 하거나 호출자가 서브루틴 M을 반복 호출한다면 서브루틴을 호출자에 인라인하여 호출자를 컴파일링 하는 것은 전체 프로그램 실행의 효율을 증가시키는 역할을 한다. 그러나, 다른 서브루틴이 서브루틴 M을 호출하여서 서브루틴 M이 다른 서브루틴에 접근가능하게 유지되어야 한다는 사실로 인하여 서브루틴 M의 호출자로의 인라인은 서브루틴 M의 인라인되지 않은 버전을 제거하지 못한다. 이와 같이 서브루틴 M을 호출자에 인라인 하는 것은 서브루틴 M이 인라인될 때 프로그램과 관련된 코드의 물리적 양이 증가하기 때문에 전체 프로그램의 효율을 반드시 향상시키지는 못한다.
컴파일러가 절차 M을 호출자와 인라인 시킨다고 단계(508)에서 결정된다면 전체 프로그램 실행 효율 향상은 추가 프로그램 코드의 첨가를 필요로 한다. 따라서, 단계(508)로 부터 단계(510)로 진행하여 컴파일러에 호출에 행해져 절차 M을 인라인하고 절차 M이 인라인된 절차 M의 호출자를 컴파일링 한다.
순서 M의 호출자에 순서 M을 인라인시키는 결정에는 다양한 인자가 관계된다. 인자의 예로는 순서 M의 크기, 호출자의 크기, 순서 M 및 호출자와 관련된 매개변수값, 순서 M을 호출할 수 있는 순서 M의 번호이다. 일반적으로, 순서 M의 인라인은 순서 M을 순서 M의 호출자에 인라인시킬 뿐만 아니라 순서 M의 호출자를 호출자의 호출자에 인라인시키는 것이다. 다시 말하자면 스택에서 임의의 레벨에 대해서 호출자가 검사될 수 있다.
루틴 M이 인라인되고 호출자가 컴파일링된 이후에 단계(512)에서 컴파일 오버헤드가 검사된다. 일반적으로 컴파일 오버헤드 검사는 실행시간동안 루틴을 컴파일링 하는 것과 관련된 오버헤드를 모니터링 하는 것이다. 이후에 컴파일 오버헤드가 필요한 최대의 컴파일 오버헤드에 대해서 비교된다. 필요한 최대의 컴파일 오버헤드는 전체 시스템 오버헤드의 최대 백분율 정도, 예컨대 중앙처리장치(CPU)이거나 루틴 컴파일링에 소모된 경과시간 또는 실행시간동안 기계 코드로 변환하는데 소모한 경과시간이다. 그러므로, 컴파일 오버헤드 검사는 실행시간에 실제로 컴파일링에 사용된 시스템 오버헤드의 양을 결정하는 것이다.
컴파일 오버헤드가 필요한 최대 컴파일 오버헤드를 초과하는지에 대한 결정은 단계(514)에서 행해진다. 컴파일 오버헤드가 필요한 최대 컴파일 오버헤드를 초과한다고 결정되면 너무 많은 루틴이 컴파일링되므로 단계(516)로 진행하여 한계값이 증가된다. 한계값 증가는 루틴이 컴파일화를 위해 고려되기 이전에 루틴이 호출되는 횟수를 증가시키기 때문에 한계값은 컴파일 오버헤드 감소에 효과적이다. 예컨대 한계값이 1000으로 설정되고 모든 루틴이 프로그램 실행과정 동안 1000회 이상 호출된다면 한계값을 10,000으로 상승시킬 경우 더 적은 수의 루틴이 컴파일되므로 컴파일 오버헤드가 낮춰진다. 한계값 증가와 관련된 단계는 도 6 을 참조로 상술될 것이다. 단계(516)에서 한계값이 증가된다면 재 컴파일러 실행 공정이 완결된다.
단계(514)에서 컴파일 오버헤드가 필요한 최대 컴파일 오버헤드보다 작다고 결정되면 한계값은 허용가능하다고 간주된다. 즉, 루틴 컴파일링과 컴파일링된 루틴 실행과 관련된 오버헤드가 허용가능한 레벨에 있는 것으로 간주된다. 이와 같이 재 컴파일러의 실행이 완결된다.
단계(508)로 돌아와서 전체 프로그램의 실행과 관련된 컴파일러가 루틴 M을 호출자와 인라인시키지 않는다고 결정되면 단계(518)에서 루틴 M을 컴파일링 하도록 컴파일러가 호출된다. 루틴 M을 인라인하지 않고 루틴 M만을 컴파일링 하는 것은 전체 프로그램과 관련된 코드의 용량을 감소시킨다. 루틴 M의 인라인은 루틴 M의 복사를 가져온다. 이후에 루틴 M이 상이한 루틴에 의해 호출된다면 루틴 M은 상이한 루틴에 인라인 될 수 있다. 그러므로, 루틴 M과 관련된 코드의 사본이 전체 프로그램에서 증대되고 인라인된 코드의 컴파일링과 관련된 컴파일러의 정도는 상당하다. 그러므로 컴파일 정도를 감소시키고 공간을 절약하기 위해서 루틴 M이 한 개 이상의 루틴에 의해 호출된다면 루틴 M을 인라인 하기 보다 루틴 M이 단독으로 컴파일링 될 수 있다. 단계(518)에서 루틴 M이 컴파일되면 단계(512)로 진행하여 컴파일 오버헤드가 검사된다. 루틴 M이 한 개 이상의 루틴에 의해 호출되는지 여부의 결정은 호출 체인을 조사하는 것과 관계된다.
순서 M에 대한 호출자가 존재하는지 여부를 결정하는 단계인 단계(506)로 돌아와서, 순서 M에 대한 호출자가 존재하지 않거나 호출자의 검색동안 발견되지 않는다면 단계(518)에 진행하여 순서 M이 컴파일링된다. 호출자가 발견되지 않을 때 루틴 M이 실행시간 시스템에 의해서 호출된다.
프로그램의 전체 실행과 관련된 컴파일 오버헤드가 필요한 최대 오버헤드보다 클 경우 한계값이 증가될 수 있다. 이러한 적응 한계값의 사용은 특정 응용 프로그램에 필요한 한계값이 변형될 수 있게 한다. 많은 루틴 또는 기능이 정해진 수에 호출을 초과하는 응용 프로그램의 경우에 대응 한계값이 너무 낮다면 효율 측면에서 즉 시간 및 공간 측면에서 바람직하지 않게 높은 컴파일 오버헤드를 가져올 수 있다. 따라서 더 높은 한계값 설정이 더욱 바람직한, 즉 더 낮은 컴파일 오버헤드를 가져올 수 있다.
프로그램 실행과정동안 한계값 증가는 루틴 컴파일화를 연속으로 방해할 수 있다. 예컨대 비교적 많은 수의 상이한 루틴이 동시에 특정 한계값을 초과할 경우에 전체 프로그램 실행동안 중단이 일어날 수 있다. 프로그램실행동안 중단은 종종 바람직하지 않기 때문에 첫 번째 적은 수의 루틴이 컴파일링된 후에 한계값을 증가시키면 컴파일화 순서를 연속으로 방해하여 상당한 컴파일화 중단을 제거할 수 있다.
도 6 에서 한계값 증가와 관련된 단계가 기술될 것이다. 즉 도 5 에 단계(516)가 기술될 것이다. 한계값이 전역값인 경우에 한계값 증가는 전역값 증가이다. 혹은 한계값이 루틴 특정값일 경우에 한계값 증가는 특정 루틴 또는 루틴 그룹에 대한 한계값을 증가시키는 것이다.
한계값 증가 과정은 한계값이 상한 한계값인지에 대한 결정이 행해지는 단계(602)에서 시작한다. 시행되는 전체 프로그램의 필요조건이 종속될 수 있는 한계값 상한은 허용가능한 것으로 간주되는 최고의 한계값이다.
만약 단계(602)에서 한계값이 한계값 상한에 있다고 결정하여 한계값은 증가되지 않을 수 있다. 이와 같이 한계값 증가 과정은 완결된 것으로 간주된다. 예컨대 1000 내지 50000의 호출크기에 대한 한계값 상한이 기존의 시스템에서 적절할 수 있다. 그러나 단계(602)에서 한계값이 한계값 상한에 있지 않다고 결정되며 단계(604)에서 현재 시간동안 한계값이 상향으로 조절되었는지에 대한 결정이 행해진다. 한계값이 현재시간동안 상향으로 조절되었는지 여부를 결정하는 것은 관련된 간격변화 플래그가 조절이 최근에 행해졌다는 것을 표시하는지의 여부를 결정하는 것이다. 간격변화 플래그 설정 및 소거 메카니즘이 기술될 것이다.
현재 시간동안 한계값이 이미 상향 조절되었다고 단계(604)에서 결정된다면 한계값은 더 이상 조절되지 않는다. 한계값이 최근에 조절되었을 때 한계값을 더 이상 증가시키지 않음으로써 한계값이 과다 조절되는 것을 방지할 수 있다. 단계(604)에서 한계값이 더 이상 증가되지 않는다고 결정되면 한계값 증가과정은 완료된 것으로 간주된다.
단계(604)에서 현재 시간동안 한계값이 상향 조절되지 않았다고 결정되면 단계(606)로 진행하여 한계값이 한계값 인자만큼 곱해진다. 한계인자는 전체 컴퓨터 프로그램의 필요조건에 따라 변화될 수 있다. 예컨대, 1.2 내지 2 의 한계값 인자가 현재 시스템에서 잘 작용한다. 한계값이 한계값 인자만큼 곱해진 이후에 단계(608)에서 간격 변화 플래그가 설정된다. 간격 변화 플래그는 현재 시간동안 한계값이 상향 조절되었다는 것을 표시하는데 사용된다. 한계값 증가 과정은 간격 변화 플래그가 설정된 후에 완결된다.
도 2b 를 참조로 기술된 구체예에서 프로그램 실행의 개시는 한계값 모니터의 개시와 병렬로 이루어진다. 즉, 프로그램이 실행중일 때 한계값 모니터 역시 실행중이다. 도 7 은 한계값 모니터의 실행 개시와 관련된 단계를 보여주는 순서도이다(즉 도 2b 의 단계(204)). 한게값 모니터의 실행은 타이머 신호가 한계값 모니터에 의해 운영 시스템으로 부터 수신되는 단계(702)에서 개시된다. 타이머 신호는 프로그램의 실행을 주기적으로 인터럽트하는 클록 "덕"이다. 한계값 모니터의 실행은 지연될 수 있다. 즉 한계값 모니터는 타이머 신호를 수신할때까지 "수면" 상태에 있다.
타이머 신호가 수신되면 컴파일 오버헤드와 인터프리트 오버헤드에 대한 슬라이딩 평균이 단계(704)에서 갱신된다. 즉, 컴파일에 소모된 시간과 인터프리트에 소모된 시간이 시간 간격의 수에 대해 평균된 기간의 백분율로서 표시될 수 있다.
슬라이딩 평균이 갱신된 이후에 단계(706)에서 간격 변화 플래그가 재설정된다. 간격 변화 플래그 재설정은 주어진 기간동안 한계값이 조절되지 않았음을 표시하도록 간격 변화 플래그를 설정하는 것이다. 간격 변화 플래그 재설정후 컴파일 오버헤드가 필요한 최대 컴파일 오버헤드를 초과하는지 여부가 단계(708)에서 결정된다. 컴파일 오버헤드는 최소의 필요한 컴파일 오버헤드와 최대의 필요한 컴파일 오버헤드 사이에 있도록 유지된다. 최소의 필요한 컴파일 오버헤드와 최대의 필요한 컴파일 오버헤드의 값이 변화될지라도 5 내지 25%의 최소값과 20 내지 65%의 최대값이 일부 시스템에서 잘 작용한다. 한 구체예에서 최소의 필요한 컴파일 오버헤드는 주어진 기간의 약 10%이고 최대의 필요한 컴파일 오버헤드는 주어진 기간의 약 50%이다.
단계(708)에서 컴파일 오버헤드가 최대의 필요한 컴파일 오버헤드보다 크다고 결정되면 단계(716)로 진행하여 한계값, 예컨대 전역 한계값이 증가된다. 한계값 증가에 사용되는 적당한 방법은 도 6 을 참조로 기술되었다. 한계값이 증가되면 단계(702)로 진행하여 운영 시스템으로 부터 수신된 새로운 타이머 신호를 기다린다.
단계(708)에서 컴파일 오버헤드가 최대의 필요한 컴파일 오버헤드보다 작다고 결정되면 단계(710)에서 컴파일 오버헤드가 최소의 필요한 컴파일 오버헤드보다 작은지 여부가 결정된다. 컴파일 오버헤드가 최소의 필요한 컴파일 오버헤드보다 작으면 한계값이 너무 높을 수 있다. 이와 같이 컴파일 오버헤드를 최소의 필요한 컴파일 오버헤드와 최대의 필요한 컴파일 오버헤드 사이에 놓이게 하도록 한계값은 단계(712)에서 감소된다. 도 8 을 참조로 기술되는 한계값 감소는 한계값에 더 용이하게 도달될 수 있게 함으로써 루틴 컴파일을 증가시킨다. 그러므로 컴파일 오버헤드가 최소의 필요한 오버헤드 이상으로 증가될 수 있다. 한계값이 감소된 이후에 단계(702)로 복귀하여 한계값 모니터 실행과정이 타이머 신호 수신때까지 지연된다.
컴파일 오버헤드가 최대의 필요한 인터프리트 오버헤드와 최소의 필요한 인터프리트 오버헤드 사이에 있다고 결정될 때 단계(714)에서 인터프리트 오버헤드가 최대의 필요한 인터프리트 오버헤드보다 큰지를 결정한다. 인터프리트 오버헤드 계산 방법이 도 9 를 참조로 기술된다.
최대의 필요한 인터프리트 오버헤드는 다양하게 변화될 수 있다. 추가로, 최소의 필요한 인터프리터 오버헤드 역시 변화될 수 있다. 예컨대, 최대의 필요한 인터프리트 오버헤드는 주어진 기간의 약 20%이고 최소의 필요한 인터프리터 오버헤드는 주어진 기간의 약 5%이다. 한 구체예에서 필요한 인터프리트 오버헤드는 필요한 컴파일오버헤드와 같을 수 있다.
인터프리트 오버헤드가 최대의 필요한 인터프리트 오버헤드보다 크다면 도 8 의 방법과 같은 적당한 방법을 사용하여 한계값이 단계(712)에서 감소된다. 한계값 감소는 더 많은 루틴이 컴파일 될 수 있게 하여서 인터프리트되는 루틴의 수를 감소시킨다. 혹은, 인터프리트 오버헤드가 최대의 필요한 인터프리트 오버헤드보다 작다고 결정되면 단계(718)에서 인터프리트 오버헤드가 최소의 필요한 인터프리터 오버헤드 아래에 있는지 여부가 결정된다. 인터프리트 오버헤드가 최소의 필요한 인터프리트 오버헤드보다 작다면 단계(716)에서 한계값이 증가된다. 인터프리트 오버헤드가 최소의 필요한 인터프리트 오버헤드와 최대의 필요한 인터프리트 오버헤드에 의해 한정된 허용가능한 인터프리트 오버헤드 범위내에 있다면 한계값 모니터 실행과정이 단계(702)에서 계속되고 새로운 타이머 신호가 운영시스템으로 부터 수신된다.
도 8 에서 한계값 감소와 관련된 단계, 즉 도 7 의 단계(712)가 기술된다. 한계값 감소 과정은 단계(804)에서 개시되어 한계값이 한계값 하한에 있는지 여부가 결정된다. 한계값 하한은 최저값이다. 예컨대, 한계값 하한이 다양할지라도 100 내지 1000개 정도의 한계값 하한이 적당하다. 한 구체예에서 한계값 하한은 500 계수 또는 호출일 수 있다.
단계(804)에서 한계값이 한계값 하한에 있다고 결정되면 한계값은 낮춰질 수 없고 한계값 감소단계는 완결된 것으로 간주된다. 그러나 단계(804)에서 한계값이 한계값 하한에 있지 않다고 결정되면 단계(808)에서 한계값이 현재 시간동안 하향으로 조절되었는지 여부가 결정된다.
한계값이 최근에 하향 조절되었다고 결정되면 한계값은 더 이상 감소될 수 없다. 주어진 기간에 한계값이 한 번이상 하향될 수 없게 함으로써 한계값의 과다 조절이 방지될 수 있다. 한계값이 더 이상 감소되지 않는다고 결정되면 한계값 감소과정은 완결된 것으로 간주된다.
한계값이 최근에 하향 조절되지 않았다고 결정되면 단계(808)에서 단계(812)로 진행하여 한계값이 한계값 인자에 의해 분할된다. 한계값 인자는 전체 프로그램의 필요조건에 따라 변화될 수 있다. 한 구체예에서, 한계값을 분할하는 한계값 인자는 한계값이 증가될 때 승산기로서 사용되는 것과 동일한 한계값 인자이다. 한계값이 한계값 인자로 나뉘어지면 간격 변화 플래그가 단계(816)에서 설정된다. 최근에 한계값이 하향 조절되었음을 표시하도록 간격 변화 플래그가 설정된다. 간격 변화 플래그가 설정된 후 한계값 감소과정은 완결된다.
실행시간동안 프로그램과 관련된 컴파일 오버헤드를 모니터링 할뿐만 아니라 프로그램과 관련된 인터프리트 오버헤드 역시 모니터링 된다. 인터프리트 오버헤드 모니터링은 루틴 인터프리트에 소모된 프로그램 오버헤드의 양을 모니터하는 것이다. 도 7 에서 인터프리트 오버헤드는 적어도 부분적으로 한계값이 상승되어야 하는지 하강되어야 하는지 여부를 결정하도록 모니터링 된다. 예컨대 인터프리트 오버헤드가 너무 높다면 더 많은 루틴이 컴파일되어야 하며 더 많은 루틴이 컴파일 될 수 있도록 한계값이 감소될 수 있다.
일반적으로, 인터프리트 오버헤드 계산에 임의의 적당한 과정이 사용될 수 있다. 인터프리트 오버헤드 계산에 적당한 과정이 도 9 를 참조로 기술될 것이다. 이 과정은 단계(904)에서 시작하여 타이머 신호가 운영 시스템으로부터 수신된다. 타이머 신호가 수신되면 응용 프로세스의 현재의 프로그램 계수기가 단계(908)에서 수득된다. 한 구체예에서 프로그램 계수기는 전체 프로그램의 실행이 인터프리트 코드에 관계하는지 컴파일 코드에 관련하는지를 식별하는 기준이다.
현재의 프로그램 계수기가 수득되면 단계(912)에서 프로그램 계수기가 인터프리트를 기준으로 하는지 여부를 결정한다. 즉, 인터프리트 코드가 현재 실행되는지 여부가 결정된다. 프로그램 카운터가 인터프리트를 기준으로 하지 않다고 결정되면 프로그램 카운터는 컴파일러를 기준으로 하며 인터프리트 오버헤드의 계산이 완결된다. 단계(912)에서 프로그램 카운터가 인터프리트를 기준으로 한다고 결정되면 인터프리트 오버헤드 카운터가 단계(916)에서 증가된다. 마지막으로 단계(918)에서 인터프리트 오버헤드의 슬라이딩 평균이 인터프리트 오버헤드 카운터를 사용하여 계산되고 인터프리트 오버헤드 계산과정이 종결된다.
도 10 은 본 발명을 실시하기에 적합한 범용 컴퓨터 시스템을 보여준다. 컴퓨터 시스템(1030)은 제 1 저장장치(1034)(ROM)와 제 1 저장장치(1036)(RAM)를 포함하는 메모리 장치에 연결되는 프로세서(1032)(CPU)를 포함한다.
컴퓨터 시스템(1030) 또는 CPU(1032)는 가상기계를 지원하도록 배열될 수 있다. 컴퓨터 시스템(1030)의 지원을 받는 가상기계의 일례가 도 11을 참조로 기술될 것이다. ROM은 CPU(1032)에 단일 방향으로 지령과 데이타를 전달한다. 반면에 RAM은 양방향으로 데이타와 지령을 전달하는데 사용된다. CPU(1032)는 여러개의 프로세서를 포함한다. 제 1 저장장치(1034, 1036)는 컴퓨터-판독가능한 매체를 포함한다. 제 2 저장매체(1038)는 대체로 대량 메모리 장치이며 CPU(1032)에 양방향 연결되며 추가 데이타 저장용량을 제공한다. 대량 메모리 장치(1038)는 컴퓨터 코드, 데이타등을 포함하는 프로그램을 저장하는데 사용되는 컴퓨터-판독가능한 매체이다. 대체로 대량 메모리 장치(1038)는 제 1 저장장치(1034, 1036)보다 느린 하드디스크 또는 테이프와 같은 저장매체이다. 대량 메모리장치(1038)는 자기 또는 종이 테이프 판독기 형태를 가진다. 대량 메모리 장치(1038)에 유지된 정보는 적절한 경우에 RAM(1036)의 일부로서 표준 방식으로 가상 메모리에 포함된다. CD-ROM과 같은 제 1 저장장치(1034)는 CPU(1032)에 데이타를 단일방향 통과시킬 수 있다.
CPU(1032)는 비디오 모니터, 트랙볼 마우스, 키보드, 마이크로폰, 접촉성 디스플레이, 트랜스듀서 카드 판독기, 자기 또는 종이 테이프 판독기, 태블릿, 스타일러스, 음성 또는 필기 인식기 또는 기타 입력장치와 같은 것을 포함하는 하나 이상의 입/출력 장치(1040)에 연결된다. CPU(1032)는 네트워크 연결(1012)을 사용하여 컴퓨터 또는 원격통신 네트워크, 예컨대 근거리 통신망, 인터넷 네트워크 또는 인트라넷 네트워크에 연결된다. 이러한 네트워크 연결을 사용하여 CPU(1032)는 네트워크로 부터 정보를 수신하거나 위에서 언급된 방법의 단계를 수행하는 과정에서 네트워크에 정보를 출력할 수 있다. CPU(1032)를 사용하여 실행되는 지령 순서로 표시되는 이러한 정보는 반송파에 포함된 컴퓨터 데이타 신호 형태로 입출력된다.
가상기계는 컴퓨터 시스템(1030)상에서 실행할 수 있다. 도 8 은 도 10 의 컴퓨터 시스템(1030)의 지원을 받는 가상기계를 보여준다. Sun Microsystems (Palo Alto, California)에 의해 개발된 Java 프로그램 언어로 작성된 컴퓨터 프로그램이 실행될 때 원시코드(1110)가 컴파일 시간 환경(1105)내에서 컴파일러(1120)에 제공된다. 컴파일러(1120)는 원시코드(1110)를 바이트 코드(1130)로 변환한다. 일반적으로, 원시코드(1110)는 소프트웨어 개발자에 의해 생성된 타임 원시코드(1110)에서 바이트 코드(1130)로 변환된다.
바이트 코드(1130)는 도 7 의 네트워크(1012)를 통해 분배, 다운로드 또는 재생되거나 도 7 의 주 저장장치(1034)에 저장된다. 바이트 코드(1130)는 플랫포옴에 무관하다. 즉, 바이트 코드(1130)는 적당한 가상기계(1140)를 통해 실행되는 모든 컴퓨터 시스템에서 실행될 수 있다. 예컨대 Java 환경에서 바이트 코드(1130)는 Java 가상기계를 실행하는 컴퓨터 시스템에서 실행될 수 있다.
바이트 코드(1130)는 가상기계(1140)를 포함한 실행시간 환경(1135)에 제공된다. 실행시간 환경(1135)은 도 7 의 CPU(1032)와 같은 프로세서를 사용하여 실행될 수 있다. 가상기계(1140)는 컴파일러(1142), 인터프리터(1144), 및 실행시간 시스템(1146)을 포함한다. 바이트 코드(1130)는 컴파일러(1142) 또는 인터프리터(1144)에 제공된다.
바이트 코드(1130)가 컴파일러(1142)에 제공될 때 바이트 코드(1132)에 포함된 루틴이 기계 지령으로 컴파일 된다. 반면에 바이트 코드(1130)가 인터프리터(1144)에 제공될 때 바이트 코드(1130)는 한 번에 1 바이트 코드씩 인터프리터(1144)에서 판독된다. 인터프리터(1144)는 이후에 각 바이트 코드가 인터프리터(1144)에서 판독될 때 각 바이트 코드에 의해 한정되는 작동을 수행한다. 일반적으로, 인터프리터(1144)는 바이트 코드(1130)를 처리하여 바이트 코드(1130)와 관련된 작동을 연속으로 수행한다.
재컴파일러의 실행이 주어진 루틴의 컴파일 여부 결정 측면에서 기술되었을 지라도 주어진 루틴이 컴파일 되는지 결정후에 주어진 루틴의 컴파일화가 지연될 수 있다. 다중 루틴이 동시에 컴파일링 되는 경우에 주어진 루틴의 컴파일링은 더 적은 수의 루틴이 컴파일링 될 때까지, 예컨대 컴파일 오버헤드가 최소의 필요한 컴파일 오버헤드 이하가 될 때까지 지연될 수 있다. 주어진 루틴의 컴파일링 지연은 컴파일 오버헤드가 최대의 필요한 컴파일 오버헤드를 초과하는 것을 방지한다. 또한, 컴파일링 지연은 프로그램 실행동안 장시간의 컴파일 중단을 방지한다. 한 구체예에서, 프로그램내 루틴의 컴파일링은 프로그램의 전체 실행에서 중단이 있을때까지 지연될 수 있다. 이러한 경우에 중단 또는 낮은 활성 기간동안이나 프로그램의 전체 실행동안 접근되는 대기행렬에 루틴이 위치될 수 있다.
추가로, 본 발명이 초기에 인터프리팅된 모든 루틴 측면으로 기술될지라도 바이트 코드 형태의 컴퓨터 프로그램이 먼저 실행시간 환경에 제공될 때 적어도 프로그램과 관련된 일부 루틴은 즉시 컴파일링 될 수 있다. 예컨대, 실행 개시부터 필요한 컴파일 오버헤드가 프로그램에 의해 충족되도록 일부 루틴은 초기에 컴파일링되고 일부는 주어진 인터프리팅된 루틴의 호출 횟수가 한계값을 초과할 때까지 초기에 인터프리팅 되고, 이 순간에 주어진 인터프리팅된 루틴이 컴파일링 된다.
도 3 에서 언급된 인터프리팅된 루틴내에 위치한 카운터가 루틴내의 임의의 장소에 위치될 수 있지만 이러한 루틴이 실행되는 동안 카운터에 접근하는 것은 비용이 든다. 카운터가 인터프리팅된 루틴내에 위치될 때 카운터가 더 쉽게 접근될 수 있도록 루틴의 시작부에 카운터가 위치될 수 있다. 어떤 구체예에서, 루틴에 위치된 카운터 접근과 관련된 비용 때문에 단일한 전역 카운터가 모든 루틴에 사용될 수 있다. 전역 카운터가 한계값에 도달할 때 현재 실행중인 루틴은 마치 현재의 루틴이 호출 카운터 한계값에 도달한 것처럼 재컴파일화를 위해 고려될 수 있다.
일반적으로 카운터는 카운터를 포함한 루틴의 호출동안 임의의 순간에 증가될 수 있다. 예컨대, 루틴내의 루우프의 후방 브랜치가 실행중일 때 카운터가 증가될 수 있다. 루우프 후방 브랜치나 루우프내 임의의 곳에서 카운터를 증가시키면 루틴내 기다란 실행 루우프의 탐지를 촉진시킨다. 기다란 실행 루우프는 루틴의 단일호출동안 반복실행된다. 루우프내에, 예컨대 루우프의 후방 브랜치에 카운터를 위치시킴으로써 루우프의 각 반복이 루틴의 호출로서 계수될 수 있으므로 상당한 실행시간을 활용하는 루틴이 더 쉽게 컴파일링되게 한다. 루우프내 카운터는 루틴 실행중 루틴 카운터 접근이 비용이 들 수 있으므로 루틴내 카운터보다 쉽게 접근되는 "전역" 루우프 카운터를 증가시킨다.
"루우프 카운터 한계값"을 사용하는 구체예에서 루우프 카운터 한계값은 위에서 기술된 호출 한계값과 다를 수 있다. 루우프 카운터 한계값은 상이한 한계값 인자만큼 감소 및 증가될 수 있다. 그러나, 일반적으로 호출 한계값과 함께 루우프 카운터 한계값이 조절될 수 있다.
카운터는 루틴내에 존재하는 것으로 기술되었다. 그러나, 루틴내에 카운터를 위치시키지 않고 카운터가 루틴이 호출될때마다 접근될 수 있는 데이타베이스 또는 테이블에 유지될 수 있다. 데이타베이스나 데이타베이스내 카운터는 특정 카운터에 대응하는 루틴이 호출될때마다 갱신될 수 있다.
일반적으로, 본 발명에 따른 한계값은 변화될 수 있다. 예컨대, 어떤 실행에서는 1000개의 한계값이 적절할지라도 모든 루틴이 1000번 이상 실행되는 경우에 더 높은 한계값이 적절하다. 유사하게 최대 및 최소의 필요한 인터프린팅 오버헤드에 추가적으로 최대 및 최소의 필요한 컴파일 오버헤드가 시스템에 따라서 변화될 수 있다.
다양한 인자를 기초로 하여 한계값이 선택될 수 있다. 이러한 인자로는 프로그램 실행 퍼센트가 있다. 다시 말하자면, 전체 프로그램 실행중 주어진 퍼센트로 루틴이 컴파일링 되도록 한계값이 선택될 수 있다. 예컨대, 전체 프로그램 실행의 95%에 해당하는 루틴이 컴파일링 되도록 한계값이 조절될 수 있다.
바이트 코드화 프로그램의 최적화가 단일 컴파일 레벨 또는 2 컴파일 레벨을 사용하여 기술되었지만 바이트 코드화 프로그램의 실행과 관련된 컴파일 레벨의 수는 다양할 수 있다. 일반적으로, 바이트 코드화 프로그램의 실행과 관련된 컴파일 레벨의 수는 프로그램의 필요한 최적화 정도에 따라 달려있다. 한계값은 모든 컴파일 레벨에 대해 동일할 수 있지만 각 컴파일 레벨은 별도의 한계값을 가질 수 있다. 다중 컴파일 레벨을 포함한 시스템의 경우에 루틴이 호출될때마다 증가되는 카운터가 각 컴파일링된 루틴에 위치될 수 있다. 인터프린팅된 루틴에 위치되는 카운터와 같이 컴파일링된 루틴 재컴파일화에 적절한 시기 결정에 카운터가 사용될 수 있다.
루틴이 컴파일링 될 수 있는지 여부의 결정이 루틴과 관련된 카운터의 한계값에 기초하여 기술되었을지라도 루틴 컴파일링 여부의 결정이 다양한 인자에 기초할 수 있다. 예컨대 전체 운영 시스템에서 시간 "덕"이 컴파일링으로부터 이득을 얻을 수 있는 시간 소모 루틴 발견에 사용될 수 있다. 즉 많은 시간 덕 과정에서 실행되는 루틴이 컴파일링 되어서 루틴 실행과 관련된 시간을 감소할 수 있다.
실행 또는 호출 카운터는 루틴이 접근될때마다 증가되는 카운터이다. 호출카운터는 시간이 지나면 쇠퇴할 수 있다. 예컨대, 루틴이 프로그램 실행의 개시에서 반복 호출되지만 비교적 장기간 다시 호출되지 않는다면 호출카운터는 쇠퇴하여서 나중에 호출될 경우 루틴이 컴파일링될 가능성을 감소시킨다. 루틴의 호출 카운터가 쇠퇴한다면 이 루틴의 컴파일링은 더 이상 추천되지 않는다.

Claims (19)

  1. 복수의 루틴으로부터 선택된 하나의 루틴을 호출하고, 선택된 루틴호출은 선택된 루틴 인터프리트를 포함하며;
    선택된 루틴의 호출을 추적하도록 배열된 호출 추적자를 갱신하고;
    선택된 루틴의 호출이 한계값을 초과한다고 호출 추적자가 표시하는 시기를 결정하고;
    호출 추적자가 선택된 루틴의 호출이 한계값을 초과함을 표시한다고 결정할 때 선택된 루틴을 컴파일링하는 단계를 포함하는 실행시간동안 바이트 코드를 포함하는 컴퓨터 프로그램 처리 방법.
  2. 제 1 항에 있어서, 선택된 루틴 컴파일링과 관련된 컴파일 오버헤드를 측정하는 단계를 더욱 포함하는 것을 특징으로 하는 방법.
  3. 제 2 항에 있어서, 컴파일 오버헤드가 허용가능한 범위내에 있을 시기를 결정하고 컴파일 오버헤드가 허용가능한 범위내에 있지 않다고 결정될 때 한계값을 조절하는 단계를 포함하는 것을 특징으로 하는 방법.
  4. 제 2 항 또는 3 항에 있어서, 컴파일 오버헤드 측정단계가 컴파일 오버헤드에 대한 슬라이딩 평균을 계산하는 과정을 포함하는 것을 특징으로 하는 방법.
  5. 제 2 항 내지 4 항중 한 항에 있어서, 선택된 루틴 인터프리트와 관련된 번역 오버헤드를 측정하는 과정을 포함하는 것을 특징으로 하는 방법.
  6. 제 5 항에 있어서, 번역 오버헤드가 허용가능한 범위내에 있을 시기를 결정하고 번역 오버헤드가 허용가능한 범위내에 있지 않다고 결정될 때 한계값을 조절하는 단계를 더욱 포함함을 특징으로 하는 방법.
  7. 앞선 청구항중 한 항에 있어서, 한계값 조절단계가 한계값 증가 또는 한계값 감소 단계임을 특징으로 하는 방법.
  8. 앞선 청구항중 한 항에 있어서, 호출 추적자 갱신단계가 선택된 루틴내에 위치된 계수를 증가시키는 것을 포함함을 특징으로 하는 방법.
  9. 앞선 청구항중 한 항에 있어서, 컴파일링된 선택된 루틴을 호출하고;
    컴파일링된 루틴의 호출 횟수를 추적하도록 배열된 추적장치를 갱신하고;
    추적장치가 컴파일링된 루틴의 호출횟수가 한계값을 초과함을 표시할 시기를 결정하고;
    컴파일링된 루틴의 호출횟수가 한계값을 초과함을 추적장치가 표시할 때 컴파일링된 루틴을 재컴파일링하는 단계를 더욱 포함함을 특징으로 하는 방법.
  10. 컴퓨터 프로그램 실행동안 복수의 루틴으로부터 하나의 루틴을 선택하고, 이 루틴의 제 1 최적화 상태에 있으며;
    컴퓨터 프로그램의 실행동안 제 1 최적상태로부터 제 2 최적상태로 루틴을 변환하고, 제 2 최적화 상태는 제 1 최적화 상태보다 더욱 최적화되며;
    루틴 변환 비용과 루틴 변환의 잇점의 균형을 잡는 것을 포함하는 제 1 최적화 상태로부터 제 2 최적화 상태로 제 1 루틴을 변환하는 단계를 포함하는 다양한 최적화 상태에 있는 루틴을 포함하는 복수의 루틴을 포함하는 컴퓨터 프로그램 실행 방법.
  11. 제 10 항에 있어서, 제 1 최적화 상태에 루틴을 실행하는 것은 제 2 최적화 상태에서 제 1 루틴을 실행하는 것보다 느림을 특징으로 하는 방법.
  12. 제 10 항 또는 11 항에 있어서, 제 1 최적화 상태가 인터프리팅된 상태와 컴파일링된 상태로 구성된 그룹에서 선택된 상태임을 특징으로 하는 방법.
  13. 제 10 항 내지 12 항중 한 항에 있어서, 복수의 루틴으로부터 루틴을 선택하는 것이 컴퓨터 프로그램의 실행동안 제 1 루틴의 호출횟수 측정을 포함함을 특징으로 하는 방법.
  14. 복수의 루틴으로부터 선택된 제 1 루틴을 호출하고;
    제 1 선택된 루틴이 컴파일러에 의해 처리될 수 있는 시기를 결정하고, 제 1 선택된 루틴이 컴파일러에 의해 처리될 수 있는 시기의 결정이 제 1 선택된 루틴의 호출과 관련된 한계값에 기초하며;
    제 1 루틴이 컴파일러에 의해 처리될 수 있다고 결정될 때 컴파일러로 제 1 선택된 루틴을 처리하고;
    제 1 루틴이 컴파일러에 의해 처리될 수 있다고 결정될 때 컴퓨터 프로그램과 관련된 오버헤드의 크기를 조절하고;
    오버헤드 크기가 오버헤드가 허용가능함을 표시하는지 여부를 결정하고;
    오버헤드가 허용가능하지 않다고 결정될 때 한계값을 조절하는 단계를 포함하는 복수의 루틴을 포함하는 컴퓨터 프로그램 실행방법.
  15. 복수의 루틴으로부터 선택된 제 1 루틴을 인터프리팅 하도록 배열된 인터프리터;
    제 1 선택된 루틴의 인터프리팅을 계수하도록 배열된 제 1 추적장치, 제 1 추적장치는 제 1 선택된 루틴이 컴파일화에 적합한 시기를 결정하도록 배열되고;
    제 1 선택된 루틴이 컴파일화에 적합하다고 결정될 때 제 1 선택된 루틴을 컴파일하도록 배열된 컴파일러를 포함하는 복수의 루틴으로 배열된 바이트 코드를 실행하는 컴퓨터 시스템.
  16. 제 15 항에 있어서, 제 1 선택된 루틴이 컴파일링에 적합한 시기를 결정하기 위해서 제 1 추적장치와 함께 작동하도록 배열된 한계값 장치를 더욱 포함하며 한계값 장치는 제1 선택된 루틴이 컴파일링에 적합한 시기를 표시하는 한계값을 설정하도록 배열됨을 특징으로 하는 방법.
  17. 제 15 항 또는 16 항에 있어서, 제 1 선택된 루틴이 컴파일링 될 때 제 1 선택된 루틴의 호출을 계수하며 제 1 선택된 루틴이 재컴파일링에 적합한 시기를 결정하도록 배열되는 제 2 추적장치;
    제 1 선택된 루틴이 재컴파일링에 적합한 것으로 결정될 때 제 1 선택된 루틴을 재컴파일링 하도록 배열된 재컴파일러를 더욱 포함함을 특징으로 하는 시스템.
  18. 제 1 선택된 루틴을 인터프리팅 하는 것을 포함하는 복수의 루틴으로부터 선택된 제 1 루틴을 호출하는 컴퓨터 코드;
    제 1 선택된 루틴의 호출을 추적하도록 배열된 호출 추적자를 갱신하는 컴퓨터 코드;
    제 1 선택된 루틴의 호출이 한계값을 초과함을 호출 추적자가 표시할 시기를 결정하는 컴퓨터 코드;
    제 1 선택된 루틴의 호출이 한계값을 초과함을 호출 추적자가 표시한다고 결정할 때 제 1 선택된 루틴을 컴파일링하는 컴퓨터 코드를 포함하는 복수의 루틴으로서 배열된 바이트 코드를 포함한 컴퓨터 프로그램을 처리하는 컴퓨터 프로그램.
  19. 제 18 항에 있어서, 컴퓨터 프로그램이 반송파에 포함된 데이타 신호임을 특징으로 하는 컴퓨터 프로그램.
KR1019980041790A 1997-10-06 1998-10-07 바이트 코드 프로그램 동적 최적화 방법 및 장치 KR19990036881A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US8/944,334 1997-10-06
US08/944,334 US5995754A (en) 1997-10-06 1997-10-06 Method and apparatus for dynamically optimizing byte-coded programs

Publications (1)

Publication Number Publication Date
KR19990036881A true KR19990036881A (ko) 1999-05-25

Family

ID=25481212

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980041790A KR19990036881A (ko) 1997-10-06 1998-10-07 바이트 코드 프로그램 동적 최적화 방법 및 장치

Country Status (5)

Country Link
US (3) US5995754A (ko)
EP (1) EP0908819A3 (ko)
JP (1) JPH11272476A (ko)
KR (1) KR19990036881A (ko)
CN (1) CN1234551A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100964581B1 (ko) * 2008-08-20 2010-06-21 주식회사 컴퍼니원헌드레드 두 단계 레지스터 기반 바이트코드를 이용한 스크립트 언어 실행 시스템

Families Citing this family (109)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6513156B2 (en) * 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US6865734B2 (en) * 1997-10-06 2005-03-08 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US5970249A (en) * 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs
US6349406B1 (en) * 1997-12-12 2002-02-19 International Business Machines Coporation Method and system for compensating for instrumentation overhead in trace data by computing average minimum event times
US6075942A (en) * 1998-05-04 2000-06-13 Sun Microsystems, Inc. Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers
US6289506B1 (en) * 1998-06-30 2001-09-11 Intel Corporation Method for optimizing Java performance using precompiled code
US6760907B2 (en) * 1998-06-30 2004-07-06 Sun Microsystems, Inc. Code generation for a bytecode compiler
JP2000020319A (ja) * 1998-06-30 2000-01-21 Canon Inc プログラム実行装置、その制御方法および記憶媒体
US6324688B1 (en) * 1998-07-30 2001-11-27 International Business Machines Corporation Method and apparatus for optimizing execution of Java programs
US6205578B1 (en) * 1998-08-14 2001-03-20 Ati International Srl Interpreter for stack-based languages
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
US8121828B2 (en) * 1999-01-28 2012-02-21 Ati Technologies Ulc Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions
US8127121B2 (en) 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
JP3470948B2 (ja) * 1999-01-28 2003-11-25 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
US8074055B1 (en) 1999-01-28 2011-12-06 Ati Technologies Ulc Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code
US6446257B1 (en) * 1999-02-04 2002-09-03 Hewlett-Packard Company Method and apparatus for pre-allocation of system resources to facilitate garbage collection
US6507946B2 (en) * 1999-06-11 2003-01-14 International Business Machines Corporation Process and system for Java virtual method invocation
US6880152B1 (en) * 1999-10-13 2005-04-12 Transmeta Corporation Method of determining a mode of code generation
US6718543B2 (en) * 1999-11-08 2004-04-06 Hewlett-Packard Development Company, L.P. Method and apparatus for optimization of the performance of an application program in a computer system while preserving the system behavior
JP3356742B2 (ja) * 1999-11-17 2002-12-16 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム実行方法
US6817011B1 (en) * 1999-12-14 2004-11-09 International Business Machines Corporation Memory allocation profiling to discover high frequency allocators
DE19963832A1 (de) * 1999-12-30 2001-07-05 Ericsson Telefon Ab L M Programmprofilierung
SE0002440D0 (sv) 2000-06-28 2000-06-28 Virtutech Ab Interpreter
JP2002073345A (ja) * 2000-08-25 2002-03-12 Fujitsu Ltd 情報処理装置及び記録媒体
US6658656B1 (en) * 2000-10-31 2003-12-02 Hewlett-Packard Development Company, L.P. Method and apparatus for creating alternative versions of code segments and dynamically substituting execution of the alternative code versions
US6857120B1 (en) 2000-11-01 2005-02-15 International Business Machines Corporation Method for characterizing program execution by periodic call stack inspection
US6971091B1 (en) 2000-11-01 2005-11-29 International Business Machines Corporation System and method for adaptively optimizing program execution by sampling at selected program points
US7103877B1 (en) 2000-11-01 2006-09-05 International Business Machines Corporation System and method for characterizing program behavior by sampling at selected program points
US7076773B2 (en) * 2001-03-20 2006-07-11 International Business Machines Corporation Object oriented apparatus and method for allocating objects on an invocation stack in a dynamic compilation environment
US7058943B2 (en) * 2001-05-24 2006-06-06 International Business Machines Corporation Object oriented apparatus and method for allocating objects on an invocation stack in a partial compilation environment
US6948160B2 (en) * 2001-05-31 2005-09-20 Sun Microsystems, Inc. System and method for loop unrolling in a dynamic compiler
GB0125176D0 (en) * 2001-10-19 2001-12-12 Koninkl Philips Electronics Nv A method of compiling bytecode to native code
JP3808755B2 (ja) * 2001-11-07 2006-08-16 富士通株式会社 Jitコンパイラを備えた仮想計算機
US6996814B2 (en) * 2001-11-14 2006-02-07 Sun Microsystems, Inc. Method and apparatus for dynamically compiling byte codes into native code
EP1313012A1 (en) * 2001-11-15 2003-05-21 Texas Instruments France Java DSP acceleration by byte-code optimization
US7020160B1 (en) 2001-12-17 2006-03-28 Supergate Technology Usa, Inc. Interface circuits for modularized data optimization engines and methods therefor
US8639849B2 (en) * 2001-12-17 2014-01-28 Sutech Data Solutions Co., Llc Integrated circuits for high speed adaptive compression and methods therefor
US7363251B2 (en) * 2002-04-08 2008-04-22 Stolski Sean M Dedicated portable computer sales presentation system
US6973644B2 (en) * 2002-04-12 2005-12-06 The Mathworks, Inc. Program interpreter
EP1377034A1 (en) * 2002-06-27 2004-01-02 Thomson Licensing S.A. Data processing device and method for interactive television
US6964042B2 (en) * 2002-12-17 2005-11-08 Bea Systems, Inc. System and method for iterative code optimization using adaptive size metrics
US7543284B2 (en) 2003-04-22 2009-06-02 Transitive Limited Partial dead code elimination optimizations for program code conversion
US7536682B2 (en) * 2003-04-22 2009-05-19 International Business Machines Corporation Method and apparatus for performing interpreter optimizations during program code conversion
GB0309056D0 (en) * 2003-04-22 2003-05-28 Transitive Technologies Ltd Block translation optimizations for program code conversion
JP4713820B2 (ja) * 2003-05-28 2011-06-29 パナソニック株式会社 プログラム実行制御装置、プログラム実行制御方法
US7937691B2 (en) 2003-09-30 2011-05-03 International Business Machines Corporation Method and apparatus for counting execution of specific instructions and accesses to specific data locations
US20050071821A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically select instructions for selective counting
US7373637B2 (en) * 2003-09-30 2008-05-13 International Business Machines Corporation Method and apparatus for counting instruction and memory location ranges
US7395527B2 (en) 2003-09-30 2008-07-01 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses
US8381037B2 (en) * 2003-10-09 2013-02-19 International Business Machines Corporation Method and system for autonomic execution path selection in an application
US7421681B2 (en) * 2003-10-09 2008-09-02 International Business Machines Corporation Method and system for autonomic monitoring of semaphore operation in an application
US7257657B2 (en) * 2003-11-06 2007-08-14 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses for specific types of instructions
US7293164B2 (en) * 2004-01-14 2007-11-06 International Business Machines Corporation Autonomic method and apparatus for counting branch instructions to generate branch statistics meant to improve branch predictions
US7526757B2 (en) * 2004-01-14 2009-04-28 International Business Machines Corporation Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US7415705B2 (en) * 2004-01-14 2008-08-19 International Business Machines Corporation Autonomic method and apparatus for hardware assist for patching code
US7496908B2 (en) 2004-01-14 2009-02-24 International Business Machines Corporation Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information
US7290255B2 (en) * 2004-01-14 2007-10-30 International Business Machines Corporation Autonomic method and apparatus for local program code reorganization using branch count per instruction hardware
US7895382B2 (en) * 2004-01-14 2011-02-22 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US7392370B2 (en) * 2004-01-14 2008-06-24 International Business Machines Corporation Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics
US7412693B2 (en) * 2004-03-05 2008-08-12 Sun Microsystems, Inc. Method and apparatus for determining frequency of execution for compiled methods within a virtual machine
US7299319B2 (en) * 2004-03-22 2007-11-20 International Business Machines Corporation Method and apparatus for providing hardware assistance for code coverage
US7296130B2 (en) * 2004-03-22 2007-11-13 International Business Machines Corporation Method and apparatus for providing hardware assistance for data access coverage on dynamically allocated data
US7526616B2 (en) * 2004-03-22 2009-04-28 International Business Machines Corporation Method and apparatus for prefetching data from a data structure
US7421684B2 (en) 2004-03-22 2008-09-02 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for data coverage
US7480899B2 (en) * 2004-03-22 2009-01-20 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for code coverage
US8135915B2 (en) * 2004-03-22 2012-03-13 International Business Machines Corporation Method and apparatus for hardware assistance for prefetching a pointer to a data structure identified by a prefetch indicator
US7568190B2 (en) * 2005-03-08 2009-07-28 International Business Machines Corporation Late binding of optimization information for just in time compilation
GB2424092A (en) * 2005-03-11 2006-09-13 Transitive Ltd Switching between code translation and execution using a trampoline
CN100442901C (zh) * 2005-10-25 2008-12-10 华为技术有限公司 在设备管理中监控和升级软件的方法及装置
US9830174B2 (en) * 2005-12-22 2017-11-28 Synopsys, Inc. Dynamic host code generation from architecture description for fast simulation
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
US8024720B2 (en) * 2006-04-17 2011-09-20 International Business Machines Corporation Speculative inlining of overridden methods without using profiling information
US8214813B2 (en) * 2007-01-12 2012-07-03 Microsoft Corporation Code optimization across interfaces
KR101407629B1 (ko) * 2007-06-04 2014-06-13 더 보드 오브 리젠츠 오브 더 유니버시티 오브 텍사스 시스템 자바 변환 가속 장치 및 방법
US8682982B2 (en) * 2007-06-19 2014-03-25 The Invention Science Fund I, Llc Preliminary destination-dependent evaluation of message content
US9374242B2 (en) * 2007-11-08 2016-06-21 Invention Science Fund I, Llc Using evaluations of tentative message content
US20080320088A1 (en) * 2007-06-19 2008-12-25 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Helping valuable message content pass apparent message filtering
US8984133B2 (en) * 2007-06-19 2015-03-17 The Invention Science Fund I, Llc Providing treatment-indicative feedback dependent on putative content treatment
US8082225B2 (en) * 2007-08-31 2011-12-20 The Invention Science Fund I, Llc Using destination-dependent criteria to guide data transmission decisions
US8065404B2 (en) * 2007-08-31 2011-11-22 The Invention Science Fund I, Llc Layering destination-dependent content handling guidance
US7930389B2 (en) * 2007-11-20 2011-04-19 The Invention Science Fund I, Llc Adaptive filtering of annotated messages or the like
US8141053B2 (en) 2008-01-04 2012-03-20 International Business Machines Corporation Call stack sampling using a virtual machine
KR100943887B1 (ko) 2008-02-05 2010-02-24 재단법인서울대학교산학협력재단 핫스팟 메소드의 동적 컴파일을 위해 수행 시간을 추정하는방법
US8438558B1 (en) 2009-03-27 2013-05-07 Google Inc. System and method of updating programs and data
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
US9207921B2 (en) * 2009-06-22 2015-12-08 Oracle America, Inc. Fault tolerant compilation with automatic optimization adjustment
US8990779B2 (en) * 2009-08-11 2015-03-24 Sap Se Response time measurement system and method
US8887142B2 (en) * 2010-03-10 2014-11-11 Microsoft Corporation Loop control flow diversion
JP5466601B2 (ja) * 2010-08-31 2014-04-09 インターナショナル・ビジネス・マシーンズ・コーポレーション コード生成方法、システム及びプログラム
KR101171656B1 (ko) 2010-12-16 2012-08-07 한국과학기술연구원 트레이스 단위 적시 컴파일러에서의 효율적인 프로파일링 방법
US9141414B2 (en) * 2010-12-21 2015-09-22 Sap Se Preferred compilation
US8756581B2 (en) * 2011-02-03 2014-06-17 International Business Machines Corporation Adaptive next-executing-cycle trace selection for trace-driven code optimizers
JP5614348B2 (ja) * 2011-03-18 2014-10-29 富士通株式会社 命令処理方法、命令処理装置、及び命令処理プログラム
US9037548B1 (en) * 2011-06-30 2015-05-19 Emc Corporation Dynamically updated data management processing plans generated outside a storage array
US20130205282A1 (en) * 2012-02-07 2013-08-08 Microsoft Corporation Transferring program execution from compiled code to interpreted code
US9542191B2 (en) * 2012-03-30 2017-01-10 Intel Corporation Hardware profiling mechanism to enable page level automatic binary translation
CN104350465B (zh) * 2012-06-11 2018-02-16 英派尔科技开发有限公司 调整计算机程序的动态优化
US9098308B2 (en) * 2012-06-26 2015-08-04 Marvell World Trade Ltd. Method and apparatus for code performance analysis based on execution trace information
US20140047423A1 (en) * 2012-08-09 2014-02-13 Filip J. Pizlo Runtime State Based Code Re-Optimization
US9569185B2 (en) 2014-02-07 2017-02-14 Oracle International Corporation Changing de-optimization guard representation during the compilation process
CN104572134B (zh) * 2015-02-10 2018-03-06 中国农业银行股份有限公司 一种优化方法及装置
FR3038087B1 (fr) 2015-06-29 2018-08-10 Commissariat A L'energie Atomique Et Aux Energies Alternatives Procede d'execution d'un programme d'ordinateur comportant une fonction parametree
FR3038086B1 (fr) 2015-06-29 2018-08-10 Commissariat A L'energie Atomique Et Aux Energies Alternatives Procede d'execution d'un programme d'ordinateur comportant une fonction parametree
US9547483B1 (en) * 2015-11-06 2017-01-17 International Business Machines Corporation Feedback directed optimized compiling of optimized executable code

Family Cites Families (7)

* 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
US5586328A (en) * 1994-10-21 1996-12-17 Microsoft Corporation Module dependency based incremental compiler and method
US5590331A (en) * 1994-12-23 1996-12-31 Sun Microsystems, Inc. Method and apparatus for generating platform-standard object files containing machine-independent code
US5970249A (en) * 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs
US5933635A (en) * 1997-10-06 1999-08-03 Sun Microsystems, Inc. Method and apparatus for dynamically deoptimizing compiled activations

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100964581B1 (ko) * 2008-08-20 2010-06-21 주식회사 컴퍼니원헌드레드 두 단계 레지스터 기반 바이트코드를 이용한 스크립트 언어 실행 시스템

Also Published As

Publication number Publication date
EP0908819A3 (en) 2000-06-07
US5995754A (en) 1999-11-30
JPH11272476A (ja) 1999-10-08
CN1234551A (zh) 1999-11-10
EP0908819A2 (en) 1999-04-14
US20040205712A1 (en) 2004-10-14
US6237141B1 (en) 2001-05-22

Similar Documents

Publication Publication Date Title
KR19990036881A (ko) 바이트 코드 프로그램 동적 최적화 방법 및 장치
US11816014B2 (en) Optimized recompilation using hardware tracing
KR100589798B1 (ko) 중지동안 바이트 코드 최적화 장치 및 방법
US6072951A (en) Profile driven optimization of frequently executed paths with inlining of code fragment (one or more lines of code from a child procedure to a parent procedure)
Kistler et al. Continuous program optimization: A case study
US6332216B1 (en) Hybrid just-in-time compiler that consumes minimal resource
EP0997816B1 (en) Method and apparatus for selecting ways to compile at runtime
US7568190B2 (en) Late binding of optimization information for just in time compilation
US20140189660A1 (en) Control flow analysis methods and computing devices for converting cobol-sourced programs to object-oriented program structures
Suganuma et al. Design and evaluation of dynamic optimizations for a Java just-in-time compiler
US20140101643A1 (en) Trace generation method, trace generation device, trace generation program product, and multi-level compilation using trace generation method
US20070079298A1 (en) Thread-data affinity optimization using compiler
US6345384B1 (en) Optimized program code generator, a method for compiling a source text and a computer-readable medium for a processor capable of operating with a plurality of instruction sets
JPH07129412A (ja) コンパイル方法及び装置
JP2004062858A (ja) データ処理装置内のアプリケーション・コードのコンパイル
CA2274210A1 (en) Code generation for a bytecode compiler
US20030056083A1 (en) Expression reduction during compilation through routine cloning
US7086044B2 (en) Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization
JP3992102B2 (ja) コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体
York Benchmarking in context: Dhrystone
US20020010913A1 (en) Program profiling
US6895579B2 (en) Method and apparatus for maintaining exception reporting for register promotion
US11204767B2 (en) Context switching locations for compiler-assisted context switching
US6983459B1 (en) Incorporating register pressure into an inlining compiler
Arnold et al. Architecture and policy for adaptive optimization in virtual machines

Legal Events

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