IP Library Granted Patent US 8,539,464
Granted Patent B2
US 8,539,464 · App. 12/261,653 · Granted Sep 17, 2013

Distributed just-in-time compilation

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,539,464
App. No.
12/261,653
Granted
Sep 17, 2013
Kind
B2
Abstract

A method of performing distributed just-in-time compilation includes sending a first request message from a client platform to a dedicated compilation server requesting just-in-time compilation of a bytecode sequence generated from a set of code for a source program executing on the client platform; compiling the bytecode sequence at the compilation server into a set of machine code instructions executable by the client platform; storing the set of machine code instructions in a repository managed by the dedicated compilation server; sending a notification message indicating that the set of machine code instructions are available from the dedicated compilation server to the client platform; sending a second request message from the client platform to the dedicated compilation server requesting the set of machine code instructions; and accessing the repository to send the set of machine code instructions from the dedicated compilation server to the client platform.

Claims (15)

1. A method of performing distributed just-in-time compilation, the method comprising:

sending a first request message from a client platform to a dedicated compilation server via a network, the first request message requesting just-in-time compilation of a first bytecode sequence generated from a set of code for a source program executing on the client platform, the first request message including the first bytecode sequence and a first set of information describing the client platform, wherein the first request message is sent from a first slave just-in-time compiler running on the client platform, and the first slave just-in-time compiler is one of a plurality of slave just-in-time compilers registered with the dedicated compilation server;

hashing a first entry for the first request message in a hash table managed by the first slave just-in-time compiler upon sending the first request message from the client platform to the dedicated compilation server;

receiving the first request message within an asynchronous request message queue implemented within the dedicated compilation server;

compiling the first bytecode sequence at the dedicated compilation server into a first set of machine code instructions executable by the client platform, wherein compiling the first bytecode sequence at the dedicated compilation server comprises triggering a master just-in-time compiler to process the first request message by performing a set of flow analysis and optimization operations on the first bytecode sequence to generate the first set of machine code instructions upon the first request message being retrieved from the front of the asynchronous request message queue by a queue manager implemented within the dedicated compilation server;

storing the first set of machine code instructions in a repository managed by the dedicated compilation server;

sending a first notification message indicating that the first set of machine code instructions are available from the dedicated compilation server to the client platform via the network, wherein sending the first notification message comprises publishing the first notification message to a respective subscriber queue managed by each of the slave just-in-time compilers registered with the dedicated compilation server;

receiving the first notification message within the respective subscriber queue managed by the first slave just-in-time compiler;

correlating the first set of machine code instructions with the first entry in the hash table upon the first notification message being retrieved from the front of the respective subscriber queue managed by the first slave just-in-time compiler;

sending a second request message from the client platform to the dedicated compilation server via the network requesting the first set of machine code instructions;

accessing the repository to send the first set of machine code instructions from the dedicated compilation server to the client platform; and

storing the first set of machine code instructions in a cache data store managed by the slave just-in-time compiler.

2. The method of claim 1 , wherein the set of code for the source program is Java code, wherein the first bytecode sequence comprises Java bytecode instructions, wherein the first slave just-in-time compiler is incorporated within a Java Virtual Machine instance instantiated by a Java Runtime Environment for the source program executing on the client platform, and wherein the first bytecode sequence is one of a plurality of bytecode sequences generated from the set of code for the source program during execution of the source program on the client platform by the Java Runtime Environment.

3. The method of claim 2 , further comprising storing a plurality of machine code instruction sets executable by the client platform in the repository that includes a second set of machine code instructions comprising compiled machine code instructions for a second bytecode sequence generated from the set of code for the source program by the Java Runtime Environment, sending a respective notification message for each of the machine code instruction sets of the plurality of machine code instruction sets via the network from the dedicated compilation server to the respective subscriber queue managed by each of the slave just-in-time compilers registered with the dedicated compilation server, sending a third request message from the client platform to the dedicated compilation server via the network requesting the second set of machine code instructions, sending the second set of machine code instructions from the dedicated compilation server to the client platform, and storing the second set of machine code instructions in the cache data store managed by the slave just-in-time compiler.

4. The method of claim 2 , wherein the Java Virtual Machine instance further incorporates an interpreter and a sampling profiler, wherein the sampling profiler is configured to observe a set of state information for the source program executing on the client platform, and wherein the Java Virtual Machine instance is configured to selectively invoke either interpretation by the interpreter or just-in-time compilation for each bytecode sequence generated from the set of code for the source program during execution of the source program on the client platform by the Java Runtime Environment based upon the set of state information for the source program observed by the sampling profiler, wherein the first request message further includes the set of state information for the source program observed by the sampling profiler, and wherein the first notification message includes the set of state information included in the first request message.

Assignments (2)
CONVEYOR IS ASSIGNING UNDIVIDED 50% INTEREST Recorded Nov 8, 2017
From: INTERNATIONAL BUSINESS MACHINES CORPORATION
To: SERVICENOW, INC.; INTERNATIONAL BUSINESS MACHINES CORPORATION
Reel/Frame 044413/0144 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 4, 2008
From: PARTRIDGE, IAN O; PILKINGTON, ADAM J; RENSHAW, DAVID S; ROWLAND, SIMON CHARLES EDWARD
To: INTERNATIONAL BUSINESS MACHINES CORPORATION
Reel/Frame 021781/0600 →