US20020169556A1 - Identifying and tracking object references in a java programming environment - Google Patents

Identifying and tracking object references in a java programming environment Download PDF

Info

Publication number
US20020169556A1
US20020169556A1 US09/851,663 US85166301A US2002169556A1 US 20020169556 A1 US20020169556 A1 US 20020169556A1 US 85166301 A US85166301 A US 85166301A US 2002169556 A1 US2002169556 A1 US 2002169556A1
Authority
US
United States
Prior art keywords
stack
java
stored
value
recited
Prior art date
Legal status (The legal status 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 status listed.)
Granted
Application number
US09/851,663
Other versions
US6804681B2 (en
Inventor
Stepan Sokolov
David Wallman
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Oracle America Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Priority to US09/851,663 priority Critical patent/US6804681B2/en
Assigned to SUN MICROSYSTEMS, INC. reassignment SUN MICROSYSTEMS, INC. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: WALLMAN, DAVID, SOKOLOV, STEPAN
Priority to PCT/US2002/014583 priority patent/WO2002091189A2/en
Priority to GB0325831A priority patent/GB2391981B/en
Publication of US20020169556A1 publication Critical patent/US20020169556A1/en
Application granted granted Critical
Publication of US6804681B2 publication Critical patent/US6804681B2/en
Assigned to Oracle America, Inc. reassignment Oracle America, Inc. MERGER AND CHANGE OF NAME (SEE DOCUMENT FOR DETAILS). Assignors: Oracle America, Inc., ORACLE USA, INC., SUN MICROSYSTEMS, INC.
Adjusted expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/17Embedded application
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/70Details relating to dynamic memory management
    • G06F2212/702Conservative garbage collection
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure
    • Y10S707/99945Object-oriented database structure processing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure
    • Y10S707/99947Object-oriented database structure reference

Abstract

Improved techniques for identifying and tracking references to Java objects are disclosed. The techniques can be used to implement garbage collection facilities for Java programs in a manner that is more efficient, especially for systems with limited resources (e.g., embedded systems). For each execution stack, a reference stack can be designated. The reference stack can be used to store references to Java objects in the same offset as they appear in the corresponding execution stack. References to Java objects can be identified based on the values stored in the reference stack. The reference stack can be traversed to identify the entries that correspond to active Java objects. These entries can then be checked against the corresponding entries in the execution stack to ensure with a greater degree of certainty that the identified entries represent references to active Java objects.

Description

    CROSS-REFERENCE TO RELATED APPLICATIONS
  • This application is related to U.S. Patent Application No. ______ (Att.Dkt.No. SUN1P833/P6212), entitled “IDENTIFYING REFERENCES TO OBJECTS DURING BYTECODE VERIFICATION”, filed on an even date, and hereby incorporated herein by reference for all purposes.[0001]
  • BACKGROUND OF THE INVENTION
  • The present invention relates generally to object-based high level programming environments, and more particularly, to techniques for tracking references to objects defined in object-based high level programming environments. [0002]
  • Recently, the Java programming environment has become quite popular. The Java programming language is a language that is designed to be portable enough to be executed on a wide range of computers ranging from small devices (e.g., pagers, cell phones and smart cards) up to supercomputers. Computer programs written in the Java programming language (and other languages) may be compiled into Java Bytecode instructions that are suitable for execution by a Java virtual machine implementation. [0003]
  • The Java virtual machine is commonly implemented in software by means of an interpreter for the Java virtual machine instruction set but, in general, may be software, hardware, or both. A particular Java virtual machine implementation and corresponding support libraries together constitute a Java runtime environment. [0004]
  • Computer programs in the Java programming language are arranged in one or more classes or interfaces (referred to herein jointly as classes or class files). Such programs are generally platform, i.e., hardware and operating system, independent. As such, these computer programs may be executed without modification on any computer that is able to run an implementation of the Java runtime environment. [0005]
  • Object-oriented classes written in the Java programming language are compiled to a particular binary format called the “class file format.” The class file includes various components associated with a single class. These components can be, for example, methods and/or interfaces associated with the class. In addition, the class file format can include a significant amount of ancillary information that is associated with the class. The class file format (as well as the general operation of the Java virtual machine) is described in some detail in [0006] The lava Virtual Machine Specification, Second Edition, by Tim Lindholm and Frank Yellin, which is hereby incorporated herein by reference.
  • As an object-oriented programming language, Java utilizes the programming concept known as an object. In the Java programming environment, Java objects are created (instantiated) from Java classes. Typically, Java objects are stored in a heap memory portion (heap). To illustrate, FIG. 1 depicts a [0007] computing environment 100 including a heap memory portion 102 suitable for storing Java objects. As shown in FIG. 1, various Java objects, for example, objects O1, O2, O3, O4, O5 and O6 can be stored in the heap memory portion 102. A Java object in the memory portion 102, for example, Java object O3, can include a reference to its class, as well as one or more other fields describing data (e.g., variables) associated with the object. The Java object O3 can also include references to other Java objects, for example, Java objects O4 and O5, which are also stored in the heap memory portion 102.
  • Java objects are typically created in the [0008] heap memory portion 102 when they are instantiated. After a Java object has been instantiated, it can be referenced from various points in the Java program. For example, the object O3 can be referenced by a local variable 104 of the Java program. During the execution time of the Java program, as depicted in FIG. 1, the local variable 104 can be on an execution stack 106 in a stack frame portion 108. The stack frame portion 108 represents the stack frame for a method associated with the local variable 104. The stack frame portion 108 is typically placed on the execution stack 106 when the associated method is invoked.
  • In addition to the local variables associated with the method, the [0009] stack frame portion 108 also includes an operand stack portion 110 suitable for placing various operands on the execution stack 106. In the Java programming environment, these operands are placed on the operand stack portion 110 of the execution stack 106 in order to execute the Java method associated with the stack frame 108. As is known to those skilled in the art, these operands can be references to objects stored in the heap memory portion 102, e.g., an operand 112 referencing the Java object O3.
  • As is known to those skilled in the art, there may be a need to identify and track references to Java objects for various reasons. For example, during the course of the execution of Java programs, some of the objects in the [0010] heap memory portion 102 are no longer needed (i.e., become “dead objects” which are no longer reachable by the Java program). Accordingly, it is desirable to identify the “dead” objects in the heap memory portion 102 and remove them from the heap. This operation can be referred to as “garbage collection.”
  • As noted above, entries of the execution stack can be references to Java objects stored in the heap memory portion. Therefore, to perform garbage collection for Java programs, there is a need to identify entries on the execution stack that are references to objects stored on the heap memory portion. The conservative approach to garbage collection would require traversing the execution stack and identifying every entry on the stack that could potentially be a reference to an object in the heap. Unfortunately, this conservative approach typically results in identifying dead objects as live objects. Since an object in the heap may refer to other objects, identifying a dead object as a live one can seriously hinder garbage collection. [0011]
  • Another approach to garbage collection seeks to identify references to live objects more accurately. However, this approach requires use of another interpreter, namely, the abstract interpreter. The abstract interpreter essentially simulates the execution of Java methods and operates when the main interpreter is suspended. Thus, the use of an abstract interpreter can adversely effect performance of Java programs. Moreover, devoting memory space and execution time to use an interpreter is not a feasible method for computing systems with relatively limited resources (e.g., embedded systems with relatively smaller memory and computing power). [0012]
  • In view of the foregoing, there is a need for improved techniques for tracking and identifying references to Java objects. [0013]
  • SUMMARY OF THE INVENTION
  • Broadly speaking, the present invention relates to improved techniques for identifying and tracking references to Java objects. As will be appreciated, the techniques can be used in a variety of applications. For example, the techniques can be used to implement garbage collection methods for Java programs in a manner that is more efficient, especially for systems with limited resources (e.g., embedded systems). In accordance with one aspect of the invention, a reference stack suitable for storing references to Java objects is disclosed. In one embodiment, for each execution stack, a reference stack is designated. In fact, the reference stack can be used to store references to Java objects in the same offset as they appear in the corresponding execution stack. [0014]
  • In accordance with another aspect of the invention, references to Java objects can be identified based on the values stored in the reference stack. In one embodiment, the reference stack is traversed to identify the entries that correspond to active Java objects. These entries are then checked against the corresponding entries in the execution stack to ensure with a greater degree of certainty that the identified entries represent references to active Java objects. [0015]
  • The invention can be implemented in numerous ways, including as a method, an apparatus, a computer readable medium, and a database system. Several embodiments of the invention are discussed below. [0016]
  • As a method of tracking references to objects of an object-oriented programming language, one embodiment of the invention includes the acts of: providing a reference stack associated with an execution stack; determining whether at least one value should be stored in the reference stack; and storing said at least one value in the reference stack when the determining determines that the at least one object should be stored in the reference stack. [0017]
  • As a method of tracking references to Java objects, another embodiment of the invention includes the acts of: providing a reference stack associated with an execution stack, the reference stack being the same size as the execution stack; determining whether at least one value should be stored in the reference stack, wherein the determining is performed during Bytecode verification; and storing the at least one value in the reference stack in an offset that is the same as the offset in the execution stack where the value is stored when the determining determines that the at least one object should be stored in the reference stack. [0018]
  • One embodiment of the invention provides a reference stack suitable for storing references to objects of a computer program written in an object-oriented programming language. The reference stack corresponds to an execution stack of the computer program which is also suitable for storing references to objects of the computer program. In addition, at least one reference to an object is stored both on the reference stack and the execution stack. [0019]
  • As a method for identifying references to Java objects, one embodiment of the invention includes the acts of: reading a value stored in an entry of a reference stack; determining whether the value is equal to another value that is stored in a corresponding entry of an execution stack; and marking the value in the entry of the reference stack as a reference to a Java object when the determining determines that the value is equal to the another value stored in the corresponding entry of the execution stack. [0020]
  • These and other aspects and advantages of the present invention will become more apparent when the detailed description below is read in conjunction with the accompanying drawings. [0021]
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • The present invention will be readily understood by the following detailed description in conjunction with the accompanying drawings, wherein like reference numerals designate like structural elements, and in which: [0022]
  • FIG. 1 depicts a computing environment including a heap memory portion suitable for storing Java objects. [0023]
  • FIG. 2 represents an object-oriented computing environment in accordance with one embodiment of the invention. [0024]
  • FIG. 3 illustrates a method for tracking references to Java objects in accordance with one embodiment of the invention. [0025]
  • FIG. 4 illustrates a method for determining whether a value should be stored in the reference stack. [0026]
  • FIG. 5 illustrates a method for identifying references to Java objects. [0027]
  • FIG. 6 depicts an enhanced Bytecode verifier in accordance with one embodiment of the invention. [0028]
  • FIG. 7 illustrates a method for performing Bytecode verification in accordance with one embodiment of the invention. [0029]
  • FIG. 8 depicts a method for determining whether one or more commands in a Bytecode stream should be translated in accordance with one embodiment of the invention. [0030]
  • DETAILED DESCRIPTION OF THE INVENTION
  • The present invention pertains to improved techniques for identifying and tracking references to Java objects. As will be appreciated, the techniques can be used in a variety of applications. For example, the techniques can be used to implement garbage collection methods for Java programs in a manner that is more efficient, especially for systems with limited resources (e.g., embedded systems). [0031]
  • In accordance with one aspect of the invention, a reference stack suitable for storing references to Java objects is disclosed. In one embodiment, for each execution stack, a reference stack is designated. In fact, the reference stack can be used to store references to Java objects in the same offset as they appear in the corresponding execution stack. In accordance with another aspect of the invention, references to Java objects can be identified based on the values stored in the reference stack. In one embodiment, the reference stack is traversed to identify the entries that correspond to active Java objects. These entries are then checked against the corresponding entries in the execution stack to ensure with a greater degree of certainty that the identified entries represent references to active Java objects. The described techniques can be implemented to efficiently identify and track references to Java objects. Accordingly, the invention can be implemented to improve various applications (e.g., garbage collection). As a result, performance of virtual machines, especially those with relatively limited resources, is improved. [0032]
  • In accordance with yet another aspect of the invention, an enhanced Java Bytecode verifier, suitable for operation in a Java computing environment is disclosed. The enhanced Java Bytecode verifier operates to determine whether one or more Java conventional Bytecode commands within a stream of Bytecode commands are likely to place a reference to a Java object on the execution stack. In one embodiment, the conventional Java Bytecode commands identified as such are translated by the enhanced Java Bytecode verifier into one or more corresponding inventive commands. When an inventive command is executed, the reference associated with the conventional Java command is placed on the reference stack as well as the execution stack. [0033]
  • Embodiments of the invention are discussed below with reference to FIGS. [0034] 2-8. However, those skilled in the art will readily appreciate that the detailed description given herein with respect to these figures is for explanatory purposes only as the invention extends beyond these limited embodiments.
  • FIG. 2 represents an object-oriented [0035] computing environment 200 in accordance with one embodiment of the invention. The computing environment 200 includes an execution stack 202 and a reference stack 204. The execution stack 202 can be of a predetermined size (e.g., 2 Kilo Bytes (KB), 4 KB, 8 KB). As will be appreciated, the execution stack 202 can be implemented in a similar manner as a conventional execution stack (e.g., execution stack 106 of FIG. 1). However, unlike conventional computing environments, the computing environment 200 includes the reference stack 204.
  • In the described embodiment, the [0036] reference stack 204 is allocated to be the same size as the execution stack 202. In fact, there is a one to one correspondence between the entries of the reference stack 204 and the entries of the execution stack 202. In other words, reference stack 204 may be implemented as a mirror image of the execution stack 202. As such, for an entry 206 in the execution stack 202, there is the corresponding entry 208 of the reference stack 204, and for another entry 210 in the execution stack 202, there is the corresponding entry 212 in the reference stack 204, and so forth.
  • As shown in FIG. 2, the value stored in the [0037] entry 216 of the reference stack 204 is the same as the value stored in the entry 214 of the execution stack 202. This value can represent a reference to a Java object in the heap. It should be noted that the entry 216 of the reference stack 204 and the entry 214 of the execution stack 202 also have the same offset. Accordingly, the reference stack 204 can be used to store references to Java objects in the same offset as they appear in the execution stack 202. It should also be noted that the entries that do not represent a reference to an object can be set to a predetermined value that cannot represent a reference value (e.g., zero).
  • FIG. 3 illustrates a [0038] method 300 for tracking references to Java objects in accordance with another embodiment of the invention. The method 300 can, for example, be implemented in the computing environment 200 described above in order to place references to Java objects in the reference stack 204. Initially, at operation 302, the reference stack is initialized to zero. Next, at operation 304, a value is placed on the execution stack. Thereafter, at operation 306, a determination is made as to whether the value placed on the execution stack should also be placed on the reference stack. If it is determined at operation 306 that the value placed on the execution stack should not be placed on the reference stack, the method 300 ends. On the other hand, if it is determined at operation 306 that the value placed on the execution stack should also be placed on the reference stack, the method 300 proceeds to operation 308 where the value placed on the execution stack is also stored on the reference stack in an appropriate entry.
  • To further elaborate, FIG. 4 illustrates a [0039] method 400 for determining whether a value should be stored in the reference stack. The method 400 represents, for example, processing that can be performed at operation 306 of FIG. 3. The method 400 can, for example, be performed during a garbage collection cycle. First, at operation 402, a determination is made as to whether a new Java object is being instantiated. If it is determined at operation 402 that a new Java object is being instantiated, the method 400 proceeds to operation 408 where the reference to the Java object is placed on the reference stack. On the other hand, if it is determined at operation 402 that a new object is not being instantiated, the method 400 proceeds to operation 404 where a determination is made as to whether a local variable is being set to reference a Java object. If it is determined at operation 404 that a local variable is being set to reference the Java object, the method 400 proceeds to operation 408 where the reference to the object is placed on the reference stack. However, if it is determined at operation 404 that a local variable is not being set to reference the Java object, the method 400 proceeds to operation 406 where it is determined whether an operation of a selected group of operations is being performed. In one embodiment, the selected group of operations includes operations that are likely to place a reference to an object on the execution stack. This selected group of operations can include Getfield, Aload, Areturn, and Getstatic Bytecode operations. These Java (Bytecode) operations are known to those skilled in the art.
  • Moreover, as will be appreciated, the determinations made at [0040] operations 402, 404 and 406 can be performed during Bytecode verification. Bytecode verification is typically performed for Java programs to ensure that no programming violation has occurred. As such, the method 400 can be efficiently implemented since Bytecode verification is typically performed anyway. The method 400 ends following the operation 408 or if it is determined at operation 406 that an operation of the selected group of operations is not being performed.
  • As noted above, the reference stack can be used to store references to Java objects. Accordingly, the reference stack can be used to identify references to Java objects. FIG. 5 illustrates a method for identifying references to Java objects. Initially, at [0041] operation 502, the first entry in the reference stack is read. Next, at operation 504, a determination is made as to whether the entry in the reference stack has a value that is equal to zero. If it is determined at operation 504 that the value stored in the entry equals zero, the method 500 proceeds to operation 506 where it is determined whether the end of the stack has been reached. If it is determined that the end of the stack has been reached, the method 500 ends. However, if it is determined that the end of the stack has not been reached, the method 500 proceeds to operation 508 where the next entry in the reference stack is read. Thereafter, the method 500 proceeds to operation 504 where it is determined whether the entry has a value that is equal to zero.
  • If it is determined at [0042] operation 504 that the entry has a value that is not equal to zero, the method 500 proceeds to operation 510 where it is determined whether the value of the entry in the reference stack is equal to the value found in the corresponding entry of the execution stack. If it is determined at operation 510 that the value of the entry in the reference stack is not equal to the value found in the corresponding entry of the execution stack, the method 500 proceeds to operation 512 where the value of the entry in the reference stack is set to zero. Next, the method 500 proceeds to operation 506 where it is determined whether the end of the stack has been reached. Thereafter, the method 500 proceeds in a similar manner as described above.
  • On the other hand, if it is determined at [0043] operation 510 that the value of the entry in the reference stack is equal to the value found in the corresponding entry of the execution stack, the method 500 proceeds to operation 514 where the entry in the reference stack is identified as a reference to a Java object. Next, the method 500 proceeds to operation 506 where it is determined whether the end of the stack has been reached. Thereafter, the method 500 proceeds in a similar manner as discussed above. When it is determined at operation 506 that the end of the reference stack has been reached, the method 500 ends.
  • As noted above, Bytecode verification is typically performed for Java programs to ensure that no programming violation has occurred. As such, some of the inventive techniques (e.g., techniques illustrated in method [0044] 400) can be efficiently performed during Java Bytecode verification since this operation is typically performed anyway. FIG. 6 depicts an enhanced Bytecode verifier 600 in accordance with one embodiment of the invention. Similar to conventional Bytecode verifiers, the enhanced Bytecode verifier 600 can receive a stream of Bytecodes 602 that typically represent the code attributes of a Method. In addition, the Bytecode verifier 600 outputs a verification indicator 604 to indicate whether the input Bytecode stream 602 has violated any rules or not. However, unlike conventional Bytecode verifiers, the Bytecode verifier 600 can determine whether one or more Bytecode commands or (opcodes) in the input Bytecode stream 602 will cause a reference to be placed on the execution stack, wherein that reference is likely to be the only reference to a Java object. Furthermore, the Bytecode verifier 600 can translate Bytecodes that are likely to place the only reference to a Java object, to one or more corresponding Bytecodes. For example, a conventional Bytecode 604 in the Bytecode command 602 can be identified as such and translated to an inventive Bytecode command 606 which indicates that the reference to the Java object is to be placed on the execution stack. Accordingly, when the inventive Bytecode command 606 is executed, the reference to the Java object is placed both on the reference stack and execution stack.
  • FIG. 7 illustrates a [0045] method 700 for performing Bytecode verification in accordance with one embodiment of the invention. The method 700 can, for example, be performed by the Bytecode verifier 600 of FIG. 6. Initially, at operation 702, a stream of Bytecodes are received. Next, at operation 704, a determination is made as to whether one or more Bytecodes in the stream should be translated. If it is determined at operation 704 that no Bytecodes should be translated, the method 700 ends. However, if it is determined at operation 704 that there is at least one Bytecode that needs to be translated, the method 700 proceeds to operation 706 where the one or more Bytecodes are translated. It should be noted that, typically, Bytecode representing commands are translated.
  • It should also be noted that the translated Bytecodes can represent those commands that are likely to place a reference to a Java object on the execution stack. Moreover, these translated Bytecodes can be in a sequence of commands that are likely to manipulate the execution stack in a manner that the reference placed on the execution stack is the only reference to a Java object on the execution stack. To illustrate, FIG. 8 depicts a [0046] method 800 for determining whether one or more commands in a Bytecode stream should be translated in accordance with one embodiment of the invention. The method 800 can, for example, represent processing performed at operation 704 of FIG. 7. Initially, at operation 802, a sequence of Java commands are received. It should be noted that each of the Java commands can have one or more associated parameters. Next, at operation 804, a determination is made as to whether a Java command has been found in the sequence of Java commands that is likely to place a reference to a Java object on the execution stack (e.g., Getfield, Aload, Getstatic, Areturn). If it is determined at operation 804 that a Java command that is likely to place a reference to a Java object on the execution stack has not been found, the method 800 ends.
  • However, if it is determined at [0047] operation 804 that a Java command that is likely to place a reference to a Java object on the execution stack has been found, the method 800 proceeds to operation 806 where it is determined whether there is a change in the flow control between the time the Java command may place a reference to a Java object on the stack and the time this reference is used (e.g., there is conditional or unconditional Jump, there is a method invocation).
  • If it is determined at [0048] operation 806 that there is a change in the flow control between the time the Java command may place a reference to a Java object on the stack and the time this reference is used, the method proceeds to operation 808 where the Java command that is likely to put a reference to a Java object on the stack is translated. As will be appreciated, the translated Java command is highly likely to place a reference that is the only reference to a particular Java object in the heap.
  • On the other hand, if it is determined at [0049] operation 806 that there is no change in the flow control between the time the Java command may place a reference to a Java object on the stack and the time this reference is used, the method 800 proceeds to operation 808 where it is determined if there is an occurrence of Putfield command after a Getfield command such that the reference placed on the execution stack by the Getfield command is likely to be overwritten by the Putfield command before it is used. If this is the case, the method proceeds from operation 810 to operation 808 where the Getfield command and/or Putfield command are translated. However, if it is determined at operation 808 that this is not the case, the method 800 proceeds to operation 812 where it is determined whether there is at least one more command found in the sequence of Java commands that is likely to place a reference to a Java object on the execution stack. If it is determined at operation 812 that there is at least one more command found that is likely to place a reference to a Java object on the execution stack, the method proceeds to operation 806 where processing is performed in a similar manner as described above. When it is determined that there is not at least one command that is likely to place a reference to a Java object on the execution stack, the method 800 ends.
  • The many features and advantages of the present invention are apparent from the written description, and thus, it is intended by the appended claims to cover all such features and advantages of the invention. Further, since numerous modifications and changes will readily occur to those skilled in the art, it is not desired to limit the invention to the exact construction and operation as illustrated and described. Hence, all suitable modifications and equivalents may be resorted to as falling within the scope of the invention.[0050]

Claims (20)

What is claimed is:
1. A method of tracking references to objects of an object-oriented programming environment, said method comprising:
providing a reference stack associated with an execution stack;
determining whether at least one value should be stored in said reference stack; and
storing said at least one value in said reference stack when said determining determines that said at least one object should be stored in said reference stack.
2. A method as recited in claim 1, wherein said object-oriented programming environment is Java programming environment.
3. A method as recited in claim 1, wherein said reference stack and said execution stack have the same size.
4. A method as recited in claim 1, wherein said at least one reference to said object is stored in an entry with an offset that is the same as the offset used to store said at least one reference in said execution stack.
5. A method as recited in claim 4, wherein said stored reference to said object is a reference to a newly instantiated object.
6. A method as recited in claim 4, wherein said stored reference to said object is associated with setting a local variable of said computer programming environment.
7. A method as recited in claim 4, wherein said stored reference to said object is associated with a Getfield operation.
8. A method as recited in claim 4, wherein said stored reference to said object is associated with an Aload operation.
9. A method as recited in claim 4, wherein said stored reference to said object is associated with an Areturn operation.
10. A method as recited in claim 4, wherein said stored reference to said object is associated with a Getstatic operation.
11. A method as recited in claim 1, wherein said providing of said reference stack further comprises:
initializing entries of said reference stack to zero.
12. A method of tracking references to Java objects, said method comprising:
providing a reference stack associated with an execution stack, said reference stack being the same size of said execution stack;
determining whether at least one value should be stored in said reference stack, wherein said determining is performed during Bytecode verification; and
storing at least one value in said reference stack in an offset that is the same as an offset in said execution stack where said value is stored, when said determining determines that said at least one object should be stored in said reference stack.
13. A method as recited in claim 12, wherein said determining further comprises:
determining whether a new object is being instantiated;
determining whether a local variable is being set when it is determined that a new object is not being instantiated; and
determining whether a Getfield, Afield, Aload, Areturn, or a Getstatic operation is being performed when it is determined that a local variable is being set.
14. In an object-oriented programming environment, a reference stack suitable for storing references to objects of a computer program written in said object-oriented programming environment, wherein said reference stack corresponds to an execution stack of said computer program which is also suitable for storing references to objects of said computer program, and wherein at least one reference to an object is stored both on said reference stack and said execution stack.
15. A reference stack as recited in claim 14, wherein said programming environment is Java programming environment.
16. A reference stack as recited in claim 14, wherein said reference stack and execution stack have the same size.
17. A reference stack as recited in claim 16, wherein said size is 2, 4, or 8 Kilo Bytes.
18. A method for identifying references to Java objects, said method comprising:
reading a value stored in an entry of a reference stack;
determining whether said value is equal to another value that is stored in a corresponding entry of an execution stack; and
marking said value in said entry of said reference stack as a reference to a Java object when said determining determines that said value is equal to said another value stored in said corresponding entry of said execution stack.
19. A method as recited in claim 16, wherein said method comprises:
setting said value in said entry of said reference stack to zero when said determining determines that said value is not equal to said another value stored in said corresponding entry of said execution stack.
20. A method as recited in claim 16, wherein said marked value is marked for garbage collection application.
US09/851,663 2001-05-08 2001-05-08 Identifying and tracking object references in a java programming environment Expired - Lifetime US6804681B2 (en)

Priority Applications (3)

Application Number Priority Date Filing Date Title
US09/851,663 US6804681B2 (en) 2001-05-08 2001-05-08 Identifying and tracking object references in a java programming environment
PCT/US2002/014583 WO2002091189A2 (en) 2001-05-08 2002-05-08 Identifying and tracking object references in a java programming environment
GB0325831A GB2391981B (en) 2001-05-08 2002-05-08 Identifying and tracking object references in a java programming environment

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US09/851,663 US6804681B2 (en) 2001-05-08 2001-05-08 Identifying and tracking object references in a java programming environment

Publications (2)

Publication Number Publication Date
US20020169556A1 true US20020169556A1 (en) 2002-11-14
US6804681B2 US6804681B2 (en) 2004-10-12

Family

ID=25311333

Family Applications (1)

Application Number Title Priority Date Filing Date
US09/851,663 Expired - Lifetime US6804681B2 (en) 2001-05-08 2001-05-08 Identifying and tracking object references in a java programming environment

Country Status (3)

Country Link
US (1) US6804681B2 (en)
GB (1) GB2391981B (en)
WO (1) WO2002091189A2 (en)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030101186A1 (en) * 2001-11-29 2003-05-29 Lanzatella Thomas W. Methods and systems to acess storage objects
WO2005003960A3 (en) * 2003-07-01 2005-09-29 Univ Stuttgart Processor architecture for exact index identification
CN102591788A (en) * 2011-12-23 2012-07-18 飞天诚信科技股份有限公司 Method for recovering Java card garbage
US9575879B2 (en) 2012-05-15 2017-02-21 International Business Machines Corporation Managing memory in a computer system
US10884641B2 (en) 2019-04-16 2021-01-05 Paypal, Inc. Low latency gateway for an asynchronous orchestration engine using direct memory

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030066046A1 (en) * 2001-09-07 2003-04-03 Dawson Thomas Patrick Java virtual machine with non-volatile memory
US20040267694A1 (en) * 2003-06-30 2004-12-30 Satoshi Sakai Machine-readable medium & data management system and method for tracking real-world objects
US7313789B1 (en) * 2004-02-27 2007-12-25 Sun Microsystems, Inc. Methods and systems for reducing a program size
US20140196015A1 (en) * 2013-01-04 2014-07-10 Microsoft Corporation Declaration of lifetime of resource reference
US11809839B2 (en) 2022-01-18 2023-11-07 Robert Lyden Computer language and code for application development and electronic and optical communication

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5682535A (en) * 1989-09-01 1997-10-28 Amdahl Corporation Operating system and data base using table access method with dynamic binding
US5787431A (en) * 1996-12-16 1998-07-28 Borland International, Inc. Database development system with methods for java-string reference lookups of column names
US5900001A (en) * 1997-04-23 1999-05-04 Sun Microsystems, Inc. Method and apparatus for optimizing exact garbage collection using a bifurcated data structure
US5903899A (en) * 1997-04-23 1999-05-11 Sun Microsystems, Inc. System and method for assisting exact Garbage collection by segregating the contents of a stack into sub stacks
US6021469A (en) * 1996-01-24 2000-02-01 Sun Microsystems, Inc. Hardware virtual machine instruction processor
US6101580A (en) * 1997-04-23 2000-08-08 Sun Microsystems, Inc. Apparatus and method for assisting exact garbage collection by using a stack cache of tag bits
US6199075B1 (en) * 1997-05-30 2001-03-06 Sun Microsystems, Inc. Method and apparatus for generational garbage collection of a heap memory shared by multiple processors
US6275227B1 (en) * 1998-02-09 2001-08-14 International Business Machines Corporation Computer system and method for controlling the same utilizing a user interface control integrated with multiple sets of instructional material therefor
US6330709B1 (en) * 1998-03-30 2001-12-11 International Business Machines Corporation Virtual machine implementation for shared persistent objects
US6735758B1 (en) * 2000-07-06 2004-05-11 International Business Machines Corporation Method and system for SMP profiling using synchronized or nonsynchronized metric variables with support across multiple systems

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9717715D0 (en) 1997-08-22 1997-10-29 Philips Electronics Nv Data processor with localised memory reclamation

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5682535A (en) * 1989-09-01 1997-10-28 Amdahl Corporation Operating system and data base using table access method with dynamic binding
US6021469A (en) * 1996-01-24 2000-02-01 Sun Microsystems, Inc. Hardware virtual machine instruction processor
US5787431A (en) * 1996-12-16 1998-07-28 Borland International, Inc. Database development system with methods for java-string reference lookups of column names
US5900001A (en) * 1997-04-23 1999-05-04 Sun Microsystems, Inc. Method and apparatus for optimizing exact garbage collection using a bifurcated data structure
US5903899A (en) * 1997-04-23 1999-05-11 Sun Microsystems, Inc. System and method for assisting exact Garbage collection by segregating the contents of a stack into sub stacks
US6101580A (en) * 1997-04-23 2000-08-08 Sun Microsystems, Inc. Apparatus and method for assisting exact garbage collection by using a stack cache of tag bits
US6199075B1 (en) * 1997-05-30 2001-03-06 Sun Microsystems, Inc. Method and apparatus for generational garbage collection of a heap memory shared by multiple processors
US6275227B1 (en) * 1998-02-09 2001-08-14 International Business Machines Corporation Computer system and method for controlling the same utilizing a user interface control integrated with multiple sets of instructional material therefor
US6330709B1 (en) * 1998-03-30 2001-12-11 International Business Machines Corporation Virtual machine implementation for shared persistent objects
US6735758B1 (en) * 2000-07-06 2004-05-11 International Business Machines Corporation Method and system for SMP profiling using synchronized or nonsynchronized metric variables with support across multiple systems

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030101186A1 (en) * 2001-11-29 2003-05-29 Lanzatella Thomas W. Methods and systems to acess storage objects
US7165057B2 (en) * 2001-11-29 2007-01-16 Veritas Operating Corporation Methods and systems to access storage objects
WO2005003960A3 (en) * 2003-07-01 2005-09-29 Univ Stuttgart Processor architecture for exact index identification
US20080209149A1 (en) * 2003-07-01 2008-08-28 Universitat Stuttgart Processor Architecture for Exact Pointer Identification
US8473722B2 (en) 2003-07-01 2013-06-25 Universitaet Stuttgart Processor architecture for exact pointer identification
CN102591788A (en) * 2011-12-23 2012-07-18 飞天诚信科技股份有限公司 Method for recovering Java card garbage
US9575879B2 (en) 2012-05-15 2017-02-21 International Business Machines Corporation Managing memory in a computer system
US10031843B2 (en) 2012-05-15 2018-07-24 International Business Machines Corporation Managing memory in a computer system
US10037269B2 (en) 2012-05-15 2018-07-31 International Business Machines Corporation Managing memory in a computer system
US10372601B2 (en) 2012-05-15 2019-08-06 International Business Machines Corporation Managing memory in a computer system
US10909029B2 (en) 2012-05-15 2021-02-02 International Business Machines Corporation Managing memory in a computer system
US10884641B2 (en) 2019-04-16 2021-01-05 Paypal, Inc. Low latency gateway for an asynchronous orchestration engine using direct memory

Also Published As

Publication number Publication date
WO2002091189A2 (en) 2002-11-14
GB0325831D0 (en) 2003-12-10
US6804681B2 (en) 2004-10-12
GB2391981B (en) 2005-04-13
WO2002091189A3 (en) 2003-05-08
GB2391981A (en) 2004-02-18

Similar Documents

Publication Publication Date Title
US7120572B1 (en) Memory efficient program pre-execution verifier and method
US6446254B1 (en) Packaging memory image files
US6880155B2 (en) Token-based linking
AU4505801A (en) Language subset validation
US7020874B2 (en) Techniques for loading class files into virtual machines
US7003778B2 (en) Exception handling in java computing environments
US6804681B2 (en) Identifying and tracking object references in a java programming environment
US6959430B2 (en) Specialized heaps for creation of objects in object-oriented environments
US7065747B2 (en) Identifying references to objects during bytecode verification
US6901591B1 (en) Frameworks for invoking methods in virtual machines
US7096466B2 (en) Loading attribute for partial loading of class files into virtual machines
US20030079201A1 (en) Type checking in java computing environments
US7096467B2 (en) Initialization of Java classes in Java virtual machine environments
US7036120B2 (en) Two tier clusters for representation of objects in Java programming environments
US20030018679A1 (en) Enhanced virtual machine instructions
US6934726B2 (en) Storing and retrieving of field descriptors in Java computing environments
US7181724B2 (en) Representation of Java® data types in virtual machines
US6751790B2 (en) Frameworks for efficient representation of string objects in Java programming environments
US7197750B2 (en) Java Bytecode instruction for determining hashcode values
US7082597B2 (en) Representation of objects in a Java programming environment
WO2002037274A2 (en) Methods and apparatus for numeric constant value inlining in virtual machines
US20030041319A1 (en) Java bytecode instruction for retrieving string representations of java objects

Legal Events

Date Code Title Description
AS Assignment

Owner name: SUN MICROSYSTEMS, INC., CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:SOKOLOV, STEPAN;WALLMAN, DAVID;REEL/FRAME:011792/0184;SIGNING DATES FROM 20010503 TO 20010507

STCF Information on status: patent grant

Free format text: PATENTED CASE

CC Certificate of correction
FPAY Fee payment

Year of fee payment: 4

FPAY Fee payment

Year of fee payment: 8

AS Assignment

Owner name: ORACLE AMERICA, INC., CALIFORNIA

Free format text: MERGER AND CHANGE OF NAME;ASSIGNORS:ORACLE USA, INC.;SUN MICROSYSTEMS, INC.;ORACLE AMERICA, INC.;REEL/FRAME:037278/0801

Effective date: 20100212

FPAY Fee payment

Year of fee payment: 12