Skip to content

RamClass: Segment allocation enhancements #20644

@tajila

Description

@tajila

Current compressedRefs mode we allocat the ramClass out of the sub4G allocator. This allocator is highly contended as it is used for J9VMThread, J9JavaStacks and JNI memory. However, ramClass memory (in JDKs prior to JDK21) is typically the highesr user of sub 4G memory.

Our main requriement to put ramClasses in sub4G memory is to place the J9Class (ramClass header) sub4G space. This allows us to hav a pointer that is at most 32bits, with 256byte alignment, we can then have 8bits in the pointer free for other purposes (see https://github.com/eclipse-openj9/openj9/blob/master/runtime/oti/j9nonbuilder.h#L3040).

The ramClass allocation strategy invloves:

  1. Describing the allocation fragments requried
  2. Allocating memory for these fragments via the RamClass allocator
  3. The RamClass allocator keeps track of a free list and tries allocate memory out of the free lists first. Failing to do so it allocates a new class memory segment which makes use of the sub4G allocator.

Proposal:
Given that only one part of the RamClass requires, we should look to sperate how the memory fragments are allocated for the ramClass. We could have the following categories:

  1. sub4G
  2. Frequently accessed
  3. Infrequently accessed. //potential perform periodic disclaim

One approach could be to replicate the classMemory segment for other two categories above.

Then in the RAMClassAllocationRequest add a new entry to indicate which segment the fragment should be allocated in and make the approriate changes in the ramClass allocator.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions