-
Notifications
You must be signed in to change notification settings - Fork 722
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Track Progress of Off-Heap Technology #11438
Comments
bragaigor
added a commit
to bragaigor/openj9
that referenced
this issue
Jan 7, 2021
Preliminary work to incorporate extra 64 bit field to Indexable object headers. In case of contiguous arraylets the extra field will hold the address of where the data starts, which is right after the header. In case of discontiguous arraylets the extra field will hold the address of: - The contiguous double mapped region (assuming double map is enabled). - The contiguous sparse-heap region outside the heap (assuming sparse heap is enabled). - If double mapping an sparse heap are both disabled, dataAddr will point to the address right adter the header, in this case to the first arrayoid. This is the first phase concerning a series of deliverables. Here, we introduce the extra U_64 data field along with helper functions such as getters and setters that will be needed in the future. Now dataAddr is only introduced and never used. Once it’s stable we’ll deliver the second phase of changes that makes use of dataAddr. Please refer to eclipse-openj9#11438 for more info. This set of changes concern part of the first action item of such issue. Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor
added a commit
to bragaigor/omr
that referenced
this issue
Feb 2, 2021
Update GC code to make sure whenever an indexable object moves, it will always contain the correct dataAddr value, which is the address pointing right after array header This is phase 2 of eclipse-openj9/openj9#11438 Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor
added a commit
to bragaigor/omr
that referenced
this issue
Feb 2, 2021
Update GC code to make sure whenever an indexable object moves, it will always contain the correct dataAddr value, which is the address pointing right after array header This is phase 2 of eclipse-openj9/openj9#11438 Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor
added a commit
to bragaigor/omr
that referenced
this issue
Feb 2, 2021
Update GC code to make sure whenever an indexable object moves, the object will always contain the correct dataAddr value, which is the address pointing right after array header. This is phase 2 of eclipse-openj9/openj9#11438 Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor
added a commit
to bragaigor/omr
that referenced
this issue
Feb 2, 2021
Update GC code to make sure whenever an indexable object moves, the object will always contain the correct dataAddr value, which is the address pointing right after array header. This is phase 2 of eclipse-openj9/openj9#11438 Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor
added a commit
to bragaigor/omr
that referenced
this issue
Feb 4, 2021
Update GC code to make sure whenever an indexable object moves, the object will always contain the correct dataAddr value, which is the address pointing right after array header. This is phase 2 of eclipse-openj9/openj9#11438 Signed-off-by: Igor Braga <higorb1@gmail.com>
This was referenced Feb 5, 2021
bragaigor
added a commit
to bragaigor/omr
that referenced
this issue
Feb 9, 2021
Update GC code to make sure whenever an indexable object moves, the object will always contain the correct dataAddr value, which is the address pointing right after array header. This is phase 2 of eclipse-openj9/openj9#11438 Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor
added a commit
to bragaigor/omr
that referenced
this issue
Feb 10, 2021
Update GC code to make sure whenever an indexable object moves, the object will always contain the correct dataAddr value, which is the address pointing right after array header. This is phase 2 of eclipse-openj9/openj9#11438 Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor
added a commit
to bragaigor/omr
that referenced
this issue
Feb 10, 2021
Update GC code to make sure whenever an indexable object moves, the object will always contain the correct dataAddr value, which is the address pointing right after array header. This is phase 2 of eclipse-openj9/openj9#11438 Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor
added a commit
to bragaigor/omr
that referenced
this issue
Feb 10, 2021
Update GC code to make sure whenever an indexable object moves, the object will always contain the correct dataAddr value, which is the address pointing right after array header. This is phase 2 of eclipse-openj9/openj9#11438 Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor
added a commit
to bragaigor/omr
that referenced
this issue
Feb 10, 2021
Update GC code to make sure whenever an indexable object moves, the object will always contain the correct dataAddr value, which is the address pointing right after array header. This is phase 2 of eclipse-openj9/openj9#11438 Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor
added a commit
to bragaigor/omr
that referenced
this issue
Feb 13, 2021
Update GC code to make sure whenever an indexable object moves, the object will always contain the correct dataAddr value, which is the address pointing right after array header. Introduce pre/postObjectCompact wrapers for EnvironmentDeletegate pre/postObjectCompact API for object compaction fixup This is phase 2 of eclipse-openj9/openj9#11438 Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor
added a commit
to bragaigor/omr
that referenced
this issue
Feb 13, 2021
Update GC code to make sure whenever an indexable object moves, the object will always contain the correct dataAddr value, which is the address pointing right after array header. Introduce pre/postObjectCompact wrapers for EnvironmentDeletegate pre/postObjectCompact API for object compaction fixup This is phase 2 of eclipse-openj9/openj9#11438 Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor
added a commit
to bragaigor/openj9
that referenced
this issue
Feb 13, 2021
Update GC code to make sure whenever an indexable object moves, the object will always contain the correct dataAddr value, which is the address pointing right after array header. We introduce pre/postObjectMoveForCompact in EnvironmentDelegate as well as struct GCmovedObjectHashCode which is being moved from OMR_VMThread to EnvironmentDelegate. This is phase 2 of eclipse-openj9#11438 Signed-off-by: Igor Braga <higorb1@gmail.com>
VermaSh
added a commit
to VermaSh/openj9
that referenced
this issue
Apr 6, 2023
Adapt `multianewArrayEvaluator` to populate `dataAddr` field in the array header for multidimensional array. Two cases addressed here are: - Both 1st and 2nd dimension arrays are zero size. - 1st dimension array is of size non-zero and 2nd dimension array is of size zero. Part of phase 2 of eclipse-openj9#11438. Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
VermaSh
added a commit
to VermaSh/openj9
that referenced
this issue
Apr 6, 2023
Adapt `multianewArrayEvaluator` to populate `dataAddr` field of multidimensional arrays. Two cases we address are: - Both 1st and 2nd dimensional arrays are zero size - 1st dimensional array is of size non-zero and 2nd dimensional array is of size zero. Part of phase 2 of eclipse-openj9#11438. Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
VermaSh
added a commit
to VermaSh/openj9
that referenced
this issue
Apr 6, 2023
This change has been pulled in as part of JIT dual header PR eclipse-openj9#16420 Adapt `multianewArrayEvaluator` to populate `dataAddr` field in the array header for multidimensional array. Two cases addressed here are: - Both 1st and 2nd dimension arrays are zero size. - 1st dimension array is of size non-zero and 2nd dimension array is of size zero. Part of phase 2 of eclipse-openj9#11438. Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
VermaSh
added a commit
to VermaSh/openj9
that referenced
this issue
Apr 6, 2023
This change has been pulled in as part of JIT dual header PR eclipse-openj9#16420 Adapt `multianewArrayEvaluator` to populate `dataAddr` field of multidimensional arrays. Two cases we address are: - Both 1st and 2nd dimensional arrays are zero size - 1st dimensional array is of size non-zero and 2nd dimensional array is of size zero. Part of phase 2 of eclipse-openj9#11438. Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
rmnattas
pushed a commit
to rmnattas/openj9
that referenced
this issue
Aug 14, 2023
Adapt `multianewArrayEvaluator` to populate `dataAddr` field of multidimensional arrays. Two cases we address are: - Both 1st and 2nd dimensional arrays are zero size - 1st dimensional array is of size non-zero and 2nd dimensional array is of size zero. Part of phase 2 of eclipse-openj9#11438. Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
rmnattas
pushed a commit
to rmnattas/openj9
that referenced
this issue
Aug 14, 2023
This change has been pulled in as part of JIT dual header PR eclipse-openj9#16420 Adapt `multianewArrayEvaluator` to populate `dataAddr` field in the array header for multidimensional array. Two cases addressed here are: - Both 1st and 2nd dimension arrays are zero size. - 1st dimension array is of size non-zero and 2nd dimension array is of size zero. Part of phase 2 of eclipse-openj9#11438. Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
rmnattas
pushed a commit
to rmnattas/openj9
that referenced
this issue
Aug 14, 2023
This change has been pulled in as part of JIT dual header PR eclipse-openj9#16420 Adapt `multianewArrayEvaluator` to populate `dataAddr` field of multidimensional arrays. Two cases we address are: - Both 1st and 2nd dimensional arrays are zero size - 1st dimensional array is of size non-zero and 2nd dimensional array is of size zero. Part of phase 2 of eclipse-openj9#11438. Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
rmnattas
pushed a commit
to rmnattas/openj9
that referenced
this issue
Aug 22, 2023
This change has been pulled in as part of JIT dual header PR eclipse-openj9#16420 Adapt `multianewArrayEvaluator` to populate `dataAddr` field in the array header for multidimensional array. Two cases addressed here are: - Both 1st and 2nd dimension arrays are zero size. - 1st dimension array is of size non-zero and 2nd dimension array is of size zero. Part of phase 2 of eclipse-openj9#11438. Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
rmnattas
pushed a commit
to rmnattas/openj9
that referenced
this issue
Aug 22, 2023
This change has been pulled in as part of JIT dual header PR eclipse-openj9#16420 Adapt `multianewArrayEvaluator` to populate `dataAddr` field of multidimensional arrays. Two cases we address are: - Both 1st and 2nd dimensional arrays are zero size - 1st dimensional array is of size non-zero and 2nd dimensional array is of size zero. Part of phase 2 of eclipse-openj9#11438. Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Creating this issue to keep track of off-heap (know as sparse-heap internally) technology delivery course.
Technology summary:
Introduce an optimized memory management for large arrays in region-based garbage collector, more specifically a new heap scheme and large object organization (in-heap and off-heap), enhanced method for allocating large objects (proxy objects) and an optimized technique of accessing large array during runtime (JIT optimizations).
This organization not only unburdens large segregated array allocation from the heap, but it also preserves the illusion to the Just-In-Time (JIT) compiler through a clever object layout that all array elements can be accessed as if all arrays were contiguous. Furthermore, we can leverage such object layout (object proxies) to optimize memory management for large objects in a heap, by introducing off-heap.
Deliverables (action items):
Proxy objects (headers), which resides in heap and points to data residing outside the heap (later introduced as sparse-heap);
Phase 1: Introduce extra U_64 data field to Indexable Object Headers Add extra U_64 data field to Indexable Object Headers #11755
Phase 2: Make sure
dataAddr
field always contain the correct value, which is the address pointing right after array headerPhase 3: Make use of introduced extra
void *
data fieldMechanism that provides a way to map sparse-heap data back to proxy objects.
Introduce an off-heap/secondary-heap for very large object. This heap relies on vast, under-utilized 64-bit address space; hence, it is large enough to store any large object without the need of compaction ever.
Mechanism to identify all off-heap objects. Since there's no need to ever compact the off-heap, we'll introduce a mechanism that identifies large objects in the off-heap area and release them whenever they die.
cc: @amicic @dmitripivkine @fjeremic @vijaysun-omr
The text was updated successfully, but these errors were encountered: