Title of Invention

SIMPLIFIED DEALLOCATION OF MEMORY FOR PROGRAMMING OBJECTS

Abstract A method of releasing the memory associated with a set of objects that have a hierarchical tree relationship, the method comprising the computer-implemented steps of: creating the set of objects that have the hierarchical tree relationship; allocating memory for each object; maintaining data that defines a relationship between the memory for each object; wherein the data reflects the organization of the hierarchical tree relationship; receiving a request to release memory associated with an object; and in response to receiving the request, accessing the data to determine what memory is associated with one or more objects that are descendants of the object, releasing the memory associated with the object and the memory associated with the descendants of the object; and wherein the data comprises child and sibling pointer pairs and the step of maintaining the data that defines the relationship further comprises: maintaining the child and sibling pointer pairs that define the relationship between the memory for each object; wherein releasing the memory associated with the object and the memory associated with the descendants of the object comprises using the child and sibling pointer pairs to determine the descendants of the object.
Full Text CROSS-REFERENCE TO RELATED APPLICATIONS
[0001] This application is related to and claims priority from U.S. Provisional Application
Serial Number 60/378,871, filed on May 7,2002; entitled "Simplified Deallocation of Memory
for Programming Objects", by Mohammad Shoaib Lari, Ravikanth Kasamsetty, and Srinath
Krishnaswamy the entire disclosure of which is hereby incorporated by reference for all
purposes as if fully set forth herein. This application is related to and claims priority from U.S.
Provisional Application Serial Number 60/384,646, filed on May 31, 2002, entitled "Simplified
Deallocation of Memory for Programming Objects", by Mohammad Shoaib Lari, Ravikanth
Kasamsetty, and Srinath Krishnaswamy, the entire disclosure of which is hereby incorporated
by reference for all purposes as if fully set forth herein.
FIELD OF THE INVENTION
[0002] The present invention relates to memory management for objects and more
specifically to a method of releasing the memory associated with a set of objects that have a
hierarchical tree relationship.
BACKGROUND OF THE INVENTION
[0003] Memory management refers to operations and processes that are performed to
manage the allocation and deallocation of memory for storing objects or other data
structures; Typically, most applications use the memory management code that is supplied
by the computer language that the applications are written in. however, the memory
management code supplied by the computer language may not have certain desirable
features such as optimization for performance, optimization for memory allocation, or
releasing memory for a set of objects that have a relationship to each other.
[0004] In the object-oriented wor4ld, supplying unique memory management code to
an application entails overriding the new and delete operators in every class that is used to
create objects in that application. The problem with this is that each class used to create
objects in the application require a separate copy of the memory management code to
override the new and delete operators in those classes. Having many copies of the

memory management code complicates not only routine maintenance but also
complicates providing enhancements. For example, whenever a bug is found in the
memory management code, the memory management code in each class has to be
modified.
[0005] When there is a relationship between a set of objects, an application program
has to track the relationship between these objects in order to release memory associated
with.the objects in the proper order. For example, for any given database connection, one
or more queries are executed involving statements, and resultsets are returned in response
to the queries. Therefore, a hierarchical relationship exists between a database
connection, and the related statements, resultsets, and streams. The connection, and
related statements, resultsets, and streams can each be represented by their own object
and these objects can be organized in a hierarchical tree that reflects the relationship
between these objects. For example, the connection object is the top object in a
hierarchical tree, the statement objects are directly under the connection object, the
resultset objects are directly under the statement objects and so on. Memory is needed for
executing methods associated with the objects or for perfonriing computations on behalf
of the objects, among other things. Therefore, memory is associated with each object in
the hierarchical tree (heremafter referred to as a "memory management tree").
[0006] A particular object and the objects below that object form a subtree of the
hierarchical tree. For example, a particular statement object and all the objects below that
particular statement object, such as resultset objects and stream objects, form a subtree of
a hierarchical tree. A subtree and the memory associated with the objects in the subtree
form a memory management subtree. When a particular object is no longer needed, the
memory management subtree, which includes the particular object, the objects below this
particular object (hereinafter referred to as "descendents" of the particular object), and the
memory associated with all of these objects, is released. For example, once an
application program is finished with a statement object, the statement object and all of the
statement object's descendants (e.g., resultset objects and stream objects) can be released.
The memory associated with these objects is also released. To do this, an application
program has to track the relationship between the objects and the associated memory.
The release of a memory management subtree needs to be done in such a way that other
objects in the hierarchical tree and their associated memory is not released. For example,
if a subtree that starts with a particular statement is released, the connection that this
particular statement is associated with and the other statements associated with that
connection should not be impacted.
[0007] Therefore it can be seen that there is a need not only for providing unique memory
management code for an application but to provide this memory management code in a way
that it is shared by all the objects that are instances of the classes used in the application.
Furthermore, it can be seen that there is a need for tracking the relationship between a set of
objects in a hierarchical tree and the memory associated with these objects in a way that is
transparent to an application program. In so doing, the application program can issue a
release for one particular object in the hierarchical tree that results in releasing the memory
management subtree that starts with that particular object.
[0007.1] US patent No. 6,327,606 issued to CHIDAMBARAN is incorporated herein by way
of reference.
SUMMARY OF THE INVENTION
[0010] Techniques are described for providing memory management for objects.
Specifically, techniques are described for providing common memory management code to
objects that are instances of different classed and for releasing a memory management
subtree that starts with a particular object in the memory management tree.
[0011] With regards to providing common memory management for objects, a template
(hereinafter referred to as a memory management template) is used to provide common pre-
processor memory management code. An abstract class, that defines memory management
interfaces, is passed into this memory management template to create a "specialized
template" during compilation. The specialized template is used to subclass a second class
(referred to hereinafter as a "specialized template subclasss"). The specialized semplate
subclasses contain memory management executables that are generated from the common
pre-processor memory management code during compile time. According to one
embodiment, the specialized template subclass provides implementations for the interfaces in
the abstract class. When a memory management operator, such as new or delete, of an
object that is an instance of the specialized template subclass, is invoked, the memory
management executable in the specialized template is executed.
[0012] For example, an abstract class A_Abs provides interfaces. A template MM
provides the common pre-processor memory management code that provides interfaces and
implementations for a common memory manager by overloading the new and delete

operators. When A_Abs is passed into the generic parameter "T" of template MM, a
specialized template, MM, is created. During the pre-processor phase of
compilation, the generic parameter T is replaced with the specified parameter A_Abs to
produce executable code in the specialized template MM. MM is used to
subclass A_STS, which is a specialized template subclass. When the new or delete operator of
an object that is an instance of class A_STS is invoked, the new or delete operator in
MM is executed instead of the new or delete operator supplied by the computer
language.
[0013] With regards to releasing a memory management subtree, memory is
associated with each object in a hierarchical tree. Data for the memory is maintained that
reflects the hierarchical tree relationship between the objects in the hierarchical tree. In so
doing, a subtree and the associated memory can be released with a single instruction, such
as a destructor, without an application program tracking the relationship between the objects
and the memory associated with the objects.
[00013.1] One prior approach for releasing memory used by a complex object is described in
U.S.Patent No.6,327,606 issued to Chidambaram. Chidambaram describes a mechanism for
allocating pools of dynamic memory on a "per-call" basis for complex objects returned from
procedure calls. Specifically, Chidambaram describes that the complex objects are created as
a result of remote procedure calls. Pools of dynamic memory are allocated, corresponding to
one or more of the remote procedure calls. Memory for said complex objects is allotted so
that each complex object is allocated memory within a pool that corresponds to the remote
procedure call that resulted in the creation of the complex object. Memory for the complex
objects is released by de-allocating the entire pools within which the complex objects are
allocated. In contrast, the techniques described herein provide for releasing a memory
management tree by using data that defines a relationship between the memory for each
object in the memory management three, where the data comprises child and sibling pointer
pairs. To release a memory management subtree that starts with a particular object, the
child and sibling pointer pairs are used to determine the descendants of the particular object,
and then the memory associated with the particular object and the memory associated with
the determined descendants of the particular object is released.

BRIEF DESCRIPTION OF THE DRAWINGS
[0014] The present invention is illustrated by way of example, and not by way of
limitation, in the figures of the accompanying drawings and in which like reference numerals
refer to similar elements and in which:
[0015] FIG. 1 is a block diagram of three class hierarchies that use a memory
management template to provide common memory management code to objects that are
instances of different classes according to an embodiment of the present invention;
[0016] FIG. 2 is a block diagram depicting a memory management template that
provides common pre-processor memory management code according to an embodiment of
the present invention;
[0017] FIG. 3 is a block diagram depicting abstract classes that are passed into the
memory management template as specific types to provide specialized templates according
to an embodiment of the present inventions;
[0018] FIG. 4 is a block diagram depicting definitions of specialized template subclasses
according to an embodiment of the present invention;
[0019] FIG. 5A and 5B are block diagrams depicting methods that implement the
definitions for these specialized template subclasses according to an embodiment of the
present invention;
[0020] FIG. 6 is a block diagram depicting an application program that creates objects,
which use common memory management according to an embodiment of the present
invention;
[0021] FIG. 7 is a block diagram depicting a set of objects that have a hierarchical tree
relationship to each other according to an embodiment of the present invention'

[0022] FIG. 8 is a block diagram depicting pieces of memory associated with each
object of a set of objects according to an embodiment of the present invention;
[0023] FIG. 9, 10A, and 10B are block diagrams depicting classes for creating objects
that have a hierarchical relationship and the memory associated with these objects
according to an embodiment of the present invention;
[0024] FIG. 11 is a block diagram depicting programs that create objects with classes
depicted in FIGS. 9, 10A, said 10B according to an embodiment of the present invention;
and
[0025] FIG. 12 is a computer system on which an embodiment of the invention may
be implemented.
DETAILED DESCRIPTION OF THE INVENTION
[0026] A method for providing common memory management code to objects. In the
following description, for the purposes of explanation, numerous specific details are set
forth in order to provide a thorough understanding of the present invention. It will be
apparent, however, that the present invention may be practiced without these specific
details. In other instances, well-known structures and devices are shown in. block
diagram form in order to avoid unnecessarily obscuring the present invention.
AN OVERVIEW OF A CLASS HIERARCHY USED IN COMMON MEMORY
MANAGEMENT
[0027] FIG. 1 is a block diagram depicting three class hierarchies that use a memory
management template to provide common memory management code to objects that are
instances of different classes according to an embodiment of the present invention. All of
the classes in the three class hierarchies, class hierarchy 1, class hierarchy 2, and class
hierarchy 3, provide code in one form or another. Providing code refers to processes or
acts that create code for subsequent compilation and execution. For example, a
programmer provides code by entering source, in the form of classes, into a file where it
may be accessed by a compiler for compilation. Providing code also refers to storing
code in libraries for later compilation of other applications that refer to the libraries.
[0028] The three class hierarchies are used to create objects that are instances of three
specialized template subclasses, A_STS:MM 130, B_STS:MM 160
and C_STS:MM 190 (the notation of these specialized template subclasses is in
the following order: 1) the name of the class, 2) a colon, and 3) the name of the
specialized template that is used to subclass the class). In the case of

