RFR: 8338526: Don't store abstract and interface Klasses in class metaspace [v4]

Markus Grönlund mgronlun at openjdk.org
Thu Aug 29 17:29:21 UTC 2024


On Thu, 29 Aug 2024 15:45:17 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:

>> If UseCompressedClassPointers is off, we don't have a compressed class space. If its on, Klass from CDS and from class space are compressable. With your patch, interfaces will live in normal metaspace, not int class space, so those are excluded now.
>> 
>> TBH, I am not really sure what this code here does, but I assume it tries to reduce the size of a JFR recording by using a compressed identifier for X if X can be expressed by such. Maybe a JFR person should look at this.
>
> With UseCompressedClassPointers off, I think Metaspace::is_in_shared_metaspace() would still return true but I don't think he compression base is the bottom of the CDS archive.  I asked Markus to have a look.

The code supports the JfrTraceID load barrier that enqueues tagged Klass*. It selects a more compact representation (a single word, instead of two words), if a Klass* can be compressed (i.e. there exists a compress class scheme in place (CompressedKlassPointers::encode(const_cast<Klass*>(klass)); AND the traceid (u8) value is low enough to be represented by only 4 bytes).

struct JfrEpochQueueKlassElement {
  traceid id;
  const Klass* klass;
};

struct JfrEpochQueueNarrowKlassElement {
  u4 id;
  narrowKlass compressed_klass;
};

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/19157#discussion_r1736775534


More information about the core-libs-dev mailing list