Details
-
Bug
-
Resolution: Fixed
-
P4
-
21, 22, 23
Backports
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8329668 | 22.0.2 | Chris Hegarty | P4 | Resolved | Fixed | b03 |
JDK-8327439 | 21.0.4-oracle | Thomas Schatzl | P4 | Resolved | Fixed | b01 |
JDK-8323049 | 21.0.3 | Aleksey Shipilev | P4 | Resolved | Fixed | b01 |
Description
jmap -histo 334286
num #instances #bytes class name (module)
-------------------------------------------------------
1: 22613 1141112 [B (java.base@21.0.1)
2: 21488 515712 java.lang.String (java.base@21.0.1)
3: 3799 470352 java.lang.Class (java.base@21.0.1)
4: 290 350480 Ljdk.internal.vm.FillerArray; (java.base@21.0.1)
5: 4081 312000 [Ljava.lang.Object; (java.base@21.0.1)
6: 974 177520 [I (java.base@21.0.1)
7: 5397 172704 java.util.HashMap$Node (java.base@21.0.1)
8: 4819 154208 java.util.concurrent.ConcurrentHashMap$Node (java.base@21.0.1)
9: 948 137208 [C (java.base@21.0.1)
10: 3264 104448 java.util.Hashtable$Entry (java.base@21.0.1)
11: 116 86200 [J (java.base@21.0.1)
12: 622 81920 [Ljava.util.HashMap$Node; (java.base@21.0.1)
13: 2486 79552 javax.swing.text.html.parser.ContentModel (java.desktop@21.0.1)
I guess that the correct name should be [Ljdk.internal.vm.FillerArray; - currently it is missing the array prefix [. Alternatively if FillerArray should be reported as an instance of a class (not an array) that the name should be jdk.internal.vm.FillerArray like any other class in the output produced by jmap -histo. However if FillerArray is reported as instance of a class, this means (based on the example above) that there are 290 instances of the FillerArray class, which take up 350480 bytes and so one instance is 1208.5517 bytes - which looks really strange to me.
FYI: I was able to "fix" the FillerArray name with the small naive patch below:
diff --git a/src/hotspot/share/memory/universe.cpp b/src/hotspot/share/memory/universe.cpp
index 1c0a5461ffe..1f5c1ab03bd 100644
--- a/src/hotspot/share/memory/universe.cpp
+++ b/src/hotspot/share/memory/universe.cpp
@@ -337,7 +337,7 @@ void Universe::genesis(TRAPS) {
// Initialization of the fillerArrayKlass must come before regular
// int-TypeArrayKlass so that the int-Array mirror points to the
// int-TypeArrayKlass.
- _fillerArrayKlassObj = TypeArrayKlass::create_klass(T_INT, "Ljdk/internal/vm/FillerArray;", CHECK);
+ _fillerArrayKlassObj = TypeArrayKlass::create_klass(T_INT, "[Ljdk/internal/vm/FillerArray;", CHECK);
for (int i = T_BOOLEAN; i < T_LONG+1; i++) {
_typeArrayKlassObjs[i] = TypeArrayKlass::create_klass((BasicType)i, CHECK);
}
Attachments
Issue Links
- backported by
-
JDK-8323049 Unexpected internal name for Filler array klass causes error in VisualVM
- Resolved
-
JDK-8327439 Unexpected internal name for Filler array klass causes error in VisualVM
- Resolved
-
JDK-8329668 Unexpected internal name for Filler array klass causes error in VisualVM
- Resolved
- relates to
-
JDK-8284435 Add dedicated filler objects for known dead Java heap areas
- Resolved
- links to
-
Commit openjdk/jdk21u-dev/23a0b905
-
Commit openjdk/jdk22u/aead789f
-
Commit openjdk/jdk/05745e3f
-
Review openjdk/jdk21u-dev/123
-
Review openjdk/jdk22u/119
-
Review openjdk/jdk/17155