A_STS:MM 130, A_STS is the name of the class that is used to create an object
and MM is the name of a specialized template subclass as will be described in
more detail hereinafter. These objects contain memory management executables that are
all generated from common pre-processor memory management code from a memory
management template as is described in more detail below.
[0029] At the top of each class hierarchy is an abstract class, A_Abs 110,
B_Abs_140, and C_Abs 170, that provides interfaces (113, 114,143,144, 173) for
methods (131, 132,161, 162, 191) that are implemented in the specialized template
subclasses (130, 160, 190). By definition, an abstract class defines interfaces for methods
and/or operators but does not provide implementations for the methods and/or operators.
[0030] The common pre-processor memory management code for the new and delete
operators is provided in a memory management template. The memory management
template shall be referred to as MM where T is a generic type parameter for passing a
specific type into the memory management template. During the pre-processor phase of
compilation, (1) the generic type parameter T is replaced with the specific type (e.g.,
AAbs, B_Abs, C_Abs) that is passed into the memory management template, (2) the
memory management template is replicated, and (3) the memory management template
replications are specialized using the specific type passed into the generic parameter T to
produce the specialized templates (120,150,180). For example, in the specialized
template MM 120, the abstract class A_Abs 110 is the specific type passed into
the generic parameter T.
[0031] Therefore, each specialized template (120, 150, and 180) has its own memory
management executable (121, 122, 151, 152,181, 182), which originated from the one
copy of memory management pre-processor code in the memory management template.
For example, new 121 and delete 122 are MM 120's own memory management
executable. In like manner, the specialized templates (120, 150,180) have their own
copies of data members, such as hndlp_ (123,153, and 183), used for storing data.
[0032] Although MM 120, MM 150, and MM 180 each
result in separate specialized templates that can be used to subclass another class (130,
160, 190), only one copy of the memory management pre-processor code exists.
Therefore, there is only one copy of memory management pre-processor code to maintain
or enhance. That one copy of memory management pre-processor code is in the memory
management template, as will be discussed in more detail.
[0033] According to one embodiment, only one specialized template and one abstract
class is provided. For example, assume that a generic memory management abstract

class, MM_Abs is used only to provide a generic interface, such as an interface for
creating an object of any type, and is used as the abstract class in the class hierarchies 1,
2, and 3. Then the specialized templates 120,150,180 would all be MM and
the specialized template subclasses would be A_STS:MM 130,
B_STS:MM 160, and C_STS:MM 190.
[0034] The specialized templates (120, 150, 180) are used to create specialized
template subclasses (130, 160, 190). According to one embodiment, the specialized
template subclasses (130, 160, 190) implement the non-memory management interfaces
(113, 114, 143, 144, 173) of the abstract classes (110, 140, 170) in methods (131, 132,
161, 162, 191). For example, MM 120 is used to subclass
A_STS:MM 130. The non-memory management interfaces 113 and 114 are
implemented in methods 131 and 132 as will be discussed in more detail. According to
one embodiment, one specialized template subclass (130, 160, or 190) provides a factory
method (131 or 161) to create objects that are instances of another specialized template
subclass. For example, create_B_STS 131, which is in A_STS:MM 130, is a
factory method that creates objects that are instances of class B_STS:MM 160.
As will be seen, factory methods provide a mechanism for minimizing the number of
times a pointer to memory, such as a common heap, is passed as a parameter when
invoking methods.
[0035] Throughout this application, various operations and actions are described as
being performed by or taking place at code and instructions. However, tins is just a
convenient way of stating that the code of instructions, or code compiled therefrom, when
executed, cause the operations and actions to be performed.
THE MEMORY MANAGEMENT TEMPLATE
[0036] FIG. 2 is a block diagram depicting a memory management template that
provides common pre-processor memory management code according to an embodiment
of the present invention. The memory management template, as depicted in FIG. 2,
provides the common pre-processor memory management code, which provides
interfaces (204, 205) and implementations (230, 240) for a common memory manager by
overloading the new and delete operators. Classes and templates typically have two
portions: (1) a definition portion that defines interfaces for methods and/or operators, and
(2) an implementation portion that defines the code for the method and/or operator. MM
Template 200 depicts the memory management template's definition. In the public
section of MM Template 200, three interfaces (202, 204, 205) are provided. One

interface 202 corresponds to the MM Template's Constructor 210. The other two
interfaces (new 204 and delete 205) correspond to common memory management
implementations (230 and 240). In the protected section, a data member, hndlp_ 206, is
provided. Data member hndlp_ 206 is used for storing a pointer to a heap or subheap
used by the common pre-processor memory management code (230, 240). "T" (201, 211,
231, 241) is the generic type parameter of the memory management template that is used
to create specialized templates MM, MM, and
MM, as shall be described in more detail hereinafter.
[0037] According to one embodiment, the common pre-processor memory
management code is provided in MM Template's new operator 230 and MM Template's
delete operator 240. MM Template's new operator 230 provides the implementation code
for the operator new interface 204. If no heap exists, the new operator 230 uses the
default memory manager of the language the code is implemented in to allocate memory
at instruction 232. If a heap does exist, specialized processing takes place at instruction
233. This specialized processing may entail subdividing the heap, executing specialized
perfonnance instructions, returning the pointer to an existing heap, or some other kind of
specialized processing. MM Template's delete operator 240 is the implementation code
for the operator delete interface 205. If a heap does exist, specialized processing takes
place at instruction 242. This specialized processing may entail releasing the heap,
releasing a subdivision of the heap, or some other kind of specialized processing.
ABSTRACT CLASSES
[0038] FIG. 3 is a block diagram depicting abstract classes that are passed into the
memory management template as specific types to provide specialized templates
according to an embodiment of the present invention. ConnectionAbs Class 300,
StatementAbs Class 310, and ResultsetAbs Class 320 are examples of abstract classes
that (1) provide interfaces that are implemented in the specialized template subclasses,
and (2) are passed into the MM Template 200 as specific types. According to one
embodiment, interfaces (301, 311) are provided in the abstract classes (300, 310, 320).
For example, the implementations for these interfaces (301, 311) are provided in the
specialized template subclass methods (510, 530). According to one embodiment, the
interfaces (301, 311) in the abstract classes and the corresponding implementations (510,
530) in the specialized template subclasses are for factory methods.

