Integrated: 8353273: Reduce number of oop map entries in instances
Thomas Stuefe
stuefe at openjdk.org
Wed Apr 9 05:12:04 UTC 2025
On Mon, 31 Mar 2025 14:02:03 GMT, Thomas Stuefe <stuefe at openjdk.org> wrote:
> In preparation for planned GC performance improvements (KLUT), I would like to reduce the average number of oop map entries.
>
> For details, please see JBS issue text.
>
> -----------------------
>
> Patch results:
>
> The patch brings a positive change of oop map size, reducing the likelihood of lengthy oop maps. Here the oop map size distribution over all JDK classes in the JDK image:
>
> Before:
>
> 5395 - non-static oop maps (0 entries)
> 9330 - non-static oop maps (1 entries)
> 1449 - non-static oop maps (2 entries)
> 274 - non-static oop maps (3 entries)
> 218 - non-static oop maps (4 entries)
> 75 - non-static oop maps (5 entries)
> 7 - non-static oop maps (6 entries)
> 4 - non-static oop maps (7 entries)
>
>
> Now:
>
> 5395 - non-static oop maps (0 entries)
> 10178 - non-static oop maps (1 entries)
> 933 - non-static oop maps (2 entries)
> 229 - non-static oop maps (3 entries)
> 16 - non-static oop maps (4 entries)
> 1 - non-static oop maps (5 entries)
>
>
> For example, `java.util.concurrent.ConcurrentHashMap$TreeNode` is changed from having 2 entries to having just one entry, which is nice for a class that may be instantiated a lot:
>
> Before:
>
> java.util.concurrent.ConcurrentHashMap$TreeNode {0x000000000d1dddc0}
> - ---- non-static fields (9 words):
> - final 'hash' 'I' @12
> - final 'key' 'Ljava/lang/Object;' @16
> - volatile 'val' 'Ljava/lang/Object;' @20
> - volatile 'next' 'Ljava/util/concurrent/ConcurrentHashMap$Node;' @24 << last field of base class
> - 'red' 'Z' @28 << derived class starts here, non-oops lead
> - 'parent' 'Ljava/util/concurrent/ConcurrentHashMap$TreeNode;' @32
> - 'left' 'Ljava/util/concurrent/ConcurrentHashMap$TreeNode;' @36
> - 'right' 'Ljava/util/concurrent/ConcurrentHashMap$TreeNode;' @40
> - 'prev' 'Ljava/util/concurrent/ConcurrentHashMap$TreeNode;' @44
> - non-static oop maps (2 entries): 16-24 32-44
>
> Now:
>
> java.util.concurrent.ConcurrentHashMap$TreeNode {0x000000007e1de450}
> - ---- non-static fields (9 words):
> - final 'hash' 'I' @12
> - final 'key' 'Ljava/lang/Object;' @16
> - volatile 'val' 'Ljava/lang/Object;' @20
> - volatile 'next' 'Ljava/util/concurrent/ConcurrentHashMap$Node;' @24 << last field of base class
> - 'parent' 'Ljava/util/concurrent/ConcurrentHashMap$TreeNode;' @28 << class starts here, oops lead
> - 'left' 'Ljava/util/concurrent/ConcurrentHashMap$TreeNode;' @32
> - 'right' 'Ljava/util/concurrent/Concurre...
This pull request has now been integrated.
Changeset: 743d1c64
Author: Thomas Stuefe <stuefe at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/743d1c64c29118b15897b3c676919353ced467f5
Stats: 298 lines in 4 files changed: 283 ins; 1 del; 14 mod
8353273: Reduce number of oop map entries in instances
Reviewed-by: lmesnik, fparain, jsjolen
-------------
PR: https://git.openjdk.org/jdk/pull/24330
More information about the hotspot-dev
mailing list