KR20180088706A - 언어 가상 머신에서 고-사용 중간 코드를 식별하는 방법 및 디바이스 - Google Patents
언어 가상 머신에서 고-사용 중간 코드를 식별하는 방법 및 디바이스 Download PDFInfo
- Publication number
- KR20180088706A KR20180088706A KR1020187018366A KR20187018366A KR20180088706A KR 20180088706 A KR20180088706 A KR 20180088706A KR 1020187018366 A KR1020187018366 A KR 1020187018366A KR 20187018366 A KR20187018366 A KR 20187018366A KR 20180088706 A KR20180088706 A KR 20180088706A
- Authority
- KR
- South Korea
- Prior art keywords
- function
- instruction
- local
- identification
- hotness
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
본 발명의 실시예들은 핫스폿 중간 코드를 식별하는 방법 및 장치를 제공한다. 핫스폿 중간 코드를 식별하는 방법은, 언어 가상 머신이 식별 대상 함수를 실행할 때, 명령어 카운터에서의 명령어 어드레스를 획득하는 단계, 및 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정하는 단계; 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어일 때, 식별 대상 함수의 현재 핫니스 값을 미리 설정된 값만큼 증가시켜, 식별 대상 함수의 핫니스 값을 업데이트하는 단계; 및 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하는 단계, 및 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상일 때, 식별 대상 함수의 중간 코드를 핫스폿 중간 코드로서 사용하는 단계를 포함한다. 전술한 방법에 따르면, 핫스폿 중간 코드가 식별될 수 있다.
Description
본 출원은 2015년 12월 2일자 중국 특허청에 출원된 "METHOD AND APPARATUS FOR IDENTIFYING HOTSPOT INTERMEDIATE CODE IN LANGUAGE VIRTUAL MACHINE"이라는 명칭의 중국 특허 출원 제201510872247.7호에 대한 우선권을 주장하고, 이는 그 전부가 본 명세서에 참조로 원용된다.
<기술 분야>
본 발명은 컴파일 기술들에, 구체적으로, 핫스폿 중간 코드를 식별하는 방법 및 장치에 관한 것이다.
코드 실행 동안, 플랫폼들 사이의 차이를 막기 위해, 소스 코드가 먼저 중간 코드로 변환될 필요가 있고, 다음으로 이러한 중간 코드는 자신의 언어 가상 머신 상에서 실행된다. 언어 가상 머신은 중간 코드가 실행되는 가상 머신이다. 예를 들어, JAVA 중간 코드(바이트코드)가 실행되는 JAVA 가상 머신(JVM, Java Virtual Machine)은 인터프리터(Interpreter) 및 저스트-인-타임(JIT, Just In Time) 컴파일러를 일반적으로 포함한다. 중간 코드 실행 동안, 인터프리터는, 프로그램이 시작될 때, 중간 코드를 하나씩 해석하고 실행하도록 구성되고, 따라서, 실행 효율성이 상대적으로 낮다. 저스트-인-타임 컴파일러는, 중간 코드를, 호출하고 실행하는데 사용되는 로컬 코드로 컴파일하도록 구성되고, 이러한 로컬 코드의 실행 효율성은 상대적으로 높다. 일부 저스트-인-타임 컴파일러는 경량 컴파일러와 중량 컴파일러로 추가로 분류될 수 있다. 경량 컴파일러와 비교하여, 중량 컴파일러의 최적화 방법들은 보다 다양하고, 컴파일 효과가 더 좋다. 그러나, 컴파일 동안 오버헤드들이 더 높다.
그러나, 핫스폿 중간 코드(자주 실행되는 중간 코드)가 효과적으로 식별될 수 없을 때, 저스트-인-타임 컴파일러는 드물게 실행되는 로컬 코드를 컴파일에 의해 획득한다. 이러한 드물게 실행되는 로컬 코드는 많은 양의 저장 공간을 차지한다. 결과적으로, 자주 실행되는 중간 코드의 후속 컴파일 프로세스가 영향을 받고, 저장 공간이 낭비되고, 언어 가상 머신의 전체 운영 성능이 심각하게 영향을 받는다.
본 발명의 목적은 핫스폿 중간 코드를 식별하는 방법 및 장치를 제공하여, 핫스폿 중간 코드를 식별하는 것이다.
전술한 목적 및 또 다른 목적은 독립 청구항들에서의 특징들을 사용하여 달성된다. 추가의 구현 방식들은 종속 청구항들, 명세서, 및 첨부 도면들에 설명된다.
제1 양태에 따르면, 핫스폿 중간 코드를 식별하는 장치가 제공되고, 이러한 장치는,
언어 가상 머신이 식별 대상 함수를 실행할 때, 명령어 카운터에서의 명령어 어드레스를 획득하도록 구성되는 획득 회로;
명령어 카운터에 있고 획득 회로에 의해 획득되는 명령어 어드레스에 따라, 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정하도록 구성되는 제1 결정 회로;
명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어라고 제1 결정 회로가 결정할 때, 식별 대상 함수의 현재 핫니스 값을 미리 설정된 값만큼 증가시켜, 식별 대상 함수의 핫니스 값을 업데이트하도록 구성되는 업데이트 회로; 및
식별 대상 함수의 것이고 업데이트 회로에 의해 획득되는 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하도록, 그리고 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값보다 클 때, 식별 대상 함수의 중간 코드를 핫스폿 중간 코드로서 사용하도록 구성되는 제2 결정 회로를 포함한다.
식별 대상 함수의 핫니스 값을 업데이트하는 것은 현재 핫니스 값이 새로운 핫니스 값으로 대체된다는 점을 의미한다. 현재 핫니스 값은 업데이트된 이후 변경되고, 업데이트된 현재 핫니스 값 또는 업데이트된 핫니스 값은 업데이트 이전에 새로운 핫니스 값이 된다.
이러한 장치는 명령어 카운터에서의 명령어 어드레스를 획득하고, 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정하여, 인터프리터 또는 저스트-인-타임 컴파일러에 의해 코드 실행 동안 핫스폿 중간 코드를 식별한다.
제1 양태에 따르면, 이러한 장치의 제1 가능한 구현 방식에서, 제1 결정 회로는,
명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있는지 결정하도록- 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 식별 대상 함수의 로컬 명령어를 포함하고, 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 언어 가상 머신의 함수들을 구현하는데 사용되는 로컬 명령어를 포함하지 않음 - 구성된다. 이러한 구현 방식에서는, 현재 실행되는 명령어가 언어 가상 머신의 함수들을 구현하는데 사용되는 로컬 명령어인지 또는 언어 가상 머신에 의해 실행되는 함수의 로컬 명령어인지 효과적으로 구별될 수 있어서, 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 용이하게 그리고 효과적으로 결정한다. 이러한 함수는 메소드라고 또한 지칭될 수 있고, 언어 가상 머신의 함수들을 구현하는데 사용되는 로컬 명령어는 호스트 코드에서의 명령어라고 또한 지칭될 수 있고, 언어 가상 머신에 의해 실행되는 함수의 로컬 명령어는 게스트 코드에서의 명령어라고 또한 지칭된다.
제1 양태의 제1 구현 방식에 따르면, 이러한 장치의 제2 가능한 구현 방식에서, 언어 가상 머신은 인터프리터를 포함하고, 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 인터프리터에 의해 해석되는데 사용되는 중간 명령어들에 대응하는 로컬 명령어들을 포함하고, 인터프리터에 의해 해석되는데 사용되는 중간 명령어들에 대응하는 로컬 명령어들은 식별 대상 함수의 로컬 명령어를 포함한다.
이에 대응하여, 식별 대상 함수가 실행된다는 것은, 식별 대상 함수의 중간 코드가 실행되는 것을 포함할 수 있다.
언어 가상 머신에서의 인터프리터에 의한 중간 코드의 해석 동안, 모든 중간 명령어들에 대응하는 로컬 명령어들은 연속적인 저장 공간, 즉, 인터프리터에 의한 해석에 의해 획득될 수 있는 로컬 명령어의 저장 공간에 저장된다. 저장 공간은 메모리 공간일 수 있고, 로컬 코드는 어셈블리 코드일 수 있고, 중간 코드는 바이트코드일 수 있다. 현재 실행되는 로컬 명령어의 명령어 어드레스가 인터프리터에 의한 해석에 의해 획득될 수 있는 로컬 명령어의 저장 공간의 어드레스 범위 내에 있는지 결정되므로, 인터프리터의 해석 구문에서는, 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정될 수 있다.
제1 양태의 제1 구현 방식에 따르면, 이러한 장치의 제3 가능한 구현 방식에서, 언어 가상 머신은 저스트-인-타임 컴파일러를 포함하고, 식별 대상 함수의 로컬 명령어 공간은 식별 대상 함수의 로컬 코드를 저장하는데 사용되고, 식별 대상 함수의 로컬 명령어는 식별 대상 함수의 로컬 코드에서의 명령어이고, 식별 대상 함수의 로컬 코드는 저스트-인-타임 컴파일러에 의한 컴파일에 의해 획득된다.
이에 대응하여, 식별 대상 함수가 실행된다는 것은, 식별 대상 함수의 로컬 코드가 실행되는 것을 포함할 수 있다.
식별 대상 함수의 것이고 저스트-인-타임 컴파일러에 의한 컴파일에 의해 획득되는 로컬 코드는, 식별 대상 함수를 전체로서 사용하여, 식별 대상 함수의 로컬 코드를 저장하는데 사용되는 저장 공간에 저장된다. 이러한 저장 공간은 메모리일 수 있다. 예를 들어, 저장 공간은 코드 캐시(code cache)일 수 있다. 식별 대상 함수의 로컬 코드는 식별 대상 함수의 것이고 저스트-인-타임 컴파일러의 경량 컴파일러에 의해 획득되는 경량 로컬 코드일 수 있거나, 또는 식별 대상 함수의 것이고 저스트-인-타임 컴파일러의 중량 컴파일러에 의해 획득되는 중량 로컬 코드일 수 있다. 식별 대상 함수의 로컬 코드가 경량 로컬 코드일 때, 현재 실행되는 로컬 명령어의 명령어 어드레스가 식별 대상 함수의 로컬 코드를 저장하는데 사용되는 저장 공간의 어드레스 범위 내에 있는지 결정되므로, 경량 로컬 코드가 실행될 때, 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정된다. 식별 대상 함수의 로컬 코드가 중량 로컬 코드일 때, 현재 실행되는 로컬 명령어의 명령어 어드레스가 식별 대상 함수의 로컬 코드를 저장하는데 사용되는 저장 공간의 어드레스 범위 내에 있는지 결정되므로, 중량 로컬 코드가 실행될 때, 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정되고, 그렇게 함으로써 중량 로컬 코드의 실행 빈도에 관한 통계를 수집한다.
제1 양태, 또는 제1 양태의 전술한 구현 방식들 중 어느 하나에 따르면, 이러한 장치의 제4 가능한 구현 방식에서, 업데이트 회로는 핫니스 값 카운터를 포함하고, 핫니스 값 카운터는 핫니스 값 카운터에서의 식별 대상 함수의 핫니스 값을, 1만큼, 증가시키도록 구성된다. 핫니스 값 카운터는 카운터이고, 입력되는 레벨을 사용하여(예를 들어, 이러한 레벨의 변경 가능한 상승 에지를 사용하여), 카운팅을 수행하도록 트리거될 수 있다. 이러한 방식으로, 소프트웨어에 의한 카운팅의 구현 방식이 대체되고, 소프트웨어 기반 구현의 부담이 경감된다. 또한, 회로가 카운팅을 직접 수행하고, 이는 더 높은 실행 효율성에 이르게 된다.
제1 양태의 제4 구현 방식에 따르면, 이러한 장치의 제5 가능한 구현 방식에서, 제2 결정 회로는 감산기 및 식별 대상 함수의 핫니스 임계값을 저장하도록 구성되는 임계값 레지스터를 포함하고, 감산기는 임계값 레지스터에 접속되고, 감산기는 핫니스 값 카운터에 접속되고, 감산기는 핫니스 값 카운터에서의 식별 대상 함수의 핫니스 값으로부터 임계값 레지스터에서의 식별 대상 함수의 핫니스 임계값을 감산하여 차이를 획득하도록 구성되고, 차이가 0보다 클 때, 식별 대상 함수의 업데이트된 핫니스 값은 식별 대상 함수의 핫니스 임계값 이상이라는 점을 표시한다.
감산기, 임계값 레지스터, 및 핫니스 값 카운터는 접속되고, 이러한 회로는 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하므로, 코드 연산량이 추가로 감소되고, 실행 효율성이 추가로 더 높다.
제1 양태의 제4 구현 방식에 따르면, 이러한 장치의 제6 가능한 구현 방식에서, 제2 결정 회로는 제1 비교기 및 식별 대상 함수의 핫니스 임계값을 저장하도록 구성되는 임계값 레지스터를 포함하고, 제1 비교기는 임계값 레지스터에 접속되고, 제1 비교기는 핫니스 값 카운터에 접속되고, 제1 비교기는 핫니스 값 카운터에서의 식별 대상 함수의 업데이트된 핫니스 값이 임계값 레지스터에서의 식별 대상 함수의 핫니스 임계값 이상인지 결정하도록 구성된다.
제1 비교기, 임계값 레지스터, 및 핫니스 값 카운터는 접속되고, 이러한 회로는 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하므로, 소프트웨어 기반 구현의 부담이 경감되고, 실행 효율성이 추가로 더 높다.
제1 양태의 제5 또는 제6 구현 방식에 따르면, 이러한 장치의 제7 구현 방식의 가능한 구현 방식에서, 이러한 장치는 프로세서 및 메모리를 추가로 포함하고; 메모리는 코드를 저장하도록 구성되고; 메모리에 저장되는 코드를 판독하여, 프로세서는,
언어 가상 머신이 식별 대상 함수를 호출할 때, 식별 대상 함수의 현재 핫니스 값을 핫니스 값 카운터에 로딩하도록; 그리고
언어 가상 머신이 식별 대상 함수를 리턴할 때, 메모리에, 핫니스 값 카운터에서의 식별 대상 함수의 업데이트된 핫니스 값을 저장하도록 구성된다.
핫니스 값 카운터에서의 값은 식별 대상 함수의 실행 동안만의 식별 대상 함수의 핫니스 값이다. 이러한 방식으로, 식별 대상 함수를 실행하지 않는 프로세스에서, 핫니스 값 카운터는 다른 함수를 구현하는데 사용될 수 있고, 따라서, 저장 리소스들의 사용이 최적화된다.
전술한 제1 양태의 제7 가능한 구현 방식에 따르면, 제1 양태의 제7 구현 방식의 다른 구현 방식에서, 프로세서는, 언어 가상 머신이 식별 대상 함수를 호출할 때, 식별 대상 함수의 핫니스 임계값을 임계값 레지스터에 로딩하도록 추가로 구성될 수 있어, 상이한 함수들이 상이한 핫니스 임계값들을 갖는 경우에 적응한다. 언어 가상 머신이 식별 대상 함수를 리턴한 이후, 임계값 레지스터는 식별 대상 함수의 핫니스 임계값을 저장하는 목적 이외의 목적으로 사용될 수 있다는 점이 이해되어야 한다.
전술한 제1 양태의 제7 가능한 구현 방식에 따르면, 제1 양태의 제7 구현 방식의 다른 구현 방식에서, 프로세서는, 언어 가상 머신이 식별 대상 함수를 리턴할 때, 메모리에, 임계값 레지스터에서의 식별 대상 함수의 핫니스 임계값을 저장하도록 추가로 구성될 수 있어, 임계값 레지스터에서의 핫니스 임계값이 식별 대상 함수의 실행 동안 변경되는 경우에 적응한다.
제1 양태의 제7 구현 방식에 따르면, 이러한 장치의 제8 가능한 구현 방식에서, 프로세서는, 언어 가상 머신이 식별 대상 함수를 호출할 때, 메모리에, 핫니스 값 카운터에서의 호출 함수의 업데이트된 핫니스 값을 저장하도록- 식별 대상 함수는 호출 함수의 서브함수임 -; 그리고
언어 가상 머신이 식별 대상 함수를 리턴할 때, 호출 함수의 현재 핫니스 값을 핫니스 값 카운터에 로딩하도록 추가로 구성된다. 이러한 방식으로, 호출 함수 및 식별 대상 함수의 핫니스 값들은 개별적으로 처리될 수 있다.
상이한 함수들이 상이한 핫니스 임계값들을 가질 때, 프로세서는, 언어 가상 머신이 식별 대상 함수를 리턴할 때, 호출 함수의 핫니스 임계값을 임계값 레지스터에 로딩하도록 추가로 구성될 수 있고; 호출 함수의 실행 동안, 임계값 레지스터에서의 핫니스 임계값이 변경될 때, 프로세서는, 식별 대상 함수가 호출될 때, 메모리에, 임계값 레지스터에서의 호출 함수의 핫니스 임계값을 저장하도록 추가로 구성될 수 있다.
제1 양태, 또는 제1 양태의 전술한 구현 방식들 중 어느 하나에 따르면, 이러한 장치의 제9 가능한 구현 방식에서, 획득 회로는 명령어 카운터에 접속되는 명령어 어드레스 레지스터를 포함하고, 명령어 어드레스 레지스터는, 트리거 레벨을 수신하여, 명령어 카운터에서의 명령어 어드레스를 획득하는 액션을 트리거하고, 명령어 어드레스 레지스터는 명령어 카운터에서의 명령어 어드레스를 저장하도록 추가로 구성된다.
이러한 회로는 명령어 카운터에서의 명령어 어드레스를 획득하므로, 소프트웨어 기반 구현의 부담이 경감되고, 실행 효율성이 추가로 더 높다.
제1 양태의 제9 구현 방식에 따르면, 이러한 장치의 제10 가능한 구현 방식에서, 식별 대상 함수의 로컬 명령어 공간은 어드레스들이 연속되는 저장 공간이고, 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위는 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 및 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스에 의해 표시되고, 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스는 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고;
제1 결정 회로는, 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스를 저장하도록 구성되는 시작 어드레스 레지스터, 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스를 저장하도록 구성되는 종료 어드레스 레지스터, 제3 비교기, 및 제2 비교기를 포함하고- 제3 비교기는 명령어 어드레스 레지스터에 접속되고, 제3 비교기는 시작 어드레스 레지스터에 접속되고, 제3 비교기는, 명령어 카운터에 있고 명령어 어드레스 레지스터에 저장되는 명령어 어드레스가 시작 어드레스 레지스터에서의 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상인지 비교하도록 구성됨 -;
제2 비교기는 명령어 어드레스 레지스터에 접속되고, 제2 비교기는 종료 어드레스 레지스터에 접속되고, 제2 비교기는, 명령어 카운터에 있고 명령어 어드레스 레지스터에 저장되는 명령어 어드레스가 종료 어드레스 레지스터에서의 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하인지 비교하도록 구성되고; 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하일 때, 이는 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있다는 점을 표시한다.
어드레스는 논리적 어드레스 또는 물리적 어드레스를 지칭하고, 어드레스들이 연속된다는 것은 식별 대상 함수의 로컬 명령어 공간에 있는 최소 어드레스 값으로부터 최대 어드레스 값까지의 어드레스 값들에 대응하는 모든 저장 공간이 로컬 명령어 공간의 저장 공간이라는 점을 의미한다.
제1 양태의 제10 구현 방식의 다른 구현 방식에서, 시작 어드레스 레지스터 및 종료 어드레스 레지스터는 하나의 레지스터로서 사용될 수 있고, 이러한 레지스터는 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 및 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 양자 모두를 저장할 수 있다.
제2 비교기, 제3 비교기, 명령어 어드레스 레지스터, 시작 어드레스 레지스터, 및 종료 어드레스 레지스터가 접속되고, 이러한 회로는 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정한다. 이러한 방식으로, 소프트웨어 기반 구현의 부담이 경감되고, 실행 효율성이 추가로 더 높다.
이러한 장치의 제10 구현 방식이 이러한 장치의 제6 구현 방식과 조합될 때, 제2 비교기 및 제3 비교기는 논리 게이트를 사용하여 핫니스 값 카운터에 직접적으로 또는 간접적으로 접속된다. 제2 비교기 및 제3 비교기에 의해 출력되고 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어라는 점을 표시하는데 사용되는 레벨을 사용하여, 핫니스 값 카운터는 1만큼 증가하는 카운팅을 수행하도록 트리거되므로, 핫스폿 중간 코드가 완전히 식별될 수 있다, 즉, 핫스폿 중간 코드는 언어 가상 머신에서의 코드 실행 프로세스와 독립적인 하드웨어 회로에 의해 완전히 식별된다. 이러한 방식으로, 소프트웨어 기반 구현의 부담이 경감되고, 실행 효율성이 추가로 더 높다.
제1 양태의 제10 구현 방식에 따르면, 이러한 장치의 제11 구현 방식의 가능한 구현 방식에서, 이러한 장치는 프로세서 및 메모리를 포함하고; 메모리는 코드를 저장하도록 구성되고; 메모리에 저장되는 코드를 판독하여, 프로세서는,
언어 가상 머신이 식별 대상 함수를 호출할 때, 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스를 시작 어드레스 레지스터에 로딩하도록, 그리고 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스를 종료 어드레스 레지스터에 로딩하도록 구성된다.
시작 어드레스 레지스터에서의 값은 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스이고, 종료 어드레스 레지스터에서의 값은 언어 가상 머신에 의한 식별 대상 함수의 실행 동안만의 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스이다. 이러한 방식으로, 식별 대상 함수를 실행하지 않는 프로세스에서는, 시작 어드레스 레지스터 및 종료 어드레스 레지스터가 다른 함수들을 구현하는데 사용될 수 있고, 따라서, 저장 리소스들의 사용이 최적화된다. 또한, 이러한 구현 방식은 상이한 함수들이 상이한 시작 어드레스들 또는 종료 어드레스들을 갖는 경우에 적용할 수 있다.
전술한 제1 양태의 제11 가능한 구현 방식에 따르면, 제1 양태의 제11 구현 방식의 다른 구현 방식에서, 프로세서는, 언어 가상 머신이 식별 대상 함수를 리턴할 때, 메모리에, 시작 어드레스 레지스터에서의 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스를 저장하도록, 그리고, 메모리에, 종료 어드레스 레지스터에서의 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스를 저장하도록 구성될 수 있어, 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 및 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스가 식별 대상 함수의 실행 동안 변경되는 경우에 적응한다. 언어 가상 머신이 식별 대상 함수를 리턴한 이후, 시작 어드레스 레지스터 및 종료 어드레스 레지스터는 식별 대상 함수의 시작 어드레스 및 종료 어드레스를 저장하는 목적 이외의 목적으로 사용될 수 있다는 점이 이해되어야 한다.
제1 양태의 제11 구현 방식에 따르면, 이러한 장치의 제12 가능한 구현 방식에서, 프로세서는,
언어 가상 머신이 식별 대상 함수를 리턴할 때, 호출 함수의 로컬 명령어 공간의 시작 어드레스를 시작 어드레스 레지스터에 로딩하도록, 그리고 호출 함수의 로컬 명령어 공간의 종료 어드레스를 종료 어드레스 레지스터에 로딩하도록- 식별 대상 함수는 호출 함수의 서브함수이어서, 호출 함수와 식별 대상 함수가 상이한 시작 어드레스들 및 상이한 종료 어드레스들을 갖는 경우에 적응함 - 구성된다.
프로세서는, 식별 대상 함수가 호출될 때, 메모리에, 시작 어드레스 레지스터에서의 호출 함수의 로컬 명령어 공간의 시작 어드레스를 저장하도록, 그리고, 메모리에, 종료 어드레스 레지스터에서의 호출 함수의 로컬 명령어 공간의 종료 어드레스를 저장하도록 추가로 구성될 수 있다는 점이 이해되어야 한다.
제1 양태, 또는 제1 양태의 전술한 구현 방식들 중 어느 하나에 따르면, 이러한 장치의 제13 가능한 구현 방식에서, 획득 회로는, 주기적인 트리거 레벨을 수신하여, 명령어 카운터에서의 명령어 어드레스를 획득하는 액션을 주기적으로 트리거하도록 구성된다. 명령어 카운터에서의 명령어 어드레스는 소프트웨어에 의한 타이밍에 의해 주기적으로 획득될 수 있거나, 획득 액션은 주기적인 클록 신호를 사용하여 트리거될 수 있다. 획득 회로가 명령어 어드레스 레지스터일 때, 명령어 어드레스 레지스터의 입력은 명령어 카운터 및 주기적인 트리거 레벨과는 별도로 존재한다. 이러한 레벨은 주기적인 클록 신호일 수 있고, 명령어 어드레스 레지스터와 명령어 카운터 사이의 동기화는 이러한 클록 신호의 상승 에지 또는 하강 에지 상에 트리거된다.
명령어 카운터는 명령어 카운터에서의 명령어 어드레스를 주기적으로 획득하여, 처리를 위해 많은 양의 안정된 데이터를 형성한다. 이러한 방식으로, 랜덤 팩터에 의해 야기되는 영향이 감소되고, 획득되는 핫니스 값은 더 높은 신뢰성을 갖는다.
제1 양태, 또는 제1 양태의 전술한 구현 방식들 중 어느 하나에 따르면, 이러한 장치의 제14 가능한 구현 방식에서, 이러한 장치는 프로세서 및 메모리를 포함하고; 메모리는 코드를 저장하도록 구성되고; 메모리에 저장되는 코드를 판독하여, 프로세서는,
언어 가상 머신이 식별 대상 함수를 리턴할 때, 또는 언어 가상 머신이 식별 대상 함수를 리턴한 이후, 제2 결정 회로를 트리거하여 식별 대상 함수의 것이고 업데이트 회로에 의해 획득되는 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하는 액션을 수행하도록 구성된다.
일단 식별 대상 함수가 실행되면 식별 대상 함수가 리턴되는 경우에, 전술한 결정 액션은 식별 대상 함수의 실행 동안 수행된다. 식별 대상 함수가 리턴될 때 또는 식별 대상 함수가 리턴된 이후에만 전술한 결정 액션이 수행되는 경우와 비교하여, 2개의 결정 결과를 획득하는 순간들이 식별 대상 함수의 이러한 실행 상태에 영향을 미치지 않는다. 그러나, 명령어 카운터에서의 명령어 어드레스가 주기적으로 획득될 때, 전자의 경우에는, 식별 대상 함수의 중간 코드가 이러한 함수가 다음에 실행될 때 핫스폿 중간 코드인지 정확하게 결정될 수 없다. 이것은, 함수 실행 동안 결정에 의해 획득되는 결정 결과가, 식별 대상 함수의 중간 코드가 핫스폿 중간 코드가 아니라는 점 때문이지만, 식별 대상 함수의 핫니스 값은 결정으로부터 함수 리턴까지의 기간 동안 여전히 증가할 수 있다. 전자의 경우에는, 식별 대상 함수의 중간 코드가 이러한 함수가 다음에 실행될 때 핫스폿 중간 코드인지 정확하게 결정될 수 없지만, 후자의 경우에는, 식별 대상 함수의 중간 코드가 이러한 함수가 다음에 실행될 때 핫스폿 중간 코드인지 정확하게 결정될 수 있다.
제1 양태, 또는 제1 양태의 전술한 구현 방식들 중 어느 하나에 따르면, 이러한 장치의 제15 구현 방식의 가능한 구현 방식에서, 이러한 장치는 프로세서 및 메모리를 포함하고; 메모리는 코드를 저장하도록 구성되고; 메모리에 저장되는 코드를 판독하여, 프로세서는,
식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상이라고 제2 결정 회로가 결정한 이후, 식별 대상 함수의 업데이트된 핫니스 값을 메모리에 저장하도록;
미리 설정된 기간 이전 식별 대상 함수의 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상일 때, 미리 설정된 기간 이전 식별 대상 함수의 핫니스 값을 메모리에서의 식별 대상 함수의 업데이트된 핫니스 값으로부터 감산하여 차이를 계산하도록- 미리 설정된 기간 이전 식별 대상 함수의 핫니스 값은 메모리에 저장됨 -; 그리고
차이가 미리 설정된 삭제 임계값 미만일 때, 식별 대상 함수의 로컬 코드를 메모리로부터 삭제하도록 구성된다.
핫스폿 중간 코드를 식별하는 목적은 다음과 같다: 로컬 코드의 실행 효율성은 중간 코드의 실행 효율성보다 높고, 따라서, 종래 기술에서는 핫스폿 중간 코드가 저스트-인-타임 컴파일러에 의해 로컬 코드로 컴파일되고, 이러한 로컬 코드는 호출을 위해 이러한 로컬 코드를 저장하는데 사용되는 저장 공간에 저장된다. 이러한 장치는 최근에 드물게 실행된 로컬 코드를 시기적절한 방식으로 제거할 수 있다. 이러한 방식으로, 새롭게 생성되는 로컬 코드를 보다 많은 저장 공간이 저장할 수 있고, 저장 공간의 이용이 향상되고, 코드 실행 효율성이 추가로 향상된다.
제1 양태, 또는 제1 양태의 전술한 구현 방식들 중 어느 하나에 따르면, 이러한 장치의 제16 가능한 구현 방식에서, 이러한 장치는 식별 대상 함수의 함수 정보를 저장하도록 구성되는 함수 정보 레지스터를 추가로 포함하고, 함수 정보는 식별 대상 함수를 표시하는데 사용되고; 장치는 프로세서 및 메모리를 포함하고; 메모리는 코드를 저장하도록 구성되고; 메모리에 저장되는 코드를 판독하여, 프로세서는,
식별 대상 함수의 함수 정보를 함수 정보 레지스터에 로딩하여, 프로세서가, 함수 정보 레지스터에서의 식별 대상 함수의 함수 정보에 따라, 식별 대상 함수의 중간 코드를 핫스폿 중간 코드로서 사용하여 식별 대상 함수의 중간 코드를 식별 대상 함수의 로컬 코드로 컴파일하도록 구성된다.
제2 양태에 따르면, 핫스폿 중간 코드를 식별하는 방법이 제공되고, 이러한 방법은, 언어 가상 머신이 식별 대상 함수를 실행할 때, 명령어 카운터에서의 명령어 어드레스를 획득하는 단계, 및 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정하는 단계; 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어일 때, 식별 대상 함수의 현재 핫니스 값을 미리 설정된 값만큼 증가시켜, 식별 대상 함수의 핫니스 값을 업데이트하는 단계; 및 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하는 단계, 및 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상일 때, 식별 대상 함수의 중간 코드를 핫스폿 중간 코드로서 사용하는 단계를 포함한다.
이러한 방법은 소프트웨어 프로그래밍에 의해 구현될 수 있거나, 또는 이러한 방법을 구현할 수 있는 회로에 의해 구현될 수 있거나; 또는 이러한 방법의 일부는 소프트웨어 프로그래밍에 의해 구현될 수 있고, 나머지 부분은 회로에 의해 구현된다. 로컬 명령어는 로컬 코드에서의 명령어를 참조한다. 마찬가지로, 중간 코드에서의 명령어는 중간 명령어이다.
이러한 방법에 따르면, 명령어 카운터에서의 명령어 어드레스가 얻어지고, 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정되므로, 핫스폿 중간 코드가 식별될 수 있다.
제2 양태에 따르면, 이러한 방법의 제1 가능한 구현 방식에서, 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정하는 단계는, 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있는지 결정하는 단계- 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 식별 대상 함수의 로컬 명령어를 포함하고, 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 언어 가상 머신의 함수들을 구현하는데 사용되는 로컬 명령어를 포함하지 않음 -를 포함한다.
제2 양태의 제1 구현 방식에 따르면, 이러한 방법의 제2 가능한 구현 방식은 제1 양태의 제2 가능한 구현 방식을 참조하여 획득될 수 있고, 이러한 방법의 제3 가능한 구현 방식은 제1 양태의 제3 가능한 구현 방식을 참조하여 획득될 수 있다.
제2 양태의 제1 내지 제3 구현 방식들 중 어느 하나에 따르면, 이러한 방법의 제4 가능한 구현 방식에서, 식별 대상 함수의 로컬 명령어 공간은 어드레스들이 연속되는 저장 공간이고, 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위는 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 및 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스에 의해 표시되고, 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스는 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고, 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있는지 결정하는 단계는,
명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상인지, 및 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하인지 결정하는 단계를 포함하고;
명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하일 때, 이는 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있다는 점을 표시한다.
제2 양태, 또는 제2 양태의 전술한 구현 방식들 중 어느 하나에 따르면, 이러한 방법의 제5 가능한 구현 방식에서, 명령어 카운터에서의 명령어 어드레스를 획득하는 단계는, 명령어 카운터에서의 명령어 어드레스를 주기적으로 획득하는 단계를 포함하고;
식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하는 단계는,
언어 가상 머신이 식별 대상 함수를 리턴할 때, 또는 언어 가상 머신이 식별 대상 함수를 리턴한 이후, 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하는 단계를 포함한다.
명령어 카운터에서의 명령어 어드레스는 소프트웨어에 의한 타이밍에 의해 주기적으로 획득될 수 있거나, 획득 액션은 주기적인 클록 신호를 사용하여 트리거될 수 있다. 예를 들어, 주기적인 클록 신호는 명시되는 레지스터를 트리거하여 명령어 카운터에서의 명령어 어드레스를 주기적으로 획득한다. 명령어 카운터에서의 명령어 어드레스가 주기적으로 획득되어, 처리를 위해 많은 양의 안정된 데이터를 형성한다. 이러한 방식으로, 랜덤 팩터에 의해 야기되는 영향이 감소되고, 획득되는 핫니스 값은 더 높은 신뢰성을 갖는다.
제2 양태, 또는 제2 양태의 전술한 구현 방식들 중 어느 하나에 따르면, 이러한 방법의 제6 가능한 구현 방식에서, 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상이라고 결정된 이후, 이러한 방법은,
미리 설정된 기간 이전 식별 대상 함수의 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상일 때, 미리 설정된 기간 이전 식별 대상 함수의 핫니스 값을 식별 대상 함수의 업데이트된 핫니스 값으로부터 감산하여 차이를 계산하는 단계; 및
차이가 미리 설정된 삭제 임계값 미만일 때, 식별 대상 함수의 로컬 코드를 저장하는데 사용되는 저장 공간으로부터 식별 대상 함수의 로컬 코드를 삭제하는 단계를 추가로 포함한다.
제2 양태의 제1 구현 방식에 따르면, 이러한 방법의 제7 가능한 구현 방식에서, 식별 대상 함수의 로컬 코드가 식별 대상 함수의 로컬 코드를 저장하는데 사용되는 저장 공간으로부터 삭제된 이후, 식별 대상 함수의 핫니스 값은 추가로 제로 아웃될 수 있다.
제3 양태에 따르면, 핫스폿 중간 코드를 식별하는 장치가 제공되고, 이러한 장치는,
언어 가상 머신이 식별 대상 함수를 실행할 때, 명령어 카운터에서의 명령어 어드레스를 획득하도록 구성되는 획득 유닛;
명령어 카운터에 있고 획득 유닛에 의해 획득되는 명령어 어드레스에 따라, 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정하도록 구성되는 제1 결정 유닛;
명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어라고 제1 결정 유닛이 결정할 때, 식별 대상 함수의 현재 핫니스 값을 미리 설정된 값만큼 증가시켜, 식별 대상 함수의 핫니스 값을 업데이트하도록 구성되는 업데이트 유닛; 및
식별 대상 함수의 것이고 업데이트 유닛에 의해 획득되는 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하도록, 그리고 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값보다 클 때, 식별 대상 함수의 중간 코드를 핫스폿 중간 코드로서 사용하도록 구성되는 제2 결정 유닛을 포함한다.
제3 양태에 따르면, 이러한 장치의 제1 가능한 구현 방식에서, 제1 결정 유닛은,
명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있는지 결정하도록- 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 식별 대상 함수의 로컬 명령어를 포함하고, 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 언어 가상 머신의 함수들을 구현하는데 사용되는 로컬 명령어를 포함하지 않음 - 구성된다.
제3 양태의 제1 구현 방식에 따르면, 이러한 장치의 제2 가능한 구현 방식은 제1 양태의 제2 가능한 구현 방식을 참조하여 획득될 수 있고, 이러한 장치의 제3 가능한 구현 방식은 제1 양태의 제3 가능한 구현 방식을 참조하여 획득될 수 있다.
제3 양태의 제1 내지 제3 구현 방식들 중 어느 하나에 따르면, 이러한 장치의 제4 가능한 구현 방식에서, 식별 대상 함수의 로컬 명령어 공간은 어드레스들이 연속되는 저장 공간이고, 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위는 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 및 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스에 의해 표시되고, 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스는 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고; 제1 결정 유닛은,
명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상인지, 및 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하인지 결정하도록 구성되고;
명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하일 때, 이는 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있다는 점을 표시한다.
제3 양태, 또는 제3 양태의 전술한 구현 방식들 중 어느 하나에 따르면, 이러한 장치의 제5 가능한 구현 방식에서, 획득 유닛은 명령어 카운터에서의 명령어 어드레스를 주기적으로 획득하도록 구성되고; 이에 대응하여,
제2 결정 유닛은, 언어 가상 머신이 식별 대상 함수를 리턴할 때, 또는 언어 가상 머신이 식별 대상 함수를 리턴한 이후, 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하도록 구성된다.
제3 양태, 또는 제3 양태의 전술한 구현 방식들 중 어느 하나에 따르면, 이러한 장치의 제6 가능한 구현 방식에서, 이러한 장치는 계산 유닛 및 삭제 유닛을 추가로 포함하고;
계산 유닛은, 식별 대상 함수의 것이고 업데이트 유닛에 의해 획득되는 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상이라고 제2 결정 유닛이 결정한 이후, 미리 설정된 기간 이전 식별 대상 함수의 핫니스 값을 식별 대상 함수의 업데이트된 핫니스 값으로부터 감산하여 차이를 계산하도록- 미리 설정된 시간 이전 식별 대상 함수의 핫니스 값은 식별 대상 함수의 핫니스 임계값 이상임 - 구성되고;
삭제 유닛은, 계산 유닛에 의해 획득되는 차이가 미리 설정된 삭제 임계값 미만일 때, 식별 대상 함수의 로컬 코드를 저장하는데 사용되는 저장 공간으로부터 식별 대상 함수의 로컬 코드를 삭제하도록 구성된다.
제4 양태에 따르면, 핫스폿 중간 코드를 식별하는 장치가 제공되고, 이러한 장치는 프로세서 및 메모리를 포함하고; 메모리는 코드를 저장하도록 구성되고; 메모리에 저장되는 코드를 판독하여, 프로세서는 제2 양태에서 제공되는 방법을 실행하도록 구성된다.
제5 양태에 따르면, 컴퓨터 저장 매체가 제공되고 이는 제3 양태에서 프로세서에 의해 실행되는데 사용되는 컴퓨터 소프트웨어 명령어를 저장하는데 사용되어, 제2 양태에서 제공되는 방법을 실행한다.
명령어 카운터에서의 명령어 어드레스가 획득되고, 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정되므로, 핫스폿 중간 코드가 식별될 수 있다는 점을, 본 발명의 실시예들에서 제공되는 전술한 구현 방식들로부터, 알 수 있다.
본 발명의 실시예들에서의 기술적 해결책들을 보다 명확하게 설명하기 위해, 이하는 실시예들을 설명하는데 요구되는 첨부 도면들을 간단하게 설명한다. 명백히, 이하 설명에서의 첨부 도면들은 단지 본 발명의 일부 실시예들을 도시하고, 해당 분야에서의 통상의 기술자는 창의적인 노력들 없이도 이러한 첨부 도면들로부터 다른 도면들을 여전히 도출할 수 있다.
도 1은 본 발명의 실시예에 따른 언어 가상 머신의 개략적인 블록도이다.
도 2는 본 발명의 실시예에 따른 핫스폿 중간 코드를 식별하는 장치의 논리적 구조의 개략적인 도면이다.
도 3은 본 발명의 실시예에 따른 하드웨어 회로의 논리적 구조의 개략적인 도면이다.
도 4는 본 발명의 실시예에 따른 핫스폿 중간 코드를 식별하는 방법의 개략적인 흐름도이다.
도 5는 본 발명의 실시예에 따른 컴퓨터 디바이스의 하드웨어 구조의 개략적인 도면이다.
도 1은 본 발명의 실시예에 따른 언어 가상 머신의 개략적인 블록도이다.
도 2는 본 발명의 실시예에 따른 핫스폿 중간 코드를 식별하는 장치의 논리적 구조의 개략적인 도면이다.
도 3은 본 발명의 실시예에 따른 하드웨어 회로의 논리적 구조의 개략적인 도면이다.
도 4는 본 발명의 실시예에 따른 핫스폿 중간 코드를 식별하는 방법의 개략적인 흐름도이다.
도 5는 본 발명의 실시예에 따른 컴퓨터 디바이스의 하드웨어 구조의 개략적인 도면이다.
이하는 첨부 도면들을 참조하여 본 발명의 실시예들을 설명한다.
도 1은 언어 가상 머신(100)의 개략적인 블록도이다. 언어 가상 머신(100)은 가상 컴퓨터이고, 실제 컴퓨터에서의 다양한 컴퓨터 함수들의 에뮬레이션 및 시뮬레이션에 의해 구현된다. 언어 가상 머신(100)은 컴퓨터 디바이스의 메모리에 존재할 수 있고, 컴퓨터 디바이스의 프로세서를 사용하여 언어 가상 머신(100)의 코드(이러한 코드는 호스트(host) 메소드라고 또한 지칭되거나, 비-게스트(guest) 메소드라고 지칭됨)를 획득하고, 프로세서는 언어 가상 머신(100)의 함수들을 실행한다. 언어 가상 머신(100)은 실행 엔진(execution engine)(110) 및 런타임 데이터 영역(runtime data area)(120)을 포함한다.
실행 엔진(110)은 중간 코드를 실행하도록 구성되고, 인터프리터(Interpreter)(112) 및 저스트-인-타임(JIT, Just In Time) 컴파일러(114)를 포함한다.
런타임 데이터 영역(120)은 언어 가상 머신(100)의 실행 프로세스에서 요구되는 데이터를 저장하는데 사용되고, 언어 가상 머신(100)이 시작될 때 생성되고 언어 가상 머신(100)이 종료될 때 제거된다. 런타임 데이터 영역(120)은, 명령어 카운터(Program Counter Register)(122), 가상 머신 스택(Stack)(124), 네이티브 메소드 스택(Native Method Stack)(126), 메소드 영역(Method Area)(128), 및 힙(Heap)(130)을 포함한다. 이러한 메소드는 함수라고 또한 지칭된다. 달리 언급되지 않는 한, 이러한 메소드 또는 함수는 게스트(guest) 메소드로서 이해될 필요가 있다는 점이 이해되어야 한다.
프로그램 카운터(122)는 메모리 영역이고, 다음 실행 대상 바이트코드 명령어를 저장하도록 구성된다.
가상 머신 스택(124)은 메소드 실행을 위한 메모리 모델을 표시한다. 하나의 메소드가 호출될 때마다 하나의 스택 프레임(Stack Frame)이 생성되고, 이러한 스택 프레임은 3개의 부분들: 로컬 변수(Local Variables) 영역, 피연산자 스택(Operand Stack), 및 프레임 데이터(Frame Data) 영역을 포함한다. 로컬 변수 영역은 메소드에 로컬 변수 및 파라미터를 저장하는데 사용된다. 피연산자 스택은 메소드 실행 프로세스에서 생성되는 중간 결과를 저장하는데 사용된다. 프레임 데이터 영역은 상수 풀(constant_pool)에서 데이터를 파싱하기 위해, 메소드가 실행된 이후 처리 메소드를 리턴하기 위해, 호출 메소드의 장면을 복원하기 위해 등등으로 사용된다. 상수 풀은 컴파일 시기에 결정되고, compiled .class 파일에 저장된다. 상수 풀은 클래스 또는 메소드에 대한 상수, 또는 인터페이스에 관한 상수를 포함하고, 문자열 상수 및 부호 인용을 또한 포함한다. 각각의 타입은 자신의 상수 풀을 갖는다.
가상 머신 스택과 유사하게, 네이티브 메소드 스택(126)은 네이티브 메소드가 실행될 때 사용된다. 언어 가상 머신이 JVM일 때, 네이티브 메소드는 비-JAVA 언어를 사용하여 구현되는 메소드이다.
메소드 영역(128)은 가상 머신에 의해 이미 로딩된 정보, 예를 들어, 타입 정보, 상수, 정적 변수, 및 즉시 컴파일된 코드를 저장하는데 사용된다. 메소드 영역(128)의 일부는 컴파일 동안 생성되는 독립 변수 및 부호 인용을 저장하는데 주로 사용되는 런타임 상수 풀(Runtime Constant Pool)이고, 상수는 실행, 예를 들어, 문자열의 인턴 메소드 동안 또한 생성될 수 있다.
힙(130)은 가상 머신에 있고 오브젝트 및 어레이를 저장하는데 사용되는 위치이다. Java 힙은 논리적으로 연속되기만 하면 되고, 물리적 공간에서는 연속되지 않을 수 있다.
도 2는 언어 가상 머신(100)에 적용되는 핫스폿 중간 코드를 식별하는 장치(200)의 논리적 구조의 개략적인 도면이다. 도 2에 도시되는 바와 같이, 핫스폿 중간 코드를 식별하는 장치(200)는 획득 유닛(202), 제1 결정 유닛(204), 업데이트 유닛(206), 및 제2 결정 유닛(208)을 포함한다. 핫스폿 중간 코드를 식별하는 장치(200)는 컴퓨터 디바이스일 수 있다는 점이 이해되어야 한다. 핫스폿 중간 코드를 식별하는 장치(200)에서의 유닛들은 소프트웨어 프로그래밍에 의해 구현될 수 있거나, 또는 하드웨어 회로를 사용하여 구현될 수 있다. 이러한 하드웨어 회로 또는 소프트웨어는 핫스폿 중간 코드를 식별하는 장치(200)에서의 하나 이상의 유닛을 포함한다.
장치(200)에서의 유닛들이 소프트웨어 프로그래밍에 의해 구현될 때, 핫스폿 중간 코드를 식별하는 장치(200)는 언어 가상 머신(100)을 포함하는 컴퓨터 디바이스일 수 있거나, 또는 핫스폿 중간 코드를 식별하는 장치(200)는 언어 가상 머신(100)을 포함하지 않고, 언어 가상 머신(100)을 포함하는 컴퓨터 디바이스와 정보 교환을 수립하여, 핫스폿 중간 코드를 식별하는 장치(200)에서의 유닛들의 함수들을 구현하는 컴퓨터 디바이스일 수 있다. 핫스폿 중간 코드를 식별하는 장치(200)에서의 유닛들은 언어 가상 머신(100)의 실행 유닛들로서 사용될 수 있거나, 또는 컴퓨터 디바이스의 프로세서에 의해 실행되는데 직접적으로 사용될 수 있다.
장치(200)에서의 유닛들이 하드웨어 회로를 사용하여 구현될 때, 획득 유닛(202)은 획득 회로라고 지칭되고, 제1 결정 유닛(204)은 제1 결정 회로라고 지칭되고, 업데이트 유닛(206)은 업데이트 회로라고 지칭되고, 제2 결정 유닛(208)은 제2 결정 회로라고 지칭된다. 핫스폿 중간 코드를 식별하는 장치(200)는 언어 가상 머신(100)을 포함하는 컴퓨터 디바이스와의 정보 교환을 수립할 수 있어, 핫스폿 중간 코드를 식별하는 장치(200)에서의 회로들의 함수들을 구현한다. 정보 교환은 유선 접속 또는 무선 네트워크 통신에 의해 수립된다. 대안적으로, 핫스폿 중간 코드를 식별하는 장치(200)는 언어 가상 머신(100) 및 핫스폿 중간 코드를 식별하는 장치(200)에서의 회로들을 포함하는 컴퓨터 디바이스일 수 있다.
획득 유닛(202)은, 언어 가상 머신(100)이 식별 대상 함수를 실행할 때, 명령어 카운터에서의 명령어 어드레스를 획득하도록 구성된다. 식별 대상 함수는 식별 대상 메소드라고 또한 지칭될 수 있다.
명령어 카운터는 프로그램 카운터라고 또한 지칭될 수 있지만, 언어 가상 머신(100)에서의 프로그램 카운터(122)와는 상이하다는 점이 주목되어야 한다. 프로그램 카운터(122)는 다음 바이트코드(중간 명령어)를 저장하는 메모리 영역이지만, 명령어 카운터는 프로세서에서의 레지스터이고, 명령어 카운터는 프로세서에 의해 실행될 다음 로컬 명령어의 어드레스를 저장한다. 명령어 카운터는 언어 가상 머신(100)을 포함하는 컴퓨터 디바이스에 또한 존재한다.
구체적으로, 획득 회로로서 사용될 때, 획득 유닛(202)은 명령어 카운터에 접속되는 명령어 어드레스 레지스터(302)일 수 있다. 이러한 명령어 어드레스 레지스터(302)는, 트리거 레벨을 수신하여, 명령어 카운터에서의 명령어 어드레스를 획득하는 액션을 트리거하고, 명령어 어드레스 레지스터(302)는 획득되는 명령어 어드레스를 저장하도록 추가로 구성된다. 본 명세서에서 "접속되는(connected)"은 "물리적으로 접속되는(physically connected)" 및 "정보 교환을 수립하는(establishing information exchange)"을 포함한다.
구체적인 구현 동안, 트리거 레벨은 주기적일 수 있다. 예를 들어, 핫스폿 중간 코드를 식별하는 장치(200)가 컴퓨터 디바이스일 때, 트리거 레벨은 핫스폿 중간 코드를 식별하는 장치(200)의 클록 신호 또는 클록 신호 상에 수행되는 주파수 분할에 의해 획득되는 신호일 수 있다. (구체적으로 명령어 어드레스 레지스터(302)일 수 있는) 획득 회로는, 주기적인 트리거 레벨을 수신하여, 명령어 카운터에서의 명령어 어드레스를 획득하는 액션을 주기적으로 트리거할 수 있다.
제1 결정 유닛(204)은, 명령어 카운터에 있고 획득 유닛(202)에 의해 획득되는 명령어 어드레스에 따라, 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정하도록 구성된다.
구체적으로, 제1 결정 유닛(204)은, 명령어 어드레스에 따라, 명령어 어드레스에 대응하는 명령어를 획득하도록, 그리고 명령어 어드레스에 대응하는 명령어가 식별 대상 함수의 로컬 명령어인지 결정하도록 추가로 구성될 수 있다.
구체적으로, 제1 결정 유닛(204)은 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있는지 결정하도록 구성될 수 있다. 식별 대상 함수의 로컬 명령어는 식별 대상 함수의 로컬 명령어 공간에 저장되고, 로컬 명령어 공간에서의 로컬 명령어들은 언어 가상 머신(100)의 함수들을 구현하는데 사용되는 로컬 명령어를 포함하지 않는다. 언어 가상 머신(100)의 인터프리터(112)가 식별 대상 함수의 중간 코드를 실행할 때, 모든 중간 명령어들에 대응하는 로컬 명령어들은 메모리의 메모리 공간에서의 연속적인 저장 공간에 저장되고, 구체적으로, 메소드 영역(128)에 저장될 수 있다는 점이 이해되어야 한다. 인터프리터(112)는 메모리에서의 연속 저장 공간에 있고 중간 명령어들에 대응하는 로컬 명령어들을 쿼리하여, 식별 대상 함수의 중간 코드에서의 중간 명령어들을 대응하는 로컬 명령어들로 하나씩 해석한다. 따라서, 인터프리터(112)가 식별 대상 함수의 중간 코드를 실행할 때, 로컬 명령어 공간은 인터프리터(112)에 의한 해석에 의해 획득될 수 있는 로컬 명령어를 저장하는데 사용되는 저장 공간이거나, 중간 명령어에 대응하는 로컬 명령어를 쿼리하는데 인터프리터(112)에 의해 사용되는 저장 공간이라고 지칭될 수 있다. 로컬 명령어 공간에서의 로컬 명령어들은 인터프리터(112)에 의해 해석되는데 사용되는 중간 명령어들에 대응하는 로컬 명령어들을 포함하고, 인터프리터(112)에 의해 해석되는데 사용되는 중간 명령어들에 대응하는 로컬 명령어들은 식별 대상 함수의 로컬 명령어를 포함한다.
또한, 중간 코드를 로컬 코드로 컴파일한 이후, 언어 가상 머신(100)의 저스트-인-타임 컴파일러(114)는 로컬 코드를 메모리의 메모리 공간, 예를 들어, 코드 캐시(code cache)에 저장한다는 점이 이해되어야 한다. 구체적인 구현 동안, 코드 캐시는 메소드 영역(128)에 있을 수 있다. 따라서, 언어 가상 머신(100)의 저스트-인-타임 컴파일러(114)가 식별 대상 함수의 로컬 코드를 실행할 때, 로컬 명령어 공간은 식별 대상 함수의 로컬 코드를 저장하는데 사용되는 저장 공간이고, 식별 대상 함수의 로컬 명령어는 식별 대상 함수의 로컬 코드에서의 명령어이다.
구체적인 구현 동안, 로컬 명령어 공간은 어드레스들이 연속되는 저장 공간일 수 있다. 로컬 명령어 공간의 어드레스 범위는 로컬 명령어 공간의 시작 어드레스 및 로컬 명령어 공간의 종료 어드레스에 의해 표시될 수 있고, 로컬 명령어 공간의 종료 어드레스는 로컬 명령어 공간의 시작 어드레스 이상이다.
선택적으로, 제1 결정 유닛(204)은, 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상인지, 및 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하인지 결정하도록 구성될 수 있다. 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하일 때, 명령어 카운터에서의 명령어 어드레스는 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있다.
선택적으로, 제1 결정 회로로서 사용될 때, 제1 결정 유닛(204)은 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스를 저장하는데 사용되는 시작 어드레스 레지스터(304) 및 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스를 저장하는데 사용되는 종료 어드레스 레지스터(306)를 추가로 포함할 수 있다.
선택적으로, 제1 결정 회로는 제3 비교기 및 제2 비교기를 포함할 수 있다. 제3 비교기는 명령어 어드레스 레지스터(302)에 접속되고, 제3 비교기는 시작 어드레스 레지스터(304)에 접속되고, 제3 비교기는 명령어 어드레스 레지스터(302)에서의 명령어 어드레스가 시작 어드레스 레지스터(304)에서의 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상인지 비교하도록 구성된다. 제2 비교기는 명령어 어드레스 레지스터(302)에 접속되고, 제2 비교기는 종료 어드레스 레지스터(306)에 접속되고, 제2 비교기는 명령어 어드레스 레지스터(302)에서의 명령어 어드레스가 종료 어드레스 레지스터(306)에서의 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하인지 비교하도록 구성되고, 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하일 때, 이는 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있다는 점을 표시한다.
선택적으로, 제1 결정 회로는 제3 감산기 및 제2 감산기를 포함할 수 있다. 제3 감산기는 명령어 어드레스 레지스터(302)에 접속되고, 제3 감산기는 시작 어드레스 레지스터(304)에 접속된다. 제3 감산기는, 명령어 어드레스 레지스터(302)에서의 명령어 어드레스와 시작 어드레스 레지스터(304)에서의 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 사이의 차이를 획득하여, 명령어 어드레스 레지스터(302)에서의 명령어 어드레스가 시작 어드레스 레지스터(304)에서의 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상인지 비교하도록 구성된다. 제2 감산기는 명령어 어드레스 레지스터(302)에 접속되고, 제2 감산기는 종료 어드레스 레지스터(306)에 접속된다. 제2 감산기는, 명령어 어드레스 레지스터(302)에서의 명령어 어드레스와 종료 어드레스 레지스터(306)에서의 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 사이의 차이를 획득하여, 명령어 어드레스 레지스터(302)에서의 명령어 어드레스가 종료 어드레스 레지스터(306)에서의 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하인지 비교하도록 구성된다. 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하일 때, 명령어 카운터에서의 명령어 어드레스는 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있다.
업데이트 유닛(206)은, 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어라고 제1 결정 유닛(204)이 결정할 때, 식별 대상 함수의 현재 핫니스 값을 미리 설정된 값만큼 증가시켜, 식별 대상 함수의 핫니스 값을 업데이트하도록 구성된다.
구체적으로, 업데이트 회로로서 사용될 때, 업데이트 유닛(206)은 핫니스 값 카운터(310)일 수 있다. 핫니스 값 카운터는 핫니스 값을 저장하는 카운터이고, 핫니스 값 카운터(310)는 핫니스 값 카운터(310)에서의 식별 대상 함수의 핫니스 값을, 1만큼, 증가시키도록 구성된다.
제2 결정 유닛(208)은, 식별 대상 함수의 것이고 업데이트 유닛(206)에 의해 획득되는 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하도록, 그리고 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값보다 클 때, 식별 대상 함수의 중간 코드를 핫스폿 중간 코드로서 사용하도록 구성된다.
선택적으로, 획득 유닛(202)은 명령어 카운터에서의 명령어 어드레스를 주기적으로 획득할 수 있다. 이에 대응하여, 제2 결정 유닛(208)은, 식별 대상 함수가 리턴될 때, 또는 식별 대상 함수가 리턴된 이후, 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하도록 구성될 수 있다.
선택적으로, 제2 결정 회로로서 사용될 때, 제2 결정 유닛(208)은 식별 대상 함수의 핫니스 임계값을 저장하도록 구성되는 임계값 레지스터(312)를 포함할 수 있다.
선택적으로, 제2 결정 회로는 감산기(314)를 추가로 포함할 수 있고, 감산기(314)는 임계값 레지스터(312)에 접속되고, 감산기(314)는 핫니스 값 카운터(310)에 접속된다. 감산기(314)는 임계값 레지스터(312)에서의 식별 대상 함수의 핫니스 임계값을 핫니스 값 카운터(310)에서의 식별 대상 함수의 핫니스 값으로부터 감산하여 차이를 획득하도록 구성된다. 이러한 차이가 0보다 클 때, 식별 대상 함수의 업데이트된 핫니스 값은 식별 대상 함수의 핫니스 임계값 이상이다.
선택적으로, 제2 결정 회로는 제1 비교기를 포함할 수 있고, 제1 비교기는 임계값 레지스터(312)에 접속되고, 제1 비교기는 핫니스 값 카운터(310)에 접속된다. 제1 비교기는 핫니스 값 카운터(310)에서의 식별 대상 함수의 업데이트된 핫니스 값이 임계값 레지스터(312)에서의 식별 대상 함수의 핫니스 임계값 이상인지 결정하도록 구성된다. 프로세서는 감산기(314) 또는 제1 비교기의 출력 결과를 직접적으로 또는 간접적으로 획득하여, 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 확인할 수 있다.
구체적인 구현 동안, 제1 결정 회로가 제3 감산기 및 제2 감산기를 포함할 때, 핫니스 값 카운터(310)가 제3 감산기 및 제2 감산기에 직접적으로 접속될 수 있거나, 또는 제3 감산기 및 제2 감산기가 논리 게이트 회로를 사용하여 핫니스 값 카운터(310)에 먼저 간접적으로 접속될 수 있다. 제3 감산기 및 제2 감산기의 출력 결과들이 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 표시할 때, 핫니스 값 카운터(310)가 트리거되어 1만큼 증가시키는 카운팅을 수행한다.
구체적인 구현 동안, 제1 결정 회로가 제3 비교기와 제2 비교기를 포함할 때, 핫니스 값 카운터(310)가 제3 비교기 및 제2 비교기에 직접적으로 접속될 수 있거나, 또는 제3 비교기 및 제2 비교기가 논리 게이트 회로를 사용하여 핫니스 값 카운터(310)에 먼저 간접적으로 접속될 수 있다. 제3 비교기 및 제2 비교기의 출력 결과들이 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 표시할 때, 핫니스 값 카운터(310)가 트리거되어 1만큼 증가시키는 카운팅을 수행한다.
구체적으로, 식별 대상 함수의 중간 코드가 핫스폿 중간 코드로서 사용된 이후, 저스트-인-타임 컴파일러(114)는 식별 대상 함수의 중간 코드를 식별 대상 함수의 로컬 코드로 컴파일할 수 있다.
구체적인 구현 동안, 대응하는 데이터 구조가 각각의 함수에 대해 수립될 수 있고, 이러한 데이터 구조는 메타데이터로서 명명될 수 있고, 이러한 데이터 구조는, 예를 들어, 클래스(class) 또는 구조(struct)일 수 있다. 식별 대상 함수의 예에서, 식별 대상 함수의 메타데이터에 기록될 수 있는 데이터는, 식별 대상 함수의 식별자, 식별 대상 함수의 시작 어드레스, 식별 대상 함수의 종료 어드레스, 식별 대상 함수의 핫니스 값, 및 식별 대상 함수의 핫니스 임계값을 포함한다. 상이한 함수들이 동일한 핫니스 임계값을 사용할 때, 식별 대상 함수의 메타데이터는 식별 대상 함수의 핫니스 임계값을 포함하지 않을 수 있고, 핫니스 임계값은 함수들의 공개 값으로서 사용된다. 이러한 실시예가 인터프리터(112)에 의한 중간 코드 실행 동안 핫스폿 식별에 대해서만 사용될 때, 식별 대상 함수의 메타데이터는 식별 대상 함수의 시작 어드레스 및 식별 대상 함수의 종료 어드레스를 포함하지 않을 수 있고, 시작 어드레스 및 종료 어드레스는 함수들의 공개 값으로서 사용된다. 식별 대상 함수의 중간 코드가 핫스폿 중간 코드로서 사용된 이후, 식별 대상 함수의 식별자는 저스트-인-타임 컴파일러가 식별 대상 함수의 식별자를 사용하여 식별 대상 함수의 중간 코드를 획득할 수 있게 하는데 사용되어, 식별 대상 함수의 중간 코드를 식별 대상 함수의 로컬 코드로 컴파일한다. 식별 대상 함수의 식별자는 핫스폿 식별에 사용되지 않는다. 따라서, 핫스폿 중간 코드의 식별에 대해, 식별 대상 함수의 메타데이터는 식별 대상 함수의 식별자를 포함하지 않을 수 있다.
구체적으로, 핫스폿 중간 코드를 식별하는 장치(200)는 프로세서 및 메모리를 포함할 수 있고, 메모리는 코드를 저장하도록 구성되고, 메모리에 저장되는 코드를 판독하여, 프로세서는, 언어 가상 머신(100)이 식별 대상 함수를 호출할 때, 식별 대상 함수의 현재 핫니스 값을 핫니스 값 카운터(310)에 로딩하도록, 그리고 언어 가상 머신(100)이 식별 대상 함수를 리턴할 때, 메모리에, 핫니스 값 카운터(310)에서의 식별 대상 함수의 업데이트된 핫니스 값을 저장하도록 구성될 수 있다.
선택적으로, 프로세서는, 언어 가상 머신(100)이 식별 대상 함수를 호출할 때, 메모리에, 핫니스 값 카운터(310)에서의 호출 함수의 업데이트된 핫니스 값을 저장하도록- 식별 대상 함수는 호출 함수의 서브함수임, 즉, 호출 함수의 함수 본체는 식별 대상 함수에 대한 호출 명령어를 포함함 -; 그리고 언어 가상 머신(100)이 식별 대상 함수를 리턴할 때, 호출 함수의 현재 핫니스 값을 핫니스 값 카운터(310)에 로딩하도록 추가로 구성될 수 있다.
선택적으로, 프로세서는, 언어 가상 머신(100)이 식별 대상 함수를 호출할 때, 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스를 시작 어드레스 레지스터(304)에 로딩하도록, 그리고 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스를 종료 어드레스 레지스터(306)에 로딩하도록 추가로 구성될 수 있다.
선택적으로, 프로세서는, 언어 가상 머신(100)이 식별 대상 함수를 리턴할 때, 메모리에, 시작 어드레스 레지스터(304)에서의 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스를 저장하도록, 그리고, 메모리에, 종료 어드레스 레지스터(306)에서의 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스를 저장하도록 추가로 구성될 수 있다.
선택적으로, 프로세서는, 식별 대상 함수가 호출될 때, 메모리에, 시작 어드레스 레지스터(304)에서의 호출 함수의 로컬 명령어 공간의 시작 어드레스를 저장하도록, 메모리에, 종료 어드레스 레지스터(306)에서의 호출 함수의 로컬 명령어 공간의 종료 어드레스를 저장하도록 추가로 구성될 수 있다.
선택적으로, 프로세서는, 언어 가상 머신(100)이 식별 대상 함수를 리턴할 때, 호출 함수의 로컬 명령어 공간의 시작 어드레스를 시작 어드레스 레지스터(304)에 로딩하도록, 그리고, 호출 함수의 로컬 명령어 공간의 종료 어드레스를 종료 어드레스 레지스터(306)에 로딩하도록 추가로 구성될 수 있다.
구체적인 구현 동안, 전술한 연산들: 로딩 및 저장은 함수 호출 명령어를 수정하여 그리고 함수 리턴 명령어를 수정하여 구현될 수 있다. 어셈블리 명령어의 예에서는, 하나의 피연산자가 함수 호출 명령어에 추가될 수 있고, 추가되는 피연산자는 식별 대상 함수의 메타데이터의 어드레스, 예를 들어, 해당 함수의 메타데이터 포인터일 수 있다. 저장 공간의 세그먼트는 현재 실행되는 함수의 메타데이터 포인터를 저장하는 포인터 공간으로서 메모리에 설정될 수 있다는 점이 이해되어야 한다. 예를 들어, 이러한 저장 공간은 이에 제한되는 것은 아니지만 메타데이터 포인터를 저장하기 위해 메모리에 설정되는 포인터 스택 및 레지스터일 수 있다.
피연산자가 추가되는 함수 호출 명령어를 사용하여 식별 대상 함수가 호출되는 예에서, 추가되는 피연산자의 값이 미리 설정된 값(예를 들어, 0)이면, 피연산자가 추가되는 함수 호출 명령어는 종래 기술에서 함수 호출 명령어로서 사용된다. 추가되는 피연산자의 값이 미리 설정된 값이 아니면, 추가되는 피연산자는 식별 대상 함수의 메타데이터 포인터로서 사용되어, 이하의 연산들을 실행한다. 이들의 선택적인 연산들은, (1) 호출 함수의 메타데이터에 있고 식별 대상 함수의 핫니스 값을 저장하는 저장 공간에, 포인터 공간에서의 호출 함수의 메타데이터 포인터에 따라 핫니스 값 카운터(310)에서의 값을 저장하는 연산; (2) 포인터 공간에서의 호출 함수의 메타데이터 포인터를, 포인터 스택 내로, 푸싱(push)하는 연산- 구체적인 구현에서, 포인터 스택은 가상 머신 스택(124)에 수립될 수 있고 오직 메타데이터 포인터를 저장하도록 구성됨 -; (3) 식별 대상 함수의 메타데이터 포인터를 포인터 공간에 로딩하는 연산; (4) 식별 대상 함수의 메타데이터 포인터에 따라 식별 대상 함수의 핫니스 값을 핫니스 값 카운터(310)에 로딩하는 연산; (5) 식별 대상 함수의 메타데이터 포인터에 따라, 식별 대상 함수의 시작 어드레스를 시작 어드레스 레지스터(304)에 로딩하고, 식별 대상 함수의 종료 어드레스를 종료 어드레스 레지스터(306)에 로딩하는 연산을 포함한다. 이들의 필요한 연산들은, (1) 호출 함수의 리턴 어드레스를 스택 내료 푸싱하는 연산; (2) 식별 대상 함수의 실행 입구로 점프하는 연산을 포함한다.
구체적인 구현 동안, 어셈블리 명령어의 예에서, 하나의 피연산자가 함수 리턴 명령어에 추가될 수 있고, 추가되는 피연산자는, 식별자일 수 있고, 피연산자가 추가되는 대상 함수 리턴 명령어에게 이하의 연산들을 실행하라고 명령하는데 사용된다. 이들의 선택적인 연산들은, (1) 식별 대상 함수의 메타데이터에 있고 식별 대상 함수의 핫니스 값을 저장하는 저장 공간에, 포인터 공간에서의 식별 대상 함수의 메타데이터 포인터에 따라 핫니스 값 카운터(310)에서의 값을 저장하는 연산; (2) 포인터 스택으로부터 호출 함수의 메타데이터 포인터를 풀링하고, 호출 함수의 메타데이터 포인터를 포인터 공간에 로딩하는 연산; (3) 포인터 공간에서 호출 함수의 메타데이터 포인터에 따라 호출 함수의 핫니스 값을 핫니스 값 카운터(310)에 로딩하는 연산; (4) 포인터 공간에서의 호출 함수의 메타데이터 포인터에 따라, 호출 함수의 시작 어드레스를 시작 어드레스 레지스터(304)에 로딩하고, 호출 함수의 종료 어드레스를 종료 어드레스 레지스터(306)에 로딩하는 연산을 포함한다. 이들의 필요한 연산들은, (1) 호출 함수의 리턴 어드레스를 스택으로부터 풀링하고, 실행을 위해 호출 함수에 리턴하는 연산을 포함한다.
선택적으로, 프로세서는, 식별 대상 함수가 리턴될 때, 또는 식별 대상 함수가 리턴된 이후, 제2 결정 유닛(208)을 트리거하여 식별 대상 함수의 것이고 업데이트 유닛(206)에 의해 획득되는 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하는 액션을 수행하도록 추가로 구성될 수 있다.
선택적으로, 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상이라고 제2 결정 유닛(208)의 출력 결과가 표시한 이후, 저스트-인-타임 컴파일러(114)의 경량 컴파일러 또는 중량 컴파일러는 식별 대상 함수의 중간 코드를 식별 대상 함수의 로컬 코드로 컴파일할 수 있다.
선택적으로, 프로세서는, 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상이라고 제2 결정 유닛(208)의 출력 결과가 표시한 이후, 식별 대상 함수의 업데이트된 핫니스 값을 메모리에 저장하도록; 미리 설정된 기간 이전 식별 대상 함수의 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상일 때, 미리 설정된 기간 이전 식별 대상 함수의 핫니스 값을 메모리에서의 식별 대상 함수의 업데이트된 핫니스 값으로부터 감산하여 차이를 계산하도록- 미리 설정된 기간 이전 식별 대상 함수의 핫니스 값은 메모리에 저장됨 -; 그리고 차이가 미리 설정된 삭제 임계값 미만일 때, 식별 대상 함수의 로컬 코드를 메모리(예를 들어, 메모리에서의 코드 캐시)로부터 삭제하도록 구성된다.
식별 대상 함수의 로컬 코드를 메모리로부터 선택적으로 삭제하는 해결책은 컴파일에 의해 획득되는 로컬 코드의 실행 빈도를 실시간 모니터링하는 것을 목표로 한다. 구체적인 구현 동안, 각각의 함수의 메타데이터에 저장되는 각각의 함수의 핫니스 값은 포인터 스택에서의 포인터들을 횡단하여 명시된 간격으로 획득될 수 있고, 제2 결정 유닛(208)(또는 제2 결정 유닛의 것과 동일한 기능을 갖는 유닛)은 결정을 수행하여, 핫니스 값이 핫니스 임계값보다 큰 함수를 획득할 수 있다. 다음으로, 핫니스 값이 핫니스 임계값보다 큰 함수는 [method, count1] 형태로 링크된 리스트 1에 기입될 수 있다(또는 핫니스 값은 다른 방식으로 메모리에 저장됨)- method는 함수 정보이고, count1은 각각의 함수의 메타데이터에 저장되는 각각의 함수의 핫니스 값임 -. 또한, [method, count2]가 저장되는 다른 링크된 리스트 2가 존재한다- count2는 핫니스 값이 핫니스 임계값보다 큰 함수의 것이고 포인터 스택에서의 포인터들을 횡단하는 이전 시간에 획득되는 핫니스 값이다. 식별 대상 함수의 예에서, 식별 대상 함수의 count2가 존재할 때, 식별 대상 함수의 count1은 count2만큼 감산될 수 있다. 차이가 삭제 임계값 미만이면, 이는 식별 대상 함수가 이전 횡단으로부터 현재 횡단까지의 기간 내에 드물게 실행된다는 점을 의미한다. 식별 대상 함수의 로컬 코드는 메모리로부터 삭제될 수 있고, 최근에 자주 실행된 메소드를 위해 공간이 예약된다. 이러한 방식으로, 저장 공간 이용이 향상된다.
선택적으로, 삭제 연산의 다른 구현 방식에서, 핫스폿 중간 코드를 식별하는 장치(200)는 계산 유닛 및 삭제 유닛을 추가로 포함할 수 있다.
계산 유닛은, 식별 대상 함수의 것이고 업데이트 유닛(206)에 의해 획득되는 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상일 때, 미리 설정된 기간 이전 식별 대상 함수의 핫니스 값을 식별 대상 함수의 업데이트된 핫니스 값으로부터 감산하여 차이를 계산하도록- 미리 설정된 시간 이전 식별 대상 함수의 핫니스 값은 식별 대상 함수의 핫니스 임계값 이상임 - 구성된다.
계산 회로로서 사용될 때, 계산 유닛은 업데이트 유닛(206)에 접속되어 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정할 수 있거나, 또는 제2 결정 유닛(208)에 접속되어 결정 결과를 획득할 수 있다.
삭제 유닛은, 계산 유닛에 의해 획득되는 차이가 미리 설정된 삭제 임계값 미만일 때, 식별 대상 함수의 로컬 코드를 식별 대상 함수의 로컬 코드의 저장 공간(예를 들어, 코드 캐시)으로부터 삭제하도록 구성된다.
핫스폿 중간 코드를 식별하는 장치(200)에서의 유닛들(획득 유닛(202), 제1 결정 유닛(204), 업데이트 유닛(206), 또는 제2 결정 유닛(208))은 상이한 구현 방식들로 메모리 및 프로세서와의 차이 관계들을 갖는다는 점이 이해되어야 한다. 핫스폿 중간 코드를 식별하는 장치(200)에서 소프트웨어에 의해 구현되는 유닛은 메모리에 있을 수 있고, 프로세서는 메모리로부터 이러한 유닛을 판독하여 이러한 유닛의 기능을 구현한다. 핫스폿 중간 코드를 식별하는 장치(200)에서 하드웨어 회로를 사용하여 구현되는 유닛은 프로세서에 통합될 수 있거나, 또는 프로세서에 접속될 수 있다.
하드웨어 회로를 사용하여 핫스폿 중간 코드를 식별하는 장치(200)가 구현될 때 감산 연산은 합산기에 의해 구현될 수 있고, 따라서 본 발명의 이러한 실시예에서의 감산기들은 합산기들로 대체되어, 감산 연산을 구현할 수 있다는 점이 이해되어야 한다.
예를 들어, 도 3은 핫스폿 중간 코드를 식별하는 장치(200)의 하드웨어 회로 구현 방식이다. 본 발명의 이러한 실시예에서 핫스폿 중간 코드를 식별하는 장치(200)의 하드웨어 회로 구현 방식이 이에 제한되는 것은 아니고, 도 3에서의 유닛들의 접속 방식이 또한 이에 제한되는 것은 아니라는 점이 이해되어야 한다. 비교기(308)는 제2 비교기 및 제3 비교기를 포함하거나, 또는 비교기(308)는 제2 감산기 및 제3 감산기를 포함한다. 제2 감산기, 제3 감산기, 제2 비교기, 제3 비교기, 종료 어드레스 레지스터(306), 명령어 어드레스 레지스터(302), 시작 어드레스 레지스터(304), 핫니스 값 카운터(310), 임계값 레지스터(312) 및 감산기(314)의 내용은 위에 상세히 이미 설명되었고, 본 명세서에서 더 이상 설명되지 않는다.
도 4는 언어 가상 머신(100)에서 적용되는 핫스폿 중간 코드를 식별하는 방법의 개략적인 흐름도이다. 이러한 방법은 핫스폿 중간 코드를 식별하는 장치(200)에 의해 실행될 수 있고, 이러한 방법은 이하의 단계들을 포함한다.
S401. 언어 가상 머신(100)이 식별 대상 함수를 실행할 때, 명령어 카운터에서의 명령어 어드레스를 획득함.
S402. 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정함.
구체적으로, 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어인지 결정하는 선택적 구현 방식에서, 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있는지 결정될 수 있다. 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 식별 대상 함수의 로컬 명령어를 포함하고, 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 언어 가상 머신의 기능들을 구현하는데 사용되는 로컬 명령어를 포함하지 않는다. 식별 대상 함수의 로컬 명령어 공간은 로컬 명령어를 저장한다.
선택적으로, 식별 대상 함수의 중간 코드가 실행될 때, 언어 가상 머신(100)은 인터프리터(112)를 포함한다. 로컬 명령어 공간은 인터프리터(112)에 의한 해석에 의해 획득될 수 있는 로컬 명령어들을 저장하는데 사용되는 저장 공간일 수 있거나, 또는 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 인터프리터(112)에 의해 해석되는데 사용되는 중간 명령어들에 대응하는 로컬 명령어들을 포함할 수 있다. 인터프리터에 의해 해석되는데 사용되는 중간 명령어들에 대응하는 로컬 명령어들은 식별 대상 함수의 로컬 명령어를 포함한다.
선택적으로, 식별 대상 함수의 로컬 코드가 실행될 때, 언어 가상 머신(100)은 저스트-인-타임 컴파일러(114)를 포함한다. 로컬 명령어 공간은 식별 대상 함수의 로컬 코드를 저장하는데 사용될 수 있고, 식별 대상 함수의 로컬 명령어는 식별 대상 함수의 로컬 코드에서의 명령어이고, 식별 대상 함수의 로컬 코드는 저스트-인-타임 컴파일러(114)에 의한 컴파일에 의해 획득된다.
선택적으로, 로컬 명령어 공간은 어드레스가 연속되는 저장 공간이고, 로컬 명령어 공간의 어드레스 범위는 로컬 명령어 공간의 시작 어드레스 및 로컬 명령어 공간의 종료 어드레스에 의해 표시되고, 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스는 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이다. 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위내에 있는지 결정하는 것은, 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상인지, 및 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 미만인지 결정하는 것일 수 있고, 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 미만일 때, 이는 명령어 카운터에서의 명령어 어드레스가 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있음을 표시한다.
선택적으로, 명령어 카운터에서의 명령어 어드레스가 주기적으로 획득되어 식별 대상 함수의 핫니스 값을 업데이트할 수 있다.
S403. 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 식별 대상 함수의 로컬 명령어일 때, 식별 대상 함수의 현재 핫니스 값을 미리 설정된 값만큼 증가시켜, 식별 대상 함수의 핫니스 값을 업데이트함. 미리 설정된 값은 양의 수, 예를 들어, 양의 정수이다. 선택적으로, 증가되는 미리 설정된 값은 1일 수 있다.
S404. 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정하고, 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상일 때, 식별 대상 함수의 중간 코드를 핫스폿 중간 코드로서 사용함.
선택적으로, 식별 대상 함수의 중간 코드가 핫스폿 중간 코드로서 사용될 수 있고, 핫스폿 중간 코드는 저스트-인-타임 컴파일러(114)에 의해 식별 대상 함수의 로컬 코드로 컴파일된다.
선택적으로, 언어 가상 머신(100)이 식별 대상 함수를 리턴할 때, 또는 언어 가상 머신(100)이 식별 대상 함수를 리턴한 이후, 식별 대상 함수의 업데이트된 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상인지 결정된다.
선택적으로, 미리 설정된 기간 이전 식별 대상 함수의 핫니스 값이 식별 대상 함수의 핫니스 임계값 이상일 때, 미리 설정된 기간 이전 식별 대상 함수의 핫니스 값을 식별 대상 함수의 업데이트된 핫니스 값으로부터 감산하여 차이가 계산된다. 이러한 차이가 미리 설정된 삭제 임계값 미만일 때, 식별 대상 함수의 로컬 코드는 식별 대상 함수의 로컬 코드를 저장하는데 사용되는 저장 공간으로부터 삭제된다. 미리 설정된 기간 이전 식별 대상 함수의 핫니스 값은 순간 A에서의 식별 대상 함수의 핫니스 값으로서 이해될 수 있다는 점이 이해되어야 한다. 현재 순간은 B이고, 순간 A는 미리 설정된 기간만큼 순간 B보다 앞선다. 식별 대상 함수의 로컬 코드가 식별 대상 함수의 로컬 코드를 저장하는데 사용되는 저장 공간으로부터 삭제된 이후, 식별 대상 함수의 핫니스 값은 추가로 제로 아웃될 수 있다.
본 발명의 방법 실시예 및 장치 실시예는 동일한 개념으로부터 유도된다. 따라서, 구체적인 내용에 대해서는, 본 발명의 장치 실시예에서의 대응하는 컴포넌트들에 의해 수행되는 동작들의 설명을 참조한다. 상세 사항들이 본 명세서에 설명되지는 않는다.
도 5는 본 발명의 실시예에 따른 컴퓨터 디바이스(500)의 하드웨어의 개략적인 구조도이다. 도 5에 도시되는 바와 같이, 컴퓨터 디바이스(500)는 핫스폿 중간 코드를 식별하는 장치(200)의 구현 방식으로서 사용될 수 있고, 컴퓨터 디바이스(500)는, 프로세서(502), 메모리(504), 입력/출력 인터페이스(506), 통신 인터페이스(508), 및 버스(510)를 포함한다. 프로세서(502), 메모리(504), 입력/출력 인터페이스(506), 및 통신 인터페이스(508)는 버스(510)를 사용하여 서로에 대한 통신 접속을 구현한다.
프로세서(502)는 범용 중앙 처리 유닛(Central Processing Unit, CPU), 마이크로프로세서, 주문형 집적 회로(Application Specific Integrated Circuit, ASIC), 또는 하나 이상의 집적 회로를 사용하여 관련된 프로그램을 실행할 수 있어, 본 발명의 실시예들에서 제공되는 기술적 해결책들을 구현한다.
메모리(504)는 판독 전용 메모리(Read Only Memory, ROM), 정적 저장 디바이스, 동적 저장 디바이스, 또는 랜덤 액세스 메모리(Random Access Memory, RAM)일 수 있다. 메모리(504)는 운영 체제, 언어 가상 머신(100), 및 다른 애플리케이션 프로그램을 저장할 수 있다. 본 발명의 실시예들에서 제공되는 핫스폿 중간 코드를 식별하는 장치(200)에 포함되는 유닛들 및 컴포넌트들에 의해 실행될 필요가 있는 기능들이 소프트웨어 또는 펌웨어에 의해 구현되거나, 또는 본 발명의 실시예들에서 제공되는 전술한 방법이 실행될 때, 본 발명의 실시예들에서 제공되는 기술적 해결책들을 구현하는데 사용되는 프로그램 코드는 메모리(504)에 저장되고, 프로세서(502)는 본 발명의 실시예들에서 제공되는 핫스폿 중간 코드를 식별하는 장치(200)에 포함되는 유닛들 및 컴포넌트들에 의해 실행될 필요가 있는 동작들을 실행하거나, 또는 본 발명의 실시예들에서 제공되는 전술한 방법을 실행한다.
입력/출력 인터페이스(506)는, 입력되는 데이터 및 정보를 수신하도록, 그리고 연산 결과와 같은 데이터를 출력하도록 구성된다.
통신 인터페이스(508)는 예를 들어 이에 제한되는 것은 아니지만 송수신기인 송수신기 장치를 사용하여, 컴퓨터 디바이스(500)와 다른 디바이스 사이의 통신 또는 다른 통신 네트워크를 구현한다.
버스(510)는 컴퓨터 디바이스(500)의 컴포넌트들(예를 들어, 프로세서(602), 메모리(504), 입력/출력 인터페이스(506), 및 통신 인터페이스(508)) 사이에 정보를 전송하는 경로를 포함할 수 있다.
도 5에서는 컴퓨터 디바이스(500)에 대해 프로세서(502), 메모리(504), 입력/출력 인터페이스(506), 통신 인터페이스(508), 및 버스(510)만이 도시되지만, 구체적인 구현 동안, 해당 분야에서의 기술자는 컴퓨터 디바이스(500)가 정상 동작을 위해 요구되는 다른 컴포넌트, 예를 들어, 디스플레이 스크린을 추가로 포함한다는 점을 이해할 것이라는 점이 주목되어야 한다. 또한, 구체적인 요건에 따라, 해당 분야에서의 기술자는 컴퓨터 디바이스(500)가 다른 추가적 기능을 구현하기 위한 하드웨어 컴포넌트를 추가로 포함할 수 있다는 점을 이해할 것이다. 또한, 해당 분야에서의 기술자는 컴퓨터 디바이스(500)가 본 발명의 실시예들을 구현하는데 요구되는 컴포넌트만을 포함할 수 있고, 도 5에 도시되는 모든 컴포넌트들을 반드시 포함할 필요는 없다는 점을 이해할 것이다.
설명을 간단하게 하기 위해, 전술한 방법 실시예들은 일련의 액션들로서 표현된다는 점이 주목되어야 한다. 그러나, 해당 분야에서의 기술자는 본 발명이 설명된 액션 순서에 제한되는 것은 아니라는 점을 이해할 것이고, 그 이유는 본 발명에 따르면, 일부 단계들이 다른 순서들로 수행되거나 또는 동시에 수행될 수 있기 때문이다. 또한, 해당 분야에서의 기술자는 본 명세서에 관련되는 액션들 및 모듈들이 본 발명에 반드시 필수적인 것은 아니라는 점을 또한 이해할 것이다.
해당 분야에서의 통상의 기술자는 실시예들에서의 방법들의 프로세스들 중 일부 또는 전부가 관련 하드웨어에 명령하는 컴퓨터 프로그램에 의해 구현될 수 있다는 점을 이해할 수 있다. 이러한 프로그램은 컴퓨터 판독 가능 저장 매체에 저장될 수 있다. 프로그램이 실행될 때, 실시예들에서의 방법들의 프로세스들이 수행된다. 전술한 저장 매체는, 자기 디스크, 광 디스크, 판독 전용 메모리 (ROM, Read-Only Memory) 또는 랜덤 액세스 메모리(RAM, Random Access Memory)를 포함할 수 있다.
본 발명이 실시예들을 참조하여 본 명세서에 설명되었지만, 보호를 주장하는 본 발명의 구현 동안, 해당 분야에서의 기술자는 첨부 도면들, 개시된 내용, 및 첨부 청구항들을 참조하여 개시된 실시예들의 다른 변형들을 이해하고 구현할 수 있다. 청구항들에서 "포함하는"(comprising)이라는 단어가 다른 컴포넌트 또는 단계를 배제하는 것은 아니고, 단수 표현("a" 또는 "one")이 "다수(multiple)"의 가능성을 배제하는 것은 아니다. 단일 프로세서 또는 다른 유닛이 청구항들에서 나열되는 여러 기능들을 구현할 수 있다. 일부 방안들이 서로 상이한 종속 청구항들에 기록되지만, 이러한 방안들이 보다 우수한 효과를 생성하도록 조합될 수 없다는 점을 이러한 것이 의미하는 것은 아니다. 컴퓨터 프로그램은 적절한 매체, 예를 들어, 광 저장 매체 또는 고체 상태 저장 매체에 저장/배포되어, 다른 하드웨어와 함께 하드웨어의 일부로서 제공되거나 역할을 할 수 있거나, 또는 인터넷 또는 다른 유선 또는 무선 통신 시스템과 같은 다른 배포 형태를 사용할 수 있다.
본 명세서에서는 본 발명의 원리와 구현 방식들을 설명하도록 구체적인 예들이 사용된다. 전술한 실시예들의 설명들은 본 발명의 방법과 아이디어를 이해하는데 도움이 되려고 의되되는 것에 불과하다. 또한, 구현 방식들 및 적용 범위에 대해, 본 발명의 아이디어에 따라 해당 분야에서의 통상의 기술자에 의해 수정들이 이루어질 수 있다. 따라서, 본 명세서는 본 발명에 대한 제한으로서 해석되어서는 안 된다.
Claims (22)
- 핫스폿 중간 코드를 식별하는 방법으로서,
상기 방법은,
언어 가상 머신이 식별 대상 함수를 실행할 때, 명령어 카운터에서의 명령어 어드레스를 획득하는 단계, 및 상기 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 상기 식별 대상 함수의 로컬 명령어인지 결정하는 단계;
상기 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 상기 식별 대상 함수의 로컬 명령어일 때, 상기 식별 대상 함수의 현재 핫니스 값을 미리 설정된 값만큼 증가시켜, 상기 식별 대상 함수의 핫니스 값을 업데이트하는 단계; 및
상기 식별 대상 함수의 업데이트된 핫니스 값이 상기 식별 대상 함수의 핫니스 임계값 이상인지 결정하는 단계, 및 상기 식별 대상 함수의 업데이트된 핫니스 값이 상기 식별 대상 함수의 핫니스 임계값 이상일 때, 상기 식별 대상 함수의 중간 코드를 핫스폿 중간 코드로서 사용하는 단계
를 포함하는 방법. - 제1항에 있어서,
상기 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 상기 식별 대상 함수의 로컬 명령어인지 결정하는 단계는,
상기 명령어 카운터에서의 명령어 어드레스가 상기 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있는지 결정하는 단계- 상기 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 상기 식별 대상 함수의 로컬 명령어를 포함하고, 상기 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 상기 언어 가상 머신의 함수들을 구현하는데 사용되는 로컬 명령어를 포함하지 않음 -를 포함하는 방법. - 제2항에 있어서,
상기 언어 가상 머신은 인터프리터를 포함하고, 상기 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 상기 인터프리터에 의해 해석되는데 사용되는 중간 명령어들에 대응하는 로컬 명령어들을 포함하고, 상기 인터프리터에 의해 해석되는데 사용되는 중간 명령어들에 대응하는 로컬 명령어들은 상기 식별 대상 함수의 로컬 명령어를 포함하는 방법. - 제2항에 있어서,
상기 언어 가상 머신은 저스트-인-타임 컴파일러를 포함하고, 상기 식별 대상 함수의 로컬 명령어 공간은 상기 식별 대상 함수의 로컬 코드를 저장하는데 사용되고, 상기 식별 대상 함수의 로컬 명령어는 상기 식별 대상 함수의 로컬 코드에서의 명령어이고, 상기 식별 대상 함수의 로컬 코드는 상기 저스트-인-타임 컴파일러에 의한 컴파일에 의해 획득되는 방법. - 제2항 내지 제4항 중 어느 한 항에 있어서,
상기 식별 대상 함수의 로컬 명령어 공간은 어드레스들이 연속되는 저장 공간이고, 상기 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위는 상기 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 및 상기 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스에 의해 표시되고, 상기 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스는 상기 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고, 상기 명령어 카운터에서의 명령어 어드레스가 상기 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있는지 결정하는 단계는,
상기 명령어 카운터에서의 명령어 어드레스가 상기 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상인지, 및 상기 명령어 카운터에서의 명령어 어드레스가 상기 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하인지 결정하는 단계를 포함하고;
상기 명령어 카운터에서의 명령어 어드레스가 상기 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고 상기 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하일 때, 이는 상기 명령어 카운터에서의 명령어 어드레스가 상기 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있다는 점을 표시하는 방법. - 제1항 내지 제5항 중 어느 한 항에 있어서,
명령어 카운터에서의 명령어 어드레스를 획득하는 상기 단계는, 상기 명령어 카운터에서의 명령어 어드레스를 주기적으로 획득하는 단계를 포함하고;
상기 식별 대상 함수의 업데이트된 핫니스 값이 상기 식별 대상 함수의 핫니스 임계값 이상인지 결정하는 상기 단계는,
상기 언어 가상 머신이 상기 식별 대상 함수를 리턴할 때, 또는 상기 언어 가상 머신이 상기 식별 대상 함수를 리턴한 이후, 상기 식별 대상 함수의 업데이트된 핫니스 값이 상기 식별 대상 함수의 핫니스 임계값 이상인지 결정하는 단계를 포함하는 방법. - 제1항 내지 제6항 중 어느 한 항에 있어서,
상기 식별 대상 함수의 업데이트된 핫니스 값이 상기 식별 대상 함수의 핫니스 임계값 이상이라고 결정된 이후, 상기 방법은,
미리 설정된 기간 이전 상기 식별 대상 함수의 핫니스 값이 상기 식별 대상 함수의 핫니스 임계값 이상일 때, 상기 미리 설정된 기간 이전 상기 식별 대상 함수의 핫니스 값을 상기 식별 대상 함수의 업데이트된 핫니스 값으로부터 감산하여 차이를 계산하는 단계; 및
상기 차이가 미리 설정된 삭제 임계값 미만일 때, 상기 식별 대상 함수의 로컬 코드를 저장하는데 사용되는 저장 공간으로부터 상기 식별 대상 함수의 로컬 코드를 삭제하는 단계
를 추가로 포함하는 방법. - 핫스폿 중간 코드를 식별하는 장치로서,
상기 장치는,
언어 가상 머신이 식별 대상 함수를 실행할 때, 명령어 카운터에서의 명령어 어드레스를 획득하도록 구성되는 획득 회로;
상기 명령어 카운터에 있고 상기 획득 유닛에 의해 획득되는 명령어 어드레스에 따라, 상기 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 상기 식별 대상 함수의 로컬 명령어인지 결정하도록 구성되는 제1 결정 회로;
상기 명령어 카운터에서의 명령어 어드레스에 대응하는 로컬 명령어가 상기 식별 대상 함수의 로컬 명령어라고 상기 제1 결정 유닛이 결정할 때, 상기 식별 대상 함수의 현재 핫니스 값을 미리 설정된 값만큼 증가시켜, 상기 식별 대상 함수의 핫니스 값을 업데이트하도록 구성되는 업데이트 회로; 및
상기 식별 대상 함수의 것이고 상기 업데이트 유닛에 의해 획득되는 업데이트된 핫니스 값이 상기 식별 대상 함수의 핫니스 임계값 이상인지 결정하도록, 그리고 상기 식별 대상 함수의 업데이트된 핫니스 값이 상기 식별 대상 함수의 핫니스 임계값보다 클 때, 상기 식별 대상 함수의 중간 코드를 핫스폿 중간 코드로서 사용하도록 구성되는 제2 결정 회로
를 포함하는 장치. - 제8항에 있어서,
상기 제1 결정 회로는,
상기 명령어 카운터에서의 명령어 어드레스가 상기 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있는지 결정하도록- 상기 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 상기 식별 대상 함수의 로컬 명령어를 포함하고, 상기 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 상기 언어 가상 머신의 함수들을 구현하는데 사용되는 로컬 명령어를 포함하지 않음 - 구성되는 장치. - 제9항에 있어서,
상기 언어 가상 머신은 인터프리터를 포함하고, 상기 식별 대상 함수의 로컬 명령어 공간에서의 로컬 명령어들은 상기 인터프리터에 의해 해석되는데 사용되는 중간 명령어들에 대응하는 로컬 명령어들을 포함하고, 상기 인터프리터에 의해 해석되는데 사용되는 중간 명령어들에 대응하는 로컬 명령어들은 상기 식별 대상 함수의 로컬 명령어를 포함하는 장치. - 제9항에 있어서,
상기 언어 가상 머신은 저스트-인-타임 컴파일러를 포함하고, 상기 식별 대상 함수의 로컬 명령어 공간은 상기 식별 대상 함수의 로컬 코드를 저장하는데 사용되고, 상기 식별 대상 함수의 로컬 명령어는 상기 식별 대상 함수의 로컬 코드에서의 명령어이고, 상기 식별 대상 함수의 로컬 코드는 컴파일에 의해 상기 저스트-인-타임 컴파일러에 의해 획득되는 장치. - 제8항 내지 제11항 중 어느 한 항에 있어서,
상기 업데이트 회로는 핫니스 값 카운터를 포함하고, 상기 핫니스 값 카운터는 상기 핫니스 값 카운터에서의 상기 식별 대상 함수의 핫니스 값을, 1만큼, 증가시키도록 구성되는 장치. - 제12항에 있어서,
상기 제2 결정 회로는 감산기 및 상기 식별 대상 함수의 핫니스 임계값을 저장하도록 구성되는 임계값 레지스터를 포함하고, 상기 감산기는 상기 임계값 레지스터에 접속되고, 상기 감산기는 상기 핫니스 값 카운터에 접속되고, 상기 감산기는 상기 핫니스 값 카운터에서의 상기 식별 대상 함수의 핫니스 값으로부터 상기 임계값 레지스터에서의 상기 식별 대상 함수의 핫니스 임계값을 감산하여 차이를 획득하도록 구성되고, 상기 차이가 0보다 클 때, 상기 식별 대상 함수의 업데이트된 핫니스 값은 상기 식별 대상 함수의 핫니스 임계값 이상이라는 점을 표시하는 장치. - 제12항에 있어서,
상기 제2 결정 회로는 제1 비교기 및 상기 식별 대상 함수의 핫니스 임계값을 저장하도록 구성되는 임계값 레지스터를 포함하고, 상기 제1 비교기는 상기 임계값 레지스터에 접속되고, 상기 제1 비교기는 상기 핫니스 값 카운터에 접속되고, 상기 제1 비교기는 상기 핫니스 값 카운터에서의 상기 식별 대상 함수의 업데이트된 핫니스 값이 상기 임계값 레지스터에서의 상기 식별 대상 함수의 핫니스 임계값 이상인지 결정하도록 구성되는 장치. - 제13항 또는 제14항에 있어서,
상기 장치는 프로세서 및 메모리를 추가로 포함하고; 상기 메모리는 코드를 저장하도록 구성되고; 상기 메모리에 저장되는 상기 코드를 판독하여, 상기 프로세서는,
상기 언어 가상 머신이 상기 식별 대상 함수를 호출할 때, 상기 식별 대상 함수의 현재 핫니스 값을 상기 핫니스 값 카운터에 로딩하도록; 그리고
상기 언어 가상 머신이 상기 식별 대상 함수를 리턴할 때, 상기 메모리에, 상기 핫니스 값 카운터에서의 상기 식별 대상 함수의 업데이트된 핫니스 값을 저장하도록
구성되는 장치. - 제15항에 있어서,
상기 프로세서는,
상기 언어 가상 머신이 상기 식별 대상 함수를 호출할 때, 상기 메모리에, 상기 핫니스 값 카운터에서의 호출 함수의 업데이트된 핫니스 값을 저장하도록- 상기 식별 대상 함수는 상기 호출 함수의 서브함수임 -; 그리고
상기 언어 가상 머신이 상기 식별 대상 함수를 리턴할 때, 상기 호출 함수의 현재 핫니스 값을 상기 핫니스 값 카운터에 로딩하도록
추가로 구성되는 장치. - 제9항 내지 제16항 중 어느 한 항에 있어서,
상기 획득 회로는 상기 명령어 카운터에 접속되는 명령어 어드레스 레지스터를 포함하고, 상기 명령어 어드레스 레지스터는, 트리거 레벨을 수신하여, 상기 명령어 카운터에서의 명령어 어드레스를 획득하는 액션을 트리거하고, 상기 명령어 어드레스 레지스터는 상기 명령어 카운터에서의 명령어 어드레스를 저장하도록 추가로 구성되는 장치. - 제17항에 있어서,
상기 식별 대상 함수의 로컬 명령어 공간은 어드레스들이 연속되는 저장 공간이고, 상기 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위는 상기 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 및 상기 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스에 의해 표시되고, 상기 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스는 상기 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고;
상기 제1 결정 회로는, 상기 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스를 저장하도록 구성되는 시작 어드레스 레지스터, 상기 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스를 저장하도록 구성되는 종료 어드레스 레지스터, 제3 비교기, 및 제2 비교기를 포함하고- 상기 제3 비교기는 상기 명령어 어드레스 레지스터에 접속되고, 상기 제3 비교기는 상기 시작 어드레스 레지스터에 접속되고, 상기 제3 비교기는, 상기 명령어 카운터에 있고 상기 명령어 어드레스 레지스터에 저장되는 명령어 어드레스가 상기 시작 어드레스 레지스터에서의 상기 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상인지 비교하도록 구성됨 -;
상기 제2 비교기는 상기 명령어 어드레스 레지스터에 접속되고, 상기 제2 비교기는 상기 종료 어드레스 레지스터에 접속되고, 상기 제2 비교기는, 상기 명령어 카운터에 있고 상기 명령어 어드레스 레지스터에 저장되는 명령어 어드레스가 상기 종료 어드레스 레지스터에서의 상기 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하인지 비교하도록 구성되고; 상기 명령어 카운터에서의 명령어 어드레스가 상기 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스 이상이고 상기 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스 이하일 때, 이는 상기 명령어 카운터에서의 명령어 어드레스가 상기 식별 대상 함수의 로컬 명령어 공간의 어드레스 범위 내에 있다는 점을 표시하는 장치. - 제18항에 있어서,
상기 장치는 프로세서 및 메모리를 포함하고; 상기 메모리는 코드를 저장하도록 구성되고; 상기 메모리에 저장되는 상기 코드를 판독하여, 상기 프로세서는,
상기 언어 가상 머신이 상기 식별 대상 함수를 호출할 때, 상기 식별 대상 함수의 로컬 명령어 공간의 시작 어드레스를 시작 어드레스 레지스터에 로딩하도록, 그리고 상기 식별 대상 함수의 로컬 명령어 공간의 종료 어드레스를 상기 종료 어드레스 레지스터에 로딩하도록 구성되는 장치. - 제19항에 따른 언어 가상 머신으로서,
상기 프로세서는,
상기 언어 가상 머신이 상기 식별 대상 함수를 리턴할 때, 상기 호출 함수의 로컬 명령어 공간의 시작 어드레스를 상기 시작 어드레스 레지스터에 로딩하도록, 그리고 상기 호출 함수의 로컬 명령어 공간의 종료 어드레스를 상기 종료 어드레스 레지스터에 로딩하도록- 상기 식별 대상 함수는 상기 호출 함수의 서브함수임 - 구성되는 언어 가상 머신. - 제8항 내지 제20항 중 어느 한 항에 따른 언어 가상 머신으로서,
상기 획득 회로는, 주기적인 트리거 레벨을 수신하여, 상기 명령어 카운터에서의 명령어 어드레스를 획득하는 액션을 주기적으로 트리거하도록 구성되고;
상기 장치는 프로세서 및 메모리를 포함하고; 상기 메모리는 코드를 저장하도록 구성되고; 상기 메모리에 저장되는 상기 코드를 판독하여, 상기 프로세서는,
상기 언어 가상 머신이 상기 식별 대상 함수를 리턴할 때, 또는 상기 언어 가상 머신이 상기 식별 대상 함수를 리턴한 이후, 상기 제2 결정 회로를 트리거하여, 상기 식별 대상 함수의 것이고 상기 업데이트 회로에 의해 획득되는 업데이트된 핫니스 값이 상기 식별 대상 함수의 핫니스 임계값 이상인지 결정하는 액션을 수행하도록 구성되는 언어 가상 머신. - 제8항 내지 제21항 중 어느 한 항에 있어서,
상기 장치는 프로세서 및 메모리를 포함하고; 상기 메모리는 코드를 저장하도록 구성되고; 상기 메모리에 저장되는 상기 코드를 판독하여, 상기 프로세서는,
상기 식별 대상 함수의 업데이트된 핫니스 값이 상기 식별 대상 함수의 핫니스 임계값 이상이라고 상기 제2 결정 회로가 결정한 이후, 상기 식별 대상 함수의 업데이트된 핫니스 값을 상기 메모리에 저장하도록;
미리 설정된 기간 이전 상기 식별 대상 함수의 핫니스 값이 상기 식별 대상 함수의 핫니스 임계값 이상일 때, 상기 미리 설정된 기간 이전 상기 식별 대상 함수의 핫니스 값을 상기 메모리에서의 상기 식별 대상 함수의 업데이트된 핫니스 값으로부터 감산하여 차이를 계산하도록- 상기 미리 설정된 기간 이전 상기 식별 대상 함수의 핫니스 값은 상기 메모리에 저장됨 -; 그리고
상기 차이가 미리 설정된 삭제 임계값 미만일 때, 상기 식별 대상 함수의 로컬 코드를 상기 메모리로부터 삭제하도록
구성되는 장치.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510872247.7 | 2015-12-02 | ||
CN201510872247.7A CN105511942B (zh) | 2015-12-02 | 2015-12-02 | 语言虚拟机中热点中间代码的识别方法以及装置 |
PCT/CN2016/096068 WO2017092409A1 (zh) | 2015-12-02 | 2016-08-19 | 语言虚拟机中热点中间代码的识别方法以及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20180088706A true KR20180088706A (ko) | 2018-08-06 |
KR102112081B1 KR102112081B1 (ko) | 2020-05-18 |
Family
ID=55719948
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020187018366A KR102112081B1 (ko) | 2015-12-02 | 2016-08-19 | 언어 가상 머신에서 고-사용 중간 코드를 식별하는 방법 및 디바이스 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10871976B2 (ko) |
EP (1) | EP3379412A4 (ko) |
KR (1) | KR102112081B1 (ko) |
CN (1) | CN105511942B (ko) |
WO (1) | WO2017092409A1 (ko) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105511942B (zh) * | 2015-12-02 | 2019-02-19 | 华为技术有限公司 | 语言虚拟机中热点中间代码的识别方法以及装置 |
CN109426503B (zh) * | 2017-07-21 | 2022-05-31 | 华为技术有限公司 | 提供仿真激励的方法及装置 |
CN109710396B (zh) * | 2017-10-26 | 2023-08-22 | 华为技术有限公司 | 一种信息采集及内存释放的方法及装置 |
CN108415719B (zh) * | 2018-03-29 | 2019-03-19 | 网易(杭州)网络有限公司 | 代码热更新方法和装置、存储介质、处理器及终端 |
CN108470072B (zh) * | 2018-03-30 | 2019-07-09 | 迅讯科技(北京)有限公司 | 一种查询编译方法和装置 |
US10802854B2 (en) * | 2019-08-30 | 2020-10-13 | Alibaba Group Holding Limited | Method and apparatus for interpreting bytecode instruction stream |
CN111258557B (zh) * | 2020-01-16 | 2023-08-18 | Oppo(重庆)智能科技有限公司 | 代码处理方法、装置、电子设备及计算机可读介质 |
US11115494B1 (en) * | 2020-02-26 | 2021-09-07 | International Business Machines Corporation | Profile clustering for homogenous instance analysis |
CN111880800B (zh) * | 2020-06-19 | 2023-10-31 | 无锡融卡科技有限公司 | 应用下载方法与应用下载系统 |
CN112068926A (zh) * | 2020-07-31 | 2020-12-11 | 中国科学院信息工程研究所 | 一种局域网内虚拟机的识别方法 |
CN113872948A (zh) * | 2020-08-31 | 2021-12-31 | 支付宝(杭州)信息技术有限公司 | 一种执行智能合约的方法、区块链节点和节点设备 |
CN112199116B (zh) * | 2020-10-16 | 2023-08-11 | 常熟理工学院 | 操作数栈寄存器识别方法、装置、设备及存储介质 |
CN115563015B (zh) * | 2022-11-09 | 2023-07-07 | 科东(广州)软件科技有限公司 | 一种代码热度统计方法、装置、设备和存储介质 |
CN116342541B (zh) * | 2023-03-29 | 2024-03-22 | 中国矿业大学 | 一种基于相邻图像孔隙融合重构的岩土体渗透率计算方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6530075B1 (en) * | 1998-12-03 | 2003-03-04 | International Business Machines Corporation | JIT/compiler Java language extensions to enable field performance and serviceability |
KR20040034601A (ko) * | 2001-04-23 | 2004-04-28 | 아트멜 코포레이숀 | 바이트 컴파일된 자바 코드를 실행하는 마이크로 프로세서 |
JP2005251208A (ja) * | 2004-03-05 | 2005-09-15 | Sun Microsyst Inc | バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置 |
KR100943887B1 (ko) * | 2008-02-05 | 2010-02-24 | 재단법인서울대학교산학협력재단 | 핫스팟 메소드의 동적 컴파일을 위해 수행 시간을 추정하는방법 |
KR20140114618A (ko) * | 2013-03-19 | 2014-09-29 | 삼성전자주식회사 | 저장 장치 내 할당 촉진을 위한 데이터 분석 방법 및 장치 |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5394537A (en) * | 1989-12-13 | 1995-02-28 | Texas Instruments Incorporated | Adaptive page placement memory management system |
GB2358261B (en) * | 2000-01-17 | 2004-06-09 | Advanced Risc Mach Ltd | Data processing with native and interpreted program instruction words |
SE0002440D0 (sv) * | 2000-06-28 | 2000-06-28 | Virtutech Ab | Interpreter |
US7873814B1 (en) * | 2000-12-22 | 2011-01-18 | Lsi Corporation | Microcode based hardware translator to support a multitude of processors |
US7350200B2 (en) * | 2001-03-29 | 2008-03-25 | Intel Corporation | Method and system of controlling dynamically compiled native code size |
EP1308838A3 (en) * | 2001-10-31 | 2007-12-19 | Aplix Corporation | Intermediate code preprocessing apparatus, intermediate code execution apparatus, intermediate code execution system, and computer program product for preprocessing or executing intermediate code |
US20040088690A1 (en) * | 2002-08-27 | 2004-05-06 | Hayim Shaul | Method for accelerating a computer application by recompilation and hardware customization |
US7150012B2 (en) * | 2002-10-15 | 2006-12-12 | Nokia Corporation | Method and apparatus for accelerating program execution in platform-independent virtual machines |
US7197573B1 (en) * | 2002-11-18 | 2007-03-27 | Packet Design, Inc. | System and method for identifying addresses to modify and the effects thereof |
US7765527B2 (en) * | 2005-09-29 | 2010-07-27 | International Business Machines Corporation | Per thread buffering for storing profiling data |
CN100339831C (zh) * | 2005-12-14 | 2007-09-26 | 浙江大学 | 应用于Java操作系统中虚拟机的编译体系实现方法 |
US9009688B2 (en) * | 2005-12-30 | 2015-04-14 | Intel Corporation | Type checking for object-oriented programming languages |
US8225291B2 (en) * | 2008-01-04 | 2012-07-17 | International Business Machines Corporation | Automated detection of application performance bottlenecks |
US8281296B2 (en) * | 2008-08-12 | 2012-10-02 | Oracle America, Inc. | Cross-ISA inlining in a system virtual machine |
US8307353B2 (en) * | 2008-08-12 | 2012-11-06 | Oracle America, Inc. | Cross-domain inlining in a system virtual machine |
CN102231130B (zh) * | 2010-01-11 | 2015-06-17 | 国际商业机器公司 | 计算机系统性能分析方法和装置 |
CN101963907A (zh) | 2010-10-14 | 2011-02-02 | 中国科学技术大学苏州研究院 | 一种计算机程序热点的动态剖析机制 |
US8756581B2 (en) * | 2011-02-03 | 2014-06-17 | International Business Machines Corporation | Adaptive next-executing-cycle trace selection for trace-driven code optimizers |
CN103294517B (zh) * | 2012-02-22 | 2018-05-11 | 国际商业机器公司 | 堆栈溢出保护装置、堆栈保护方法、相关编译器和计算装置 |
US10114728B2 (en) | 2013-04-11 | 2018-10-30 | Nec Corporation | Dynamic function-level hardware performance profiling for application performance analysis |
US9372773B2 (en) | 2013-06-12 | 2016-06-21 | Advanced Micro Devices, Inc. | User-level hardware branch records |
EP3014423B1 (en) * | 2013-06-28 | 2018-03-07 | Intel Corporation | Binary translation for multi-processor and multi-core platforms |
CN103399780B (zh) * | 2013-07-03 | 2016-08-17 | 清华大学 | 一种基于虚拟机技术和动态符号执行的整数溢出检测方法 |
CN103473168B (zh) | 2013-09-12 | 2016-05-04 | 中国科学院声学研究所 | 一种热点程序的统计方法 |
US9519466B2 (en) * | 2013-12-20 | 2016-12-13 | Oracle International Corporation | Executable code for constrained computing environments |
CN103729235A (zh) | 2013-12-24 | 2014-04-16 | 华为技术有限公司 | Java虚拟机的编译方法和Java虚拟机 |
EP3200083B1 (en) * | 2014-12-23 | 2019-03-13 | Huawei Technologies Co. Ltd. | Resource scheduling method and related apparatus |
CN104657496B (zh) * | 2015-03-09 | 2018-08-14 | 杭州朗和科技有限公司 | 一种计算信息热度值的方法和设备 |
CN105511942B (zh) * | 2015-12-02 | 2019-02-19 | 华为技术有限公司 | 语言虚拟机中热点中间代码的识别方法以及装置 |
CN105589729A (zh) | 2015-12-28 | 2016-05-18 | 北京锐安科技有限公司 | 一种基于嵌入式虚拟机的动态编译的方法及装置 |
-
2015
- 2015-12-02 CN CN201510872247.7A patent/CN105511942B/zh active Active
-
2016
- 2016-08-19 KR KR1020187018366A patent/KR102112081B1/ko active IP Right Grant
- 2016-08-19 WO PCT/CN2016/096068 patent/WO2017092409A1/zh active Application Filing
- 2016-08-19 EP EP16869720.9A patent/EP3379412A4/en not_active Ceased
-
2018
- 2018-06-01 US US15/995,555 patent/US10871976B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6530075B1 (en) * | 1998-12-03 | 2003-03-04 | International Business Machines Corporation | JIT/compiler Java language extensions to enable field performance and serviceability |
KR20040034601A (ko) * | 2001-04-23 | 2004-04-28 | 아트멜 코포레이숀 | 바이트 컴파일된 자바 코드를 실행하는 마이크로 프로세서 |
JP2005251208A (ja) * | 2004-03-05 | 2005-09-15 | Sun Microsyst Inc | バーチャルマシン内でコンパイルされたメソッドを実行する頻度を決定する方法と装置 |
KR100943887B1 (ko) * | 2008-02-05 | 2010-02-24 | 재단법인서울대학교산학협력재단 | 핫스팟 메소드의 동적 컴파일을 위해 수행 시간을 추정하는방법 |
KR20140114618A (ko) * | 2013-03-19 | 2014-09-29 | 삼성전자주식회사 | 저장 장치 내 할당 촉진을 위한 데이터 분석 방법 및 장치 |
Also Published As
Publication number | Publication date |
---|---|
EP3379412A4 (en) | 2019-01-16 |
CN105511942A (zh) | 2016-04-20 |
WO2017092409A1 (zh) | 2017-06-08 |
US10871976B2 (en) | 2020-12-22 |
KR102112081B1 (ko) | 2020-05-18 |
CN105511942B (zh) | 2019-02-19 |
US20180276015A1 (en) | 2018-09-27 |
EP3379412A1 (en) | 2018-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20180088706A (ko) | 언어 가상 머신에서 고-사용 중간 코드를 식별하는 방법 및 디바이스 | |
US10324741B2 (en) | Speeding up dynamic language execution on a virtual machine with type speculation | |
KR101697719B1 (ko) | 경량 서비스 기반의 동적 바이너리 재작성기 프레임워크 | |
US8959495B2 (en) | Unifying static and dynamic compiler optimizations in source-code bases | |
US7290254B2 (en) | Combining compilation and instruction set translation | |
US10922081B2 (en) | Conditional branch frame barrier | |
US8856761B2 (en) | Instruction processing method, instruction processing apparatus, and instruction processing program | |
JP2003140909A (ja) | Jitコンパイラを備えた仮想計算機 | |
JP7212793B2 (ja) | 関数ジャンプを実現するための方法、装置及びコンピュータ記憶媒体 | |
US9189393B2 (en) | Computer, control method of computer, and recording medium | |
KR20110136749A (ko) | 효율적인 동적 이진 변환을 위한 레지스터 매핑 방법, 시스템 및 컴퓨터 판독가능 저장 매체 | |
JPH10111818A (ja) | バーストプロファイリング方法およびシステム | |
WO2021169127A1 (zh) | 虚拟机升级方法、装置、设备及存储介质 | |
CN110609689A (zh) | 一种应用的安装运行方法及装置 | |
JP2020500368A (ja) | データプリフェッチング方法、装置、およびシステム | |
CN108628678B (zh) | 内存参数的确定方法、装置及设备 | |
CN116501387B (zh) | 一种指令跳转方法、装置、电子设备及可读存储介质 | |
US20160011889A1 (en) | Simulation method and storage medium | |
US10802854B2 (en) | Method and apparatus for interpreting bytecode instruction stream | |
CN106325964B (zh) | 动态编译调度方法及装置 | |
KR101088516B1 (ko) | 수행 중 선행 컴파일링을 이용한 내장형 시스템을 위한 자바 컴파일링 방법 | |
US9417872B2 (en) | Recording medium storing address management program, address management method, and apparatus | |
JP3807860B2 (ja) | コンパイル方法および装置、並びにメソッド活動度計算方法および装置 | |
CN107368347B (zh) | 待编译代码的过滤方法和装置 | |
CN105786586B (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 |