[0039] FIG. 4 is a block diagram depicting definitions of specialized template
subclasses according to an embodiment of the present invention. FIGS. 5 A and 5B are
block diagrams depicting methods that implement the definitions for these specialized
template subclasses according to an embodiment of the present invention. In this
example, three specialized template subclass definitions (400, 410,420) are depicted.
The specialized template subclasses are used to instantiate objects that access the
common memory management code (Note that at code fragments 401,411, and 421,
classes 400, 410, and 420 are subclasses of specialized templates). For example, if object
A is an instance of ConnectionSTS Class 400, object B is an instance of StatementsTS
Class 410, and object C is an instance of ResultsetSTS Class 420, then objects A, B, and
C have memory management executables that were all generated from the same common
pre-processor memory management code in the memory management template (200, 210,
230, 240) during compile time.
[0040] Each of the specialized template subclass definitions have a constructor
interface (402, 412, 422). The respective implementations of the constructor interfaces
are ConnectionSTS's Constructor 500, StatementSTS's Constructor 520, and
ResultsetSTS's Constructor 540. Constructors are used to create objects that are
instances of the classes the constructors belong to. One of the functions that constructors
may provide is the initialization of an object's data members. For example, constructors
500, 520, and 540 initialize data member hndlp_ 206 at instructions 501, 521, and 541 as
will be described in more detail. In an alternative embodiment, data member hndlp_ 206
is initialized at code fragment 212 when the MM Template's Constructor 210 is invoked
during the instantiation process for an object as will be described in more detail.
Constructors 500 and 520 initialize data members 405 and 415 at instructions 502 and
522 respectively.
[0041 ] According to object oriented programming, if an object is an instance of a
subclass, the constructors are called in the order of their inheritance hierarchy during the
instantiation process of the object. For example, if ConnectionSTS Class 400, which is a
subclass of MM, is used to create an object A, then ConnectionSTS :s
Constructor 500 is invoked after the superclass's constructor,
MM::MM, which is a specialized version of MM Template's
Constructor 210.
[0042] According to one embodiment, the specialized template subclasses provide
implementations of non-memory management interfaces that are in the abstract classes
while the MM template 200 provides interfaces and implementations (230,240) of the
memory management interfaces. For example, the specialized template subclass
A_STS:MM 130 provides implementations for non-memory management
interfaces, create_B_STS 113 and function_A 114, while MM provides
implementations of the memory management interfaces, new 111 and delete 112.
[0043] According to another embodiment, one abstract class is used to provide only
generic interfaces. For example, a generic abstract class, MM_Abs, could provide
generic interfaces, such as an interface for creating an object of any type or for
performing a type of process, and the generic parameter T in the memory management
template, MM, is replaced with MM_Abs to produce one specialized template
MM. In this case, the MMAbs would be passed into the specialized
template subclasses at code fragments 401,411, and 421.
[0044] According to one embodiment, the specialized template subclasses provide
factory methods (403, 413) for creating objects that are instances of other specialized
template subclasses. For example, the factory method createStatement 403 is used to
create an object that is an instance of StatementSTS Class 410 as will be described in
more detail. In creating objects that are instances of other specialized template
subclasses, the factory method implementations (510, 530) invoke the new operator 230,
at code fragments 511a and 532a respectively, to allocate memory for the objects and
subsequently invoke the constructors for the other specialized template subclasses, at
code fragments 511b and 532b respectively. For example, if factory method
createStatement 510, which is a method in ConnectioaSTS Class 400, is used to create an
object A, then code fragment 51 la invokes MM Template's new operator 230 to allocate
memory for object A and StatementSTS's Constructor 520 is invoked at code fragment
51 lb to "construct" object A. Then since StatementSTS Class 410 is a subclass of
K4M, a specialized form of MM Template's Constructor 210,
MM::MM, is invoked. According to one embodiment, when
MM::MM is invoked, hndlp_ 206 is initialized at code fragment 212.
AN OPERATIONAL EXAMPLE OF COMMON MEMORY MANAGEMENT
[0045] FIG. 6 is a block diagram depicting an application program that creates
objects, which use common memory management according to an embodiment of the
present invention. Application program 600 creates three such objects, a ConnectionSTS
object, a StatementSTS object, and a ResultsetSTS object, in a series of instructions (602,
S03, and 604). To summarize, a ConnectionSTS object, conn, is created at instruction

