On 12/19/2014 01:30 AM, Aleksey Shipilev wrote:
> Or, you can "just" hack the promotion method in a relevant OpenJDK GC,
> and print the bastards out. I think for ParallelGC,
> PSPromotionManager::copy_to_survivor_space after "// Otherwise try
> allocating obj tenured" is the place.
Yeah, having fun with it:
diff -r fb4ba04c587b
src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp
---
a/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp
Thu Dec 11 23:06:14 2014 -0800
+++
b/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.inline.hpp
Fri Dec 19 02:30:49 2014 +0300
@@ -117,6 +117,8 @@
// Otherwise try allocating obj tenured
if (new_obj == NULL) {
+ tty->print("%d, %s, promoted\n", o->size(),
o->klass()->name()->as_klass_external_name());
+
#ifndef PRODUCT
if (Universe::heap()->promotion_should_fail()) {
return oop_promotion_failed(o, test_mark);
...and then:
$ java ... | grep promoted | awk '{ arr[$2]+=$1 } END { for (key in arr)
printf("%s\t%s\n", arr[key], key) }' | sort -n
...
187230 org.openjdk.jol.info.ClassData,
192100 org.openjdk.jol.info.FieldData,
220359 java.util.ArrayList,
371910 [Ljava.lang.Object;,
720671 java.util.HashMap$TreeNode,
863172 [Ljava.util.HashMap$Node;,
968862 java.lang.String,
2122970 [B,
2252487 java.lang.Long,
2948636 java.util.HashMap$Node,
4582206 [C,
More introspection is possible, especially if the promotion rate is low.
-Aleksey.