# US 10,769,180 B2 · Efficient dataflow processing for objects

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,769,180 B2
- Document ID: US10769180B2
- Status: Granted
- Kind: B2
- Application number: 15/423,523
- Filed: 2017-02-02
- Published: 2018-08-02
- Granted: 2020-09-08
- Earliest claimed: 2017-02-02
- Assignees: International Business Machines Corporation
- Applicants: International Business Machines Corporation
- Inventors: Ronald J. Barber; Rene Mueller; Vijayshankar Raman; Richard S. Sidle; Pinar Tozun
- Web page: https://patentgrep.com/patent/US10769180B2

## CPC

- G06F 16/289: {Object oriented databases}
- G06F 9/4488: {Object-oriented}
- G06F 9/451: Execution arrangements for user interfaces
- G06F 9/45508: {Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation}
- G06F 9/46: Multiprogramming arrangements
- G06F 11/14: Error detection or correction of the data by redundancy in operations (error detection or correction of the data by redundancy in hardware G06F11/16)
- G06F 16/235: {Update request formulation}
- G06F 16/288: {Entity relationship models}
- G06F 8/41: Compilation
- G06F 2201/80: Database-specific techniques
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

One embodiment provides a method comprising adjusting a runtime of a dataflow processing environment to operate on multiple batches of objects. The method further comprises pre-allocating one or more vectors of objects, and processing the multiple batches one at a time. The one or more vectors of objects are re-used during processing of each batch.

## Claims

### Claim 1

A method comprising:
changing a runtime of a distributed parallel batch-based dataflow processing environment to operate on multiple batches of object-oriented application objects, wherein the changed runtime provides that each processing thread uses its own vector of object-oriented application objects to process its own batches of object-oriented application objects, and each object is an instance of a class that is nested containing other classes;
pre-allocating one or more vectors of object-oriented application objects for nested classes a single time, wherein the one or more vectors are extendible;
assigning the one or more vectors of object-oriented application objects to a processing thread that processes an object-oriented application; and
processing the multiple batches one at a time by the processing thread, wherein the one or more vectors of object-oriented application objects are re-used multiple times during processing of each new batch of object-oriented application objects by the processing thread;
wherein a string is implemented as a complex object, the string is nested in an object using a serialized format in which all strings of a batch are concatenated together into a growable array, and the processing thread completes processing each batch before a next batch enters a pipeline of the processing thread.

### Claim 2 (depends on 1)

The method of claim 1, wherein each object-oriented application object of each batch is a complex object with one or more levels of nesting and re-use of the one or more vectors of object-oriented application objects eliminates memory allocation and garbage collection in the distributed parallel dataflow batch-based processing environment.

### Claim 3 (depends on 2)

The method of claim 2, further comprising:
scanning a class hierarchy of the complex object to determine a set of vectors to allocate with one vector per class.

### Claim 4 (depends on 3)

The method of claim 3, wherein the allocated set of vectors is used as a common location to place object-oriented application objects during processing of each of the multiple batches, and content at each level of nesting of the complex object is placed in a vector allocated for a corresponding class in the class hierarchy.

### Claim 5 (depends on 2)

The method of claim 2, wherein the complex object further comprises at least one of a commonly used object-oriented application object type, or an array, and data structures are created for the complex object such that object-oriented application object reuse is enabled in the distributed parallel batch-based dataflow processing environment with the changed runtime.

### Claim 6 (depends on 1)

The method of claim 1, wherein the one or more vectors of object-oriented application objects are extendible, and if a subsequent batch of object-oriented application objects has more content than will fit in a currently allocated size of a vector of object-oriented application objects, the size of the vector of object-oriented application objects is extended such that the vector of object-oriented application objects can hold content of the subsequent batch of object-oriented application objects.

### Claim 7 (depends on 2)

The method of claim 2, wherein:
the complex object is an instance of a polymorphic class having different distinct sub-types; and
the method further comprises:
for each distinct sub-type:
pre-allocating a corresponding separate vector of object-oriented application objects; and
processing, per sub-type, a batch of object-oriented application objects having the distinct sub-type independently using the corresponding vector of object-oriented application objects;
combining processing results for each vector of object-oriented application objects pre-allocated for each distinct sub-type; and
virtual function calls are reduced in presence of polymorphism.

### Claim 8

A system comprising:
at least one processor; and
a non-transitory processor-readable memory device storing instructions that when executed by the at least one processor causes the at least one processor to perform operations including:
changing a runtime of a distributed parallel batch-based dataflow processing environment to operate on multiple batches of object-oriented application objects, wherein the changed runtime provides that each processing thread uses its own vector of object-oriented application objects to process its own batches of object-oriented application objects, and each object is an instance of a class that is nested containing other classes;
pre-allocating one or more vectors of object-oriented application objects for nested classes a single time;
assigning the one or more vectors of object-oriented application objects to a processing thread that processes an object-oriented application; and
processing the multiple batches one at a time by the processing thread, wherein the one or more vectors of object-oriented application objects are re-used multiple times during processing of each new batch of object-oriented application objects by the processing thread;
wherein a string is implemented as a complex object, the string is nested in an object using a serialized format in which all strings of a batch are concatenated together into a growable array, and the processing thread completes processing each batch before a next batch enters a pipeline of the processing thread.