602. A factory method in conn is invoked, at instruction 603, to create a StatementSTS
object, stmt. Another factory method in stmt is invoked, at instruction 604, to create a
ResultsetSTS object, rs. All three objects contain memory management executables that
were generated from the common pre-processor memory management code and pointers
to a common heap as will be discussed in more detail.
[0046] The memory management executables were derived from the common pre-
processor code. For example, object conn contains memory management executables for
MM::operators new and delete, object stmt contains memory
management executables for MM::operators new and delete, and object
rs contains memory management executables for MM: operators new and
delete. All of these memory management executables were derived from the common
pre-processor memory management code as defined by the MM Template depicted in
FIG. 2.
[0047] According to one embodiment, a common heap is shared among the objects,
as will be discussed in more detail. According to one embodiment, the common heap is
shared by passing a pointer into the first instruction of the series of instructions (602, 603,
604) that create objects. For example, pointer pHl is initialized to a common heap at
instruction 601. According to one embodiment, the common heap is shared among
objects without passing a pointer into each instruction of the series of instructions as will
be discussed in more detail. According to another embodiment, the common heap is
shared among objects by passing a pointer into each instruction of the series of
instructions. This would be the case if pHl were present in the invocations of instructions
602, 603, and 604.
[0048] At instruction 601, the application program 600 initializes a pointer to a
common heap. At instruction 602, the application program 600 invokes a global
program, createConnection 610, that: (1) creates a ConnectionSTS object, conn, (2)
returns a pointer to the conn object, and (3) saves a pointer to this common heap in the
newly created conn object.
[0049] For example, the global program, createConnection 610, creates the conn
object at instruction 611. Instruction 611 has two parts: an invocation of
MM::new at code fragment 61 la and an invocation of
ConnectionSTS's constructor 500 at code fragment 611b. MM::new is
a specialized version of MM Template's new operator 230, which allocates memory for
the conn object at instruction 232 and returns a pointer to conn. ConnectionSTS's
constructor 500 "constructs" conn by initializing MM::hndlp_ 206 at

instruction 501 and by optionally initializing other data members at instruction 502.
Since ConnectionSTS Class 400 is a subclass of MM 401, a specialized
version of the MM Template's Constructor 210 is invoked.
[0050] At instructions 603 and 604, factory methods in objects are used to, among
other things: (1) create other objects, and (2) communicate a pointer to the common heap
to each of these other objects. To create objects, stmt and rs, factory methods,
createStatement method 510 and execQuery method 540, are invoked at instructions 603
and 604 respectively. To communicate a pointer to the common heap, factory methods,
createStatement and execQuery, propagate the pointer from one object to the next created
object. For example, object conn is created at instruction 602 and used to communicate a
common heap pointer to object stmt at instruction 603. This is accomplished by passing
the pointer to the common heap member, pH1, to createConnection 610 at instruction
602. Code fragment 611a results in calling MM::new. Code fragment
61 lb results in calling the ConnectionsSTS's Constructor 500 where the pointer to the
common heap is also saved in the object conn. ConnectionSTS's Constructor 500 saves
the common heap pointer in MM::hndlp_ at instruction 501. Then the
saved pointer to the common heap is propagated from object conn to object stmt at
• instruction 603 when the factory method createStatement in conn is used to create object
stmt. For example, at code fragment 51 la, MM::hdnlp_, which is a
specialized version of hndlp_ 206, is passed into the new operator, which allocates
memory for the stmt object. Similar processing occurs with regards to object rs at
instruction 604.
A HIERARCHICAL TREE OF OBJECTS
[0051] FIG. 7 is a block diagram depicting a set of objects that have a hierarchical
tree relationship to each other (hereinafter referred to as a "hierarchical tree") according
to an embodiment of the present invention. For example, for any given database
connection, one or more queries are executed involving statements. Resultsets are
returned in response to the queries. Streams are obtained from resultsets in order to
coordinate reading large data objects, such as Binary Large Objects, that cannot be read in
one function call. Therefore, a hierarchical relationship exists between a database
connection, and the related statements, resultsets, and streams. The connection, and
related statements, resultsets, and streams can each be represented by an object and the
objects can be organized in a hierarchical tree that reflects the relationship between the
objects.

[0052] For example, Conn_1 is a connection object. Stmt_1, Stmt_2, and Stmt_3 are
statement objects that represent statements used in queries for this connection. RS_1 and
RS_2 are resultset objects that represent resultsets returned in response to a query using
Stmt_l. RS_3 and R8_4 are resultset objects that represent resultsets returned in
response to a query using Stmt_3. Streams, Stream_l and Stream_2, are obtained from
resultsets, RS_1 and RS_4 respectively. Memory (H0, H1, H2, H3, H11, H12, H31, H32,
H111, H321), used for executing methods and for performing computations among other
things, is associated with each object in a hierarchical tree. For example, memory HO is
associated with object Conn_l, memory HI is associated with object Stmt_l, and so on.
MEMORY ASSOCIATED WITH A HIERARCHICAL TREE OF OBJECTS
[0053] FIG. 8 is a block diagram depicting pieces of memory associated with each
object of a set of objects according to an embodiment of the present invention. The
pieces of memory (hereinafter referred to as a hierarchical memory tree) are organized to
reflect the hierarchical tree relationship of the set of objects. According to one
embodiment, FIG. 8 depicts the hierarchical memory tree associated with the set of
objects that are depicted in FIG. 7. For example, HO is one piece of memory associated
with object Conn_l; HI, H2, and H3 are pieces of memory associated with the statement
objects Stmt_l, Stmt_2, and Stmt_3 respectively; HI 1, H12, H31, and H32 are pieces of
memory associated with the resultset objects RS_1, RS_2, RS_3, and RS_4 respectively;
H111 and H321 are pieces memory associated with stream objects Stream_l and
Stream_2.
[0054] According to one embodiment, a heap is one piece of memory associated with
the top object of a hierarchical tree and subheaps of this heap are the pieces of memory
associated with the rest of tire objects. For example in FIG. 7, HO, which is associated
with the top object Conn_l, would be a heap, and the memory associated with the rest of
the objects (HI, H2, H3, etc.) are subheaps of HO.
[0055] Hierarchical data is maintained that determines the hierarchy of the
hierarchical memory tree, and is maintained in such a way that the hierarchical memory
tree reflects the hierarchical relationship between the set of objects in the hierarchical
tree. This data could be among other tilings pointers and references that are maintained:
(1) in data members of the set of objects, (2) in the memory associated with the set of
objects, or (3) in one or more tables.
[0056] By maintaining hierarchical data for the memory that reflects the hierarchical
relationship of the set of objects, a memory subtree can be released with a single request,

such as an object destructor or a function, without impacting other objects in the
hierarchical tree or the memory associated with the other objects in the hierarchical tree.
[0057] According to one embodiment, this hierarchical data is a pair of sibling and
children pointers associated with the heap and each subheap in the hierarchical memory
tree. The heap and each subheap points to a list of its own children and its own siblings.
For example, the children of heap HO, which is associated with Conn_l, are subheaps HI,
H2, and H3. The siblings of subheap HI are subheaps H2 and H3.
RELEASING MEMORY ASSOCIATED WITH A MEMORY SUBTREE USING A
SINGLE REQUEST
[0058] FIG. 9, 10A, and 10B are block diagrams depicting classes for creating objects
that have a hierarchical relationship and the memory associated with these objects
according to an embodiment of the present invention. FIG. 9 is a block diagram depicting
class definitions for the connection, statement, and resultset classes. FIGS. 10A and 10B
are block diagrams depicting the methods associated with these classes. In this example,
the classes are used to create connection, statement, and resultset objects. FIG. 11 is a
block diagram depicting programs that create objects with classes depicted in FIGS. 9,
10 A. and 10B according to an embodiment of the present invention.
[0059] According to one embodiment, releasing memory associated with a memory
subtree in a single request is performed in conjunction with common memory
management. In this case, the Connection class 900, Statement class 910, and the
Resultset Class 920 would be subclasses of specialized templates. For example, when
Connection class 900 is used to create an object A, the new operator 230 is invoked.
Likewise, when object A is destroyed, a destructor in Connection class 900 (not shown) is
invoked, which in turn invokes the delete operator 240. Then the delete operator 240, or
a function the delete operator 240 invokes, traverses the hierarchical data to release the
memory associated with object A and the subtree associated with object A. For example,
if the destructor for Stmt_l, as depicted in FIG. 7, is invoked from an application
program, the destructor can use the children and sibling pointers, as depicted in FIG. 8, to
determine that subheaps HI, HI 1, H12, HI 11 should be released.
[0060] According to another embodiment, releasing memory associated with a
memory subtree in a single request is performed without common memory management
code. For example, the Connection class 900, Statement class 910, and the Resultset
Class 920 are not subclasses of specialized templates.
[0061] A pointer (906, 916, 923) to memory is associated with each class (900, 910,
920) that is used to create objects in a hierarchical tree. For example, the connection class
900, statement class 910, and the resultset class 920 all have pointers (906, 916, 923) to
either a heap or a subheap. Constructors (1000, 1020, 1040) are used to initialize these
pointers (906, 916, 923) using initialization instructions (1001, 1021, 1041). For
example, connection's constructor 1000, statement's constructor 1020, and resultset's
constructor 1040 initialize their respective memory pointers to point to heaps or subheaps
in initialization instructions 1001, 1021, and 1041. Factory methods (1010, 1030) are
used not only to create new objects of other class types but also to allocate memory for
the newly created objects (1011, 1032) and maintain hierarchical data (907, 908, 917,
918, 924, 925) for the memory that reflects the hierarchical relationship between the set
of objects. For example, connection's createStatement method 1010: (1) creates anew
subheap of the connection object's heap (906) at instruction 1011, (2) creates a statement
object and associates the newly created subheap with the statement object at instruction
1012, and (3) maintains hierarchical data, in the form of children and sibling pointers
(907 and 908), for the subheaps so that the subheaps reflect the hierarchical relationship
between the set of objects at instruction 1013.
[0062] By creating objects in factory methods and maintaining hierarchical data in
either the memory associated with these objects or as data members of the objects
themselves, a subtree and its associated memory can be released with a single request.
An example of maintaining the hierarchical data in the memory has already been
described herein. Assuming that the hierarchical data is maintained as data members in
the objects, a function could use the data members in objects Stmt_l, RS_1, RS_2, and
Stream_l, to determine that subheaps HI, HI 1, H12, HI 11 should be released.
OTHER EMBODIMENTS
[0063] According to another embodiment, all the memory for a hierarchical memory'
tree is in a single piece of contiguous memory, which is subdivided into separate pieces of
memory that are associated with each object in the hierarchical tree. Pointers are used to
maintain the relationship between the pieces of memory associated with the individual
objects. Any known method for maintaining these pointers may be used such as
maintaining the pointers within the single piece of memory itself or maintaining the
pointers in a table.

