RU2011114807A - Кэширование генерируемого во время выполнения кода - Google Patents

Кэширование генерируемого во время выполнения кода Download PDF

Info

Publication number
RU2011114807A
RU2011114807A RU2011114807/08A RU2011114807A RU2011114807A RU 2011114807 A RU2011114807 A RU 2011114807A RU 2011114807/08 A RU2011114807/08 A RU 2011114807/08A RU 2011114807 A RU2011114807 A RU 2011114807A RU 2011114807 A RU2011114807 A RU 2011114807A
Authority
RU
Russia
Prior art keywords
code
cache
runtime
generated
generation
Prior art date
Application number
RU2011114807/08A
Other languages
English (en)
Other versions
RU2520344C2 (ru
Inventor
Натан ХЕРРИНГ (US)
Натан ХЕРРИНГ
Дэвид К. РАЙТОН (US)
Дэвид К. РАЙТОН
Original Assignee
Майкрософт Корпорейшн (Us)
Майкрософт Корпорейшн
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 Майкрософт Корпорейшн (Us), Майкрософт Корпорейшн filed Critical Майкрософт Корпорейшн (Us)
Publication of RU2011114807A publication Critical patent/RU2011114807A/ru
Application granted granted Critical
Publication of RU2520344C2 publication Critical patent/RU2520344C2/ru

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/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

Abstract

1. Система (100), которая кэширует генерируемый во время выполнения код, содержащая: ! компонент (120), выполняющийся в среде управляемого кода на компьютере, при этом компонент кэширует объект (116, 111) в первом кэше (109, 108) или во втором кэше (109, 118), при этом кэшируемый объект (116, 111) содержит генерируемый во время выполнения код, при этом генерируемый во время выполнения код генерируется динамически генерирующим код объектом, причем динамически генерирующий код объект не изменяет глобальное состояние, в которой кэшируемый объект (116, 111) извлекается из первого кэша (109, 118) или второго кэша (109, 118) при последующих выполнениях кэшированного объекта (116, 111), пропуская, по меньшей мере, одну фазу генерации кода, при этом пропущенная, по меньшей мере, одна фаза генерации кода содержит генерацию промежуточного байт-кода или генерацию собственного двоичного кода. ! 2. Система по п.1, в которой первый кэш содержит кэш, который хранит промежуточный байт-код, представляющий генерируемый во время выполнения код, и в которой, по меньшей мере, одна пропускаемая фаза генерации кода содержит генерацию промежуточного байт-кода для генерируемого во время выполнения кода. ! 3. Система по п.1, в которой второй кэш содержит кэш, который хранит собственный двоичный код, и в которой, по меньшей мере, одна пропущенная фаза генерации кода содержит генерацию собственного двоичного кода для генерируемого во время выполнения кода. ! 4. Система по п.1, в которой первый кэш является кэшем исходной сборки и в которой, по меньшей мере, одна пропущенная фаза генерации содержит генерацию промежуточного байт-кода для генерируемого во время выполнения кода, или гене�

Claims (15)

1. Система (100), которая кэширует генерируемый во время выполнения код, содержащая:
компонент (120), выполняющийся в среде управляемого кода на компьютере, при этом компонент кэширует объект (116, 111) в первом кэше (109, 108) или во втором кэше (109, 118), при этом кэшируемый объект (116, 111) содержит генерируемый во время выполнения код, при этом генерируемый во время выполнения код генерируется динамически генерирующим код объектом, причем динамически генерирующий код объект не изменяет глобальное состояние, в которой кэшируемый объект (116, 111) извлекается из первого кэша (109, 118) или второго кэша (109, 118) при последующих выполнениях кэшированного объекта (116, 111), пропуская, по меньшей мере, одну фазу генерации кода, при этом пропущенная, по меньшей мере, одна фаза генерации кода содержит генерацию промежуточного байт-кода или генерацию собственного двоичного кода.
2. Система по п.1, в которой первый кэш содержит кэш, который хранит промежуточный байт-код, представляющий генерируемый во время выполнения код, и в которой, по меньшей мере, одна пропускаемая фаза генерации кода содержит генерацию промежуточного байт-кода для генерируемого во время выполнения кода.
3. Система по п.1, в которой второй кэш содержит кэш, который хранит собственный двоичный код, и в которой, по меньшей мере, одна пропущенная фаза генерации кода содержит генерацию собственного двоичного кода для генерируемого во время выполнения кода.
4. Система по п.1, в которой первый кэш является кэшем исходной сборки и в которой, по меньшей мере, одна пропущенная фаза генерации содержит генерацию промежуточного байт-кода для генерируемого во время выполнения кода, или генерацию собственного двоичного кода для генерируемого во время выполнения кода.
5. Система по п.1, в которой промежуточный байт-код для генерируемого во время выполнения кода извлекается по идентификатору, состоящему из имени, ассоциированному с динамически генерирующим код объектом, по меньшей мере, одного аргумента, передаваемого к динамически генерирующему код объекту, и указателя версий для динамически генерирующего код объекта.
6. Способ кэширования генерируемого во время выполнения кода, содержащий этапы на которых:
вычисляют идентификатор (304) для объекта, содержащего генерируемый во время выполнения код, сгенерированный чисто функциональным генерирующим во время выполнения код объектом, при этом объект сгенерированного во время выполнения кода содержит промежуточный байт-код, созданный механизмом порожденного отражения, при этом вычисленный идентификатор содержит зависящие от контекста выполнения характеристики генерируемого во время выполнения кода;
сохраняют объект в первом кэше, снабженным ключом на основании вычисленного идентификатора, при первом выполнении объекта (320);
возвращают (322) сохраненный объект в ответ на второе выполнение сохраненного объекта, в котором генерацию промежуточного байт-кода для сохраненного объекта пропускают для второго выполнения сохраненного объекта.
7. Способ по п.6, дополнительно содержащий этапы на которых:
генерируют собственный двоичный код для генерируемого во время выполнения кода из промежуточного байт-кода для сохраненного объекта.
8. Способ по п.7, дополнительно содержащий этапы на которых:
кэшируют сгенерированный собственный двоичный код в кэше собственного двоичного кода, содержащий второй кэш.
9. Способ по п.6, в котором первый кэш или второй кэш является исходной сборкой, содержащей сохраненный объект.
10. Способ по п.6, в котором вычисленный идентификатор содержит идентификатор, состоящий из: имени, ассоциированного с чисто функциональным генерирующим код во время выполнения объектом, по меньшей мере, одного аргумента, переданного к чисто функциональному генерирующему во время выполнения код объекту, и указателя версии для чисто функционального генерирующего во время выполнения код объекта.
11. Машиночитаемый запоминающий носитель, содержащий машиноисполняемые инструкции, которые, когда выполняются, побуждают управляемую вычислительную среду:
кэшировать объект в первом кэше или во втором кэше, при этом объект содержит генерируемый во время выполнения код, генерируемый генерирующим код во время выполнения объектом, который не изменяет глобальное состояние, причем кэшированный объект извлекается при последующем выполнении объекта, пропуская, по меньшей мере, одну фазу генерации кода в последующих выполнениях.
12. Машиночитаемый запоминающий носитель по п.11, содержащий дополнительные машиновыполняемые инструкции, которые когда выполняются, побуждают вычислительную среду:
пропускать генерацию промежуточного байт-кода для генерируемого во время выполнения кода для последующих выполнений кэшированного объекта.
13. Машиночитаемый запоминающий носитель по п.11, содержащий дополнительные машиновыполняемые инструкции, которые, когда выполняются, побуждают вычислительную среду:
пропускать генерацию собственного двоичного кода из промежуточного байт-кода для кода, генерируемого во время выполнения, для последующих выполнений кэшированного объекта.
14. Машиночитаемый запоминающий носитель по п.13, содержащий дополнительные машиновыполняемые инструкции, которые когда выполняются, побуждают вычислительную среду:
кэшировать собственный двоичный код или промежуточный байт-код в исходной сборке кэшированного объекта.
15. Машиночитаемый запоминающий носитель по п.13, содержащий дополнительные машинновыполняемые инструкции, которые когда выполняются, побуждают вычислительную среду:
предоставлять объект с конкретной идентификацией, использующей зависящие от выполнения характеристики кэшируемого объекта; и
извлекать кэшированный объект из первого кэша или второго кэша, снабженного ключом по конкретной идентификации.
RU2011114807/08A 2008-10-15 2009-09-30 Кэширование генерируемого во время выполнения кода RU2520344C2 (ru)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/251,497 US9250938B2 (en) 2008-10-15 2008-10-15 Caching runtime generated code
US12/251,497 2008-10-15
PCT/US2009/059125 WO2010045027A2 (en) 2008-10-15 2009-09-30 Caching runtime generated code

Publications (2)

Publication Number Publication Date
RU2011114807A true RU2011114807A (ru) 2012-10-20
RU2520344C2 RU2520344C2 (ru) 2014-06-20

Family

ID=42100058

Family Applications (1)

Application Number Title Priority Date Filing Date
RU2011114807/08A RU2520344C2 (ru) 2008-10-15 2009-09-30 Кэширование генерируемого во время выполнения кода

Country Status (7)

Country Link
US (1) US9250938B2 (ru)
EP (1) EP2340481B1 (ru)
JP (1) JP5518085B2 (ru)
CN (1) CN102187313B (ru)
BR (1) BRPI0919132A2 (ru)
RU (1) RU2520344C2 (ru)
WO (1) WO2010045027A2 (ru)

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8578056B1 (en) * 2008-03-31 2013-11-05 Symantec Corporation Optimized application streaming for just in time compiled components
US20100306751A1 (en) * 2009-05-28 2010-12-02 James Paul Schneider Execution result caching and searching
US9117071B2 (en) 2009-06-03 2015-08-25 Apple Inc. Methods and apparatuses for secure compilation
US8677329B2 (en) * 2009-06-03 2014-03-18 Apple Inc. Methods and apparatuses for a compiler server
US9104484B2 (en) 2010-04-21 2015-08-11 Salesforce.Com, Inc. Methods and systems for evaluating bytecode in an on-demand service environment including translation of apex to bytecode
US8924922B2 (en) * 2010-06-14 2014-12-30 Microsoft Corporation Pre-compiling hosted managed code
US9152437B2 (en) * 2010-10-28 2015-10-06 Hewlett-Packard Development Company, L.P. Dynamically installing image processing
US20120110558A1 (en) * 2010-10-29 2012-05-03 Microsoft Corporation Customized binaries on-the-fly
US9584877B2 (en) * 2011-06-16 2017-02-28 Microsoft Technology Licensing, Llc Light-weight validation of native images
US9552201B2 (en) * 2011-08-31 2017-01-24 Avaya Inc. System and method for incremental software installation
US8972952B2 (en) 2012-02-03 2015-03-03 Apple Inc. Tracer based runtime optimization for dynamic programming languages
US9223599B1 (en) * 2012-03-30 2015-12-29 Zynga Inc. Client-side server for client-side scripting languages
US9104449B2 (en) * 2012-06-18 2015-08-11 Google Inc. Optimized execution of dynamic languages
US9116713B1 (en) * 2013-03-12 2015-08-25 Emc Corporation System and method for expression evaluation in a distributed networking environment
CN103412754A (zh) * 2013-08-15 2013-11-27 优视科技有限公司 动态语言代码执行方法和装置
US9710388B2 (en) * 2014-01-23 2017-07-18 Qualcomm Incorporated Hardware acceleration for inline caches in dynamic languages
KR101559651B1 (ko) 2014-01-28 2015-10-13 한양대학교 산학협력단 동적 분석 방법 및 장치
US9389890B2 (en) 2014-03-27 2016-07-12 Microsoft Technology Licensing, Llc Hierarchical directives-based management of runtime behaviors
US9292270B2 (en) 2014-03-27 2016-03-22 Microsoft Technology Licensing, Llc Supporting dynamic behavior in statically compiled programs
US9952843B2 (en) * 2014-05-15 2018-04-24 Nvidia Corporation Partial program specialization at runtime
JP6379654B2 (ja) * 2014-05-15 2018-08-29 富士通株式会社 処理実行プログラム、処理実行方法、及び情報処理装置
US10025571B1 (en) 2014-07-17 2018-07-17 Google Llc Optimized execution of dynamic languages
CN105786465A (zh) * 2014-12-23 2016-07-20 远光软件股份有限公司 一种脚本语言执行方法及装置
RU2628920C2 (ru) * 2015-03-31 2017-08-22 Закрытое акционерное общество "Лаборатория Касперского" Способ обнаружения вредоносных сборок
RU2635271C2 (ru) * 2015-03-31 2017-11-09 Закрытое акционерное общество "Лаборатория Касперского" Способ категоризации сборок и зависимых образов
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
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
US9367686B1 (en) * 2015-07-21 2016-06-14 AO Kaspersky Lab System and method for antivirus checking of native images of software assemblies
US20170083298A1 (en) * 2015-09-23 2017-03-23 Microsoft Technology Licensing, Llc Resilient format for distribution of ahead-of-time compiled code components
US10303498B2 (en) * 2015-10-01 2019-05-28 Microsoft Technology Licensing, Llc Performance optimizations for emulators
US9910646B2 (en) * 2015-12-26 2018-03-06 Intel Corporation Technologies for native code invocation using binary analysis
US10459727B2 (en) * 2015-12-31 2019-10-29 Microsoft Technology Licensing, Llc Loop code processor optimizations
CN105893031B (zh) * 2016-03-28 2019-12-24 广州华多网络科技有限公司 一种缓存操作实现方法、业务层方法的调用方法及装置
US10521208B2 (en) * 2017-06-23 2019-12-31 Microsoft Technology Licensing, Llc. Differentiated static analysis for dynamic code optimization
EP3428746B1 (en) * 2017-07-14 2021-06-02 Siemens Aktiengesellschaft A method and apparatus for providing an adaptive self-learning control program for deployment on a target field device
CN112183712A (zh) * 2019-07-03 2021-01-05 安徽寒武纪信息科技有限公司 深度学习算法的编译方法、装置及相关产品
US11150915B2 (en) 2019-09-13 2021-10-19 International Business Machines Corporation Deferred bytecode class verification in managed runtime environments
US11403075B2 (en) 2019-11-25 2022-08-02 International Business Machines Corporation Bytecode verification using class relationship caching
US11231918B1 (en) 2020-08-31 2022-01-25 Microsoft Technologly Licensing, LLC Native emulation compatible application binary interface for supporting emulation of foreign code
US11403100B2 (en) 2020-08-31 2022-08-02 Microsoft Technology Licensing, Llc Dual architecture function pointers having consistent reference addresses
US11042422B1 (en) 2020-08-31 2021-06-22 Microsoft Technology Licensing, Llc Hybrid binaries supporting code stream folding
CN112596770B (zh) * 2020-12-24 2023-08-18 潍柴动力股份有限公司 一种数据处理方法、装置、电子设备和存储介质

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
AU2002220999A1 (en) * 2000-11-22 2002-06-03 Zend Technologies Ltd. Method and apparatus for dynamic shared-memory caching of scripting engine product
CA2349905A1 (en) 2001-06-07 2002-12-07 Ibm Canada Limited-Ibm Canada Limitee System and method of mapping between software objects and structured language element based documents
JP3808755B2 (ja) * 2001-11-07 2006-08-16 富士通株式会社 Jitコンパイラを備えた仮想計算機
EP1313012A1 (en) * 2001-11-15 2003-05-21 Texas Instruments France Java DSP acceleration by byte-code optimization
US6947955B2 (en) * 2002-09-23 2005-09-20 International Business Machines Corporation Run-time augmentation of object code to facilitate object data caching in an application server
US20040123278A1 (en) * 2002-12-23 2004-06-24 Murthi Nanja Persistent cache apparatus and methods
US20040186862A1 (en) * 2003-03-18 2004-09-23 Garthwaite Alexander T. Parallel caching of insertions into remembered-sets
US7219329B2 (en) * 2003-06-13 2007-05-15 Microsoft Corporation Systems and methods providing lightweight runtime code generation
JP2005250958A (ja) 2004-03-05 2005-09-15 Ntt Data Corp 分散コンピューティング環境におけるサービス実行処理システム、およびそのクライアント装置ならびにプログラム、サービス実行処理方法
CN100552650C (zh) * 2004-04-30 2009-10-21 马维尔国际贸易有限公司 用于结合使用有效范围语句和动态缓存变量的方法
US7770159B2 (en) * 2004-10-20 2010-08-03 Microsoft Corporation Virtual types
KR100725393B1 (ko) * 2005-05-19 2007-06-07 삼성전자주식회사 자바 가상 머신에서 바이트 코드의 수행 시간을 줄이는시스템 및 방법
US7650600B2 (en) * 2005-06-20 2010-01-19 Microsoft Corporation Unique identifier resolution interfaces for lightweight runtime identity
US7730464B2 (en) * 2005-09-14 2010-06-01 Microsoft Corporation Code compilation management service
US7506119B2 (en) * 2006-05-04 2009-03-17 International Business Machines Corporation Complier assisted victim cache bypassing
US8321850B2 (en) * 2008-06-06 2012-11-27 Vmware, Inc. Sharing and persisting code caches

Also Published As

Publication number Publication date
EP2340481A4 (en) 2013-03-06
US20100095284A1 (en) 2010-04-15
BRPI0919132A2 (pt) 2015-12-08
CN102187313A (zh) 2011-09-14
JP5518085B2 (ja) 2014-06-11
WO2010045027A2 (en) 2010-04-22
RU2520344C2 (ru) 2014-06-20
EP2340481A2 (en) 2011-07-06
US9250938B2 (en) 2016-02-02
JP2012506094A (ja) 2012-03-08
WO2010045027A3 (en) 2010-07-01
CN102187313B (zh) 2014-07-09
EP2340481B1 (en) 2018-06-13

Similar Documents

Publication Publication Date Title
RU2011114807A (ru) Кэширование генерируемого во время выполнения кода
JP2012506094A5 (ru)
EP3039535B1 (en) Concurrent inline cache optimization in accessing dynamically typed objects
JP2007521555A5 (ru)
US9875106B2 (en) Computer processor employing instruction block exit prediction
US10185567B2 (en) Multilevel conversion table cache for translating guest instructions to native instructions
Perais et al. Practical data value speculation for future high-end processors
US9501423B2 (en) Program execution device and compiler system
US8364461B2 (en) Reusing invalidated traces in a system emulator
CA2635116A1 (en) Efficient memory hierarchy management using instruction in a data cache
KR20070108939A (ko) 포워드 룩킹 브렌치 타겟 어드레스 캐싱
RU2008113217A (ru) Быстрая загрузка операционной системы из выключенного состояния
JP2007531075A5 (ru)
US9584877B2 (en) Light-weight validation of native images
RU2012149004A (ru) Увеличение числа доступных для команд регистров общего назначения
CN107832057A (zh) 一种iOS应用的构建方法及终端
US20080282116A1 (en) Transient Fault Detection by Integrating an SRMT Code and a Non SRMT Code in a Single Application
JPWO2012093489A1 (ja) 演算処理装置および分岐予測方法
US20080282257A1 (en) Transient Fault Detection by Integrating an SRMT Code and a Non SRMT Code in a Single Application
US20050246677A1 (en) Native method invocation (NMI) custom marshalling stub service
US8291395B2 (en) Fast function call dispatching
Jeon et al. Reuse of JIT compiled code in JavaScript engine
CN102819435B (zh) 一种Java虚拟机的位置无关代码生成方法
CN112199110A (zh) 一种免重启运维升级方法、系统、装置和介质
Heo et al. Improving JavaScript performance via efficient in-memory bytecode caching

Legal Events

Date Code Title Description
PC41 Official registration of the transfer of exclusive right

Effective date: 20150526

MM4A The patent is invalid due to non-payment of fees

Effective date: 20191001