TL;DR: This paper shows that compile-time lifetime analysis can be applied to programs written in languages with static type systems and dynamically allocated objects, to provide earlier storage binding time for objects, while maintaining all the advantages of dynamic allocation.
Abstract: The choice of binding time disciplines has major consequences for both the run-time efficiency of programs and the convenience of the language expressing algorithms. Late storage binding time, dynamic allocation, provides the flexibility necessary to implement the complex data structures common in today's object oriented style of programming. In this paper we show that compile-time lifetime analysis can be applied to programs written in languages with static type systems and dynamically allocated objects, to provide earlier storage binding time for objects, while maintaining all the advantages of dynamic allocation.
TL;DR: In this article, an interprocedural analysis is used to determine whether an object that is allocated on the heap during the execution of a procedure is not reachable from any global variable, parameter, or return value of the procedure after it returns.
Abstract: Information is computed about the reachability relationships among objects and pointers to enable transformation of a computer program for optimizing the creation and destruction of objects, while strictly performing the semantics of the original program. An interprocedural analysis is used to determine whether an object that is allocated on the heap during the execution of a procedure is not reachable from any global variable, parameter, or the return value of the procedure after it returns. If so, that object can be allocated on the stack frame of the procedure in which it is otherwise heap-allocated. This simplifies the memory allocation and deallocation operations, as allocation on the stack can be done more efficiently than allocation on the heap, and objects allocated on the stack frame of a procedure are automatically deallocated when the procedure returns, without incurring the overhead of garbage collection. This, in turn, leads to faster programs which use fewer computer processor resources to execute. The interprocedural analysis of the program summarizes the effect of a procedure call succinctly for different calling contexts of the procedure using a single summary representation. The method handles exceptions in the programming language, while taking advantage of the information about the visibility of variables in the exception handler. Variants of the method show how one or several of the features of the method may be performed.
TL;DR: In this article, a technique for performing a shared load procedure for a class, performing a post load procedure, and performing an initialization procedure for the class to reduce memory consumption and class loading time is presented.
Abstract: Methods and apparatus, including computer systems and program products, for sharing classes and class loaders. One implementation provides a technique for performing a shared load procedure for a class, performing a post load procedure for the class, performing a shared link procedure for the class, performing a post link procedure for the class, and performing an initialization procedure for the class to reduce memory consumption and class loading time. Through performance of these procedures, a first portion of the class (which may include a class block and object) is loaded into a shared memory accessible by multiple runtime systems, and a second portion of the class (which may include a class static variable) as is stored in a local memory associated with a selected runtime system. A shared master copy of the second portion of the class is also stored in the shared memory.
TL;DR: In this article, a portable hand held computing and indicating device for use in a verification system of the type where a first non-predictable code is generated at a first mechanism in accordance with a predetermined algorithm in response to both a unique static variable and a dynamic variable, and a second non-predictive code is created at a second mechanism by the same algorithm at a given instant of time.
Abstract: A portable hand held computing and indicating device for use in a verification system of the type wherein a first non-predictable code is generated at a first mechanism in accordance with a predetermined algorithm in response to both a unique static variable and a dynamic variable and a second non-predictable code is generated at a second mechanism in accordance with the predetermined algorithm in response to both the unique static variable and a second dynamic variable which corresponds to the first variable. The non-predictable codes are compared at the second mechanism to effect verification. The device forms the first mechanism and includes a processor having the algorithm preprogrammed therein and a means for storing a static variable which is unique for each device. The device also includes a means for generating a time varying dynamic variable which is substantially the same as that generated at the second mechanism at a given instant of time. The stored unique variable and the currently generated dynamic variable are applied to the processor and the resultant non-predictable code is visually displayed. The program for executing the algorithm and the static variable are preferably stored in volatile memory which causes the program and the static variable to be erased if any effort is made to gain access thereto. All or a portion of the static variable may appear in visually perceptible form on the device.
TL;DR: In this paper, each instruction that creates an object (i.e., allocation instruction) is first analyzed to determine whether it is one of the following three types: no escape, global escape, and arg escape.
Abstract: An object oriented mechanism and method allow allocating a greater number of objects on a method's invocation stack. Each instruction that creates an object (i.e., allocation instruction) is first analyzed to determine whether it is one of the following three types: no escape, global escape, and arg escape. If an allocation instruction is global escape, the object must be allocated from the heap. If an allocation instruction is no escape, it can be allocated on the method's invocation stack frame. If an allocation instruction is arg escape, further analysis is required to determine whether the object can be allocated on an invoking method's stack or must be allocated from the heap. If the method that contains an arg escape allocation instruction can be inlined into a method from which the lifetime of the object does not escape, the object can be allocated on the invoking method's stack. This inlining can be done for several layers up, if needed and possible. This allows for nested objects to be potentially allocated on a method's stack, instead of forcing each of these objects to be allocated from the heap.