HARDWARE OVERVIEW
[0064] Figure 12 is a block diagram that illustrates a computer system 1200 upon
which an embodiment of the invention maybe implemented. Computer system 1200
includes a bus 1202 or other communication mechanism for communicating information,
and a processor 1204 coupled with bus 1202 for processing information. Computer
system 1200 also includes a main memory 1206, such as a random access memory
(RAM) or other dynamic storage device, coupled to bus 1202 for storing information and
instructions to be executed by processor 1204. Main memory 1206 also may be used for
storing temporary variables or other intermediate information during execution of
instructions to be executed by processor 1204. Computer system 1200 further includes a
read only memory (ROM) 1208 or other static storage device coupled to bus 1202 for
storing static information and instructions for processor 1204. A storage device 1210,
such as a magnetic disk or optical disk, is provided and coupled to bus 1202 for storing
information and instructions.
[0065] Computer system 1200 may be coupled via bus 1202 to a display 1212, such
as a cathode ray tube (CRT), for displaying information to a computer user. An input
device 1214, including alphanumeric and other keys, is coupled to bus 1202 for
communicating information and command selections to processor 1204. Another type of
user input device is cursor control 1216, such as a mouse, a trackball, or cursor direction
keys for communicating direction information and command selections to processor 1204
and for controlling cursor movement on display 1212. This input device typically has
two degrees of freedom in two axes, a first axis (e.g., x) and a second axis (e.g., y), that
allows the device to specify positions in a plane.
[0066 j The invention is related to the use of computer system 1200 for implementing
the techniques described herein. According to one embodiment of the invention, those
techniques are performed by computer system 1200 in response to processor 1204
executing one or more sequences of one or more instructions contained in main memory
1206. Such instructions may be read into main memory 1206 from another computer-
readable medium, such as storage device 1210. Execution of the sequences of
instructions contained in main memory 1206 causes processor 1204 to perform the
process steps described herein. In alternative embodiments, hard-wired circuitry may be
used in place of or in combination with software instructions to implement the invention.
Thus, embodiments of the invention are not limited to any specific combination of
hardware circuitry and software.

[0067] The term "computer-readable medium" as used herein refers to any medium
that participates in providing instructions to processor 1204 for execution. Such a
medium may take many forms, including but not limited to, non-volatile media, volatile
media, and transmission media. Non-volatile media includes, for example, optical or
magnetic disks, such as storage device 1210. Volatile media includes dynamic memory,
such as main memory 1206. Transmission media includes coaxial cables, copper wire
and fiber optics, including the wires that comprise bus 1202. Transmission media can
also take the form of acoustic or light waves, such as those generated during radio-wave
and infra-red data communications.
[0068] Common forms of computer-readable media include, for example, a floppy
disk, a flexible disk, hard disk, magnetic tape, or any other magnetic medium, a CD-
ROM, any other optical medium, pimchcards, papertape, any other physical medium with
patterns of holes, a RAM, a PROM, and EPROM, a FLASH-EPROM, any other memory
chip or cartridge, a carrier wave as described hereinafter, or any other medium from
which a computer can read.
[0069] Various forms of computer readable media may be involved in carrying one or
more sequences of one or more instructions to processor 1204 for execution. For
example, the instructions may initially be carried on a magnetic disk of a remote
computer. The remote computer can load the instructions into its dynamic memory and
send the instructions over a telephone line using a modem. A modem local to computer
system 1200 can receive the data on the telephone line and use an infra-red transmitter to
convert the data to an infra-red signal. An infra-red detector can receive the data carried
in the infra-red signal and appropriate circuitry can place the data on bus 1202. Bus 1202
carries the data to main memory 1206, from which processor 1204 retrieves and executes
the instructions. The instructions received by main memory 1206 may optionally be
stored on storage device 1210 either before or after execution by processor 1204.
[0070] Computer system 1200 also includes a communication interface 1218 coupled
to bus 1202. Communication interface 1218 provides a two-way data communication
coupling to a network link 1220 that is connected to a local network 1222. For example,
communication interface 1218 may be an integrated services digital network (ISDN) card
or a modem to provide a data communication connection to a corresponding type of
telephone line. As another example, communication interface 1218 maybe a local area
network (LAN) card to provide a data communication connection to a compatible LAN.
Wireless links may also be implemented. In any such implementation, commumcation
interface 1218 sends and receives electrical, electromagnetic or optical signals that carry
digital data streams representing various types of information.
[0071] Network link 1220 typically provides data communication through one or
more networks to other data devices. For example, network link 1220 may provide a
connection through local network 1222 to a host computer 1224 or to data equipment
operated by an Internet Service Provider (ISP) 1226. ISP 1226 in turn provides data
communication services through the world wide packet data communication network now
commonly referred to as the "Internet" 1228. Local network 1222 and Internet 1228 both
use electrical, electromagnetic or optical signals that carry digital data streams. The
signals through the various networks and the signals on network link 1220 and through
communication interface 1218, winch carry the digital data to and from computer system
1200, are exemplary forms of carrier waves transporting the information.
[0072] Computer system 1200 can send messages and receive data, including
program code, through the network(s), network link 1220 and communication interface
1218. In the Internet example, a server 1230 might transmit a requested code for an
application program through Internet 1228, ISP 1226, local network 1222 and
communication interface 1218.
[0073] The received code may be executed by processor 1204 as it is received, and/or
stored in storage device 1210, or other non-volatile storage for later execution. In this
manner, computer system 1200 may obtain application code in the form of a carrier wave.
[0074] In the foregoing specification, the invention has been described with reference
to specific embodiments thereof. It will, however, be evident that various modifications
and changes may be made thereto without departing from the broader spirit and scope of
the invention. The specification and drawings are, accordingly, to be regarded in an
illustrative rather than a restrictive sense.

WE CLAIM
1. A method of releasing the memory associated with a set of objects that have a hierarchical
tree relationship, the method comprising the computer-implemented steps of:
creating the set of objects that have the hierarchical tree relationship;
allocating memory for each object;
maintaining data that defines a relationship between the memory for each object; wherein
the data reflects the organization of the hierarchical tree relationship;
receiving a request to release memory associated with an object; and
in response to receiving the request,
accessing the data to determine what memory is associated with one or
more objects that are descendants of the object,
releasing the memory associated with the object and the memory
associated with the descendants of the object; and
wherein the data comprises child and sibling pointer pairs and the step of
maintaining the data that defines the relationship further comprises:
maintaining the child and sibling pointer pairs that define the relationship
between the memory for each object;
wherein releasing the memory associated with the object and the memory
associated with the descendants of the object comprises using the child
and sibling pointer pairs to determine the descendants of the object.
2. The method as claimed in claim 1, wherein memory associated with an object at the top
of the hierarchical tree relationship is a heap and memory associated with the rest of the
objects in the hierarchical tree relationship are subheaps of the heap, and the step of
allocating further comprises:
allocating the heap for the object at the top and allocating the subheaps of the
heap for the rest of the objects in the hierarchical tree relationship.
3. The method as claimed in claim 1, wherein the step of accessing the data comprises:
accessing the child and sibling pointer pairs to determine the one or more objects that
are descendants of the object.
4. The method as claimed in claim 1, wherein the step of allocating comprises:
allocating the memory for each object by invoking a memory management
executable that was generated from pre-processor code.
5. The method as claimed in claim 4, wherein the memory management executable is a
new operator, and the step of allocating comprises:
allocating the memory for each object by invoking the new operator.
6. The method as claimed in claim 1, wherein the step of releasing comprises:
releasing the memory associated with the object and the memory management
executable that was generated from pre-processor code.
7. The method as claimed in claim 6, wherein the memory management executable is a
delete operator, and the step of releasing comprises:
releasing the memory associated with the object and the memory associated with the
descendants of the object by invoking the delete operator.
8. The method as claimed in claim 6, wherein the step of releasing comprises:
causing the release of the memory associated with the object and the memory associated
with the descendants of the object by invoking a single request.
9. The method as claimed in claim 8, wherein the single request is a destructor for the
object, and the step of releasing comprises:
releasing the memory associated with the object and the memory associated with the
descendants of the object by invoking the destructor.
10. The method as claimed in claim 1, wherein memory for a particular object is created in a
factory method and the step of allocating comprises:
allocating the memory in the factory method for the particular object.
11. The method as claimed in claim 1, wherein at least a portion of the data that defines the
relationship is maintained in a factory method, and the step of maintaining the data
comprises:
maintaining at least the portion of the data that defines the relationship between the
memory for the particular object and the memory for the rest of the objects is performed
in the factory method.
12. The method as claimed in claim 1, wherein the data is maintained in data members of the
set of objects and the step of maintaining the data that defines the relationship comprises:
maintaining the data members to define the relationship between the memory for each
object.
13. The method as claimed in claim 1, wherein the data is maintained in the memory for each
object and the step of maintaining the data that defines the relationship comprises:
maintaining the data in the memory for each object to define the relationship between the
memory for each object.


Documents:

1633-KOLNP-2004-(17-10-2011)-CORRESPONDENCE.pdf

1633-KOLNP-2004-ABSTRACT 1.1.pdf

1633-kolnp-2004-abstract.pdf

1633-KOLNP-2004-AMENDED CLAIMS.pdf

1633-kolnp-2004-assignment.pdf

1633-kolnp-2004-correspondence.pdf

1633-KOLNP-2004-DESCRIPTION (COMPLETE) 1.1.pdf

1633-kolnp-2004-description (complete).pdf

1633-kolnp-2004-drawings.pdf

1633-KOLNP-2004-EXAMINATION REPORT REPLY RECIEVED 1.1.pdf

1633-kolnp-2004-examination report.pdf

1633-kolnp-2004-form 1.pdf

1633-KOLNP-2004-FORM 13-1.2.pdf

1633-KOLNP-2004-FORM 13-1.3.pdf

1633-kolnp-2004-form 13.pdf

1633-kolnp-2004-form 18.pdf

1633-KOLNP-2004-FORM 2.1.1.pdf

1633-kolnp-2004-form 2.pdf

1633-kolnp-2004-form 26.pdf

1633-kolnp-2004-form 3.pdf

1633-KOLNP-2004-FORM 5 1.1.pdf

1633-kolnp-2004-form 5.pdf

1633-KOLNP-2004-FORM-27.pdf

1633-kolnp-2004-form.1.pdf

1633-kolnp-2004-granted-abstract.pdf

1633-kolnp-2004-granted-claims.pdf

1633-kolnp-2004-granted-description (complete).pdf

1633-kolnp-2004-granted-drawings.pdf

1633-kolnp-2004-granted-form 1.pdf

1633-kolnp-2004-granted-form 2.pdf

1633-kolnp-2004-granted-specification.pdf

1633-KOLNP-2004-OTHERS.pdf

1633-KOLNP-2004-PA 1.2.pdf

1633-KOLNP-2004-PETITION UNDER RULE 137-1.1.pdf

1633-KOLNP-2004-PETITION UNDER RULE 137.pdf

1633-kolnp-2004-reply to examination report.pdf

1633-KOLNP-2004-REPLY TO EXAMINATION REPORT1.1.pdf

1633-kolnp-2004-specification.pdf


Patent Number 250193
Indian Patent Application Number 1633/KOLNP/2004
PG Journal Number 50/2011
Publication Date 16-Dec-2011
Grant Date 14-Dec-2011
Date of Filing 02-Nov-2004
Name of Patentee ORACLE INTERNATIONAL CORPORATION
Applicant Address 500 ORACLE PARKWAY, M/S5OP7 REDWOOD SHORES, CALIFORNIA
Inventors:
# Inventor's Name Inventor's Address
1 LARI, MOHAMMED, SHOAIB STARR KING CIRCLE, PALO ALTO, CA 94306
2 KRISHNASWAMY, SRINATH 550 SHANNON WAY, A PT. NO. 6106, FREMONT, CA 94065
3 KASAMSETTY, RAVILANTH 4631 MARITIME LOOP, UNION CITY, CA 94587
PCT International Classification Number G06F 12/02
PCT International Application Number PCT/US2003/013276
PCT International Filing date 2003-04-28
PCT Conventions:
# PCT Application Number Date of Convention Priority Country
1 10/209,514 2002-07-30 U.S.A.
2 60/384,646 2002-05-31 U.S.A.
3 60/378,871 2002-05-07 U.S.A.