### Claim 9 (depends on 8)

The system of claim 8, wherein each object-oriented application object of each batch is a complex object with one or more levels of nesting and re-use of the one or more vectors of object-oriented application objects eliminates memory allocation and garbage collection in the distributed parallel dataflow batch-based processing environment.

### Claim 10 (depends on 9)

The system of claim 9, the operations further comprising:
scanning a class hierarchy of the complex object to determine a set of vectors to allocate with one vector per class.

### Claim 11 (depends on 10)

The system of claim 10, wherein the allocated set of vectors is used as a common location to place object-oriented application objects during processing of each of the multiple batches, and content at each level of nesting of the complex object is placed in a vector allocated for a corresponding class in the class hierarchy.

### Claim 12 (depends on 9)

The system of claim 9, wherein the complex object further comprises at least one of a commonly used object-oriented application object type, or an array, and data structures are created for the complex object such that object-oriented application object reuse is enabled in the distributed parallel batch-based dataflow processing environment with the changed runtime.

### Claim 13 (depends on 8)

The system of claim 8, wherein the one or more vectors of object-oriented application objects are extendible, and if a subsequent batch of object-oriented application objects has more content than will fit in a currently allocated size of a vector of object-oriented application objects, a size of the vector of object-oriented application objects is extended such that the vector of object-oriented application objects can hold content of the subsequent batch of object-oriented application objects.

### Claim 14 (depends on 9)

The system of claim 9, wherein:
the complex object is an instance of a polymorphic class having different distinct sub-types; and
the operations further comprise:
for each distinct sub-type:
pre-allocating a corresponding separate vector of object-oriented application objects; and
processing, per sub-type, a batch of object-oriented application objects having the distinct sub-type independently using the corresponding vector of object-oriented application objects;
combining processing results for each vector of object-oriented application objects pre-allocated for each distinct sub-type; and
virtual function calls are reduced in presence of polymorphism.

### Claim 15

A computer program product comprising a computer-readable hardware storage medium having program code embodied therewith, the program code being executable by a computer to implement a method comprising:
changing a runtime of a distributed parallel batch-based dataflow processing environment to operate on multiple batches of object-oriented application objects, wherein the changed runtime provides that each processing thread uses its own vector of object-oriented application objects to process its own batches of object-oriented application objects, and each object is an instance of a class that is nested containing other classes;
pre-allocating one or more vectors of object-oriented application objects for nested classes a single time;
assigning the one or more vectors of object-oriented application objects to a processing thread that processes an object-oriented application; and
processing the multiple batches one at a time by the processing thread, wherein the one or more vectors of object-oriented application objects are re-used multiple times during processing of each new batch of object-oriented application objects by the processing thread;
wherein a string is implemented as a complex object, the string is nested in an object using a serialized format in which all strings of a batch are concatenated together into a growable array, and the processing thread completes processing each batch before a next batch enters a pipeline of the processing thread.

### Claim 16 (depends on 15)

The computer program product of claim 15, wherein:
each object-oriented application object of each batch is a complex object with one or more levels of nesting and re-use of the one or more vectors of object-oriented application objects eliminates memory allocation and garbage collection in the distributed parallel dataflow batch-based processing environment;
the complex object further comprises at least one of a commonly used object-oriented application object type, or an array; and
data structures are created for the complex object such that object-oriented application object reuse is enabled in the distributed parallel batch-based dataflow processing environment with the changed runtime.

### Claim 17 (depends on 16)

The computer program product of claim 16, the method further comprising:
scanning a class hierarchy of the complex object to determine a set of vectors to allocate with one vector per class.

### Claim 18 (depends on 17)

The computer program product of claim 17, wherein the allocated set of vectors is used as a common location to place object-oriented application objects during processing of each of the multiple batches, and content at each level of nesting of the complex object is placed in a vector allocated for a corresponding class in the class hierarchy.

### Claim 19 (depends on 15)

The computer program product of claim 15, wherein the one or more vectors of object-oriented application objects are extendible, and if a subsequent batch of object-oriented application objects has more content than will fit in a currently allocated size of a vector of object-oriented application objects, a size of the vector of object-oriented application objects is extended such that the vector of object-oriented application objects can hold content of the subsequent batch of object-oriented application objects.

### Claim 20 (depends on 16)

The computer program product of claim 16, wherein:
the complex object is an instance of a polymorphic class having different distinct sub-types; and
the method further comprises:
for each distinct sub-type:
pre-allocating a corresponding separate vector of object-oriented application objects; and
processing, per sub-type, a batch of object-oriented application objects having the distinct sub-type independently using the corresponding vector of object-oriented application objects;
combining processing results for each vector of object-oriented application objects pre-allocated for each distinct sub-type; and
virtual function calls are reduced in presence of polymorphism.
