diff src/share/vm/oops/klassKlass.cpp @ 1941:79d04223b8a5

Added caching for resolved types and resolved fields. This is crucial, because the local load elimination will lead to wrong results, if field equality (of two RiField objects with the same object and the same RiType) is not given. The caching makes sure that the default equals implementation is sufficient.
author Thomas Wuerthinger <wuerthinger@ssw.jku.at>
date Tue, 28 Dec 2010 18:33:26 +0100
parents 7fcd5f39bd7a
children 06f017f7daa7
line wrap: on
line diff
--- a/src/share/vm/oops/klassKlass.cpp	Mon Dec 27 20:35:47 2010 +0100
+++ b/src/share/vm/oops/klassKlass.cpp	Tue Dec 28 18:33:26 2010 +0100
@@ -50,6 +50,7 @@
   MarkSweep::mark_and_push(k->adr_secondary_super_cache());
   MarkSweep::mark_and_push(k->adr_secondary_supers());
   MarkSweep::mark_and_push(k->adr_java_mirror());
+  MarkSweep::mark_and_push(k->adr_c1x_mirror());
   MarkSweep::mark_and_push(k->adr_name());
   // We follow the subklass and sibling links at the end of the
   // marking phase, since otherwise following them will prevent
@@ -70,6 +71,7 @@
   PSParallelCompact::mark_and_push(cm, k->adr_secondary_super_cache());
   PSParallelCompact::mark_and_push(cm, k->adr_secondary_supers());
   PSParallelCompact::mark_and_push(cm, k->adr_java_mirror());
+  PSParallelCompact::mark_and_push(cm, k->adr_c1x_mirror());
   PSParallelCompact::mark_and_push(cm, k->adr_name());
   // We follow the subklass and sibling links at the end of the
   // marking phase, since otherwise following them will prevent
@@ -90,6 +92,7 @@
   blk->do_oop(k->adr_secondary_super_cache());
   blk->do_oop(k->adr_secondary_supers());
   blk->do_oop(k->adr_java_mirror());
+  blk->do_oop(k->adr_c1x_mirror());
   blk->do_oop(k->adr_name());
   // The following are in the perm gen and are treated
   // specially in a later phase of a perm gen collection; ...
@@ -124,6 +127,8 @@
   if (mr.contains(adr)) blk->do_oop(adr);
   adr = k->adr_java_mirror();
   if (mr.contains(adr)) blk->do_oop(adr);
+  adr = k->adr_c1x_mirror();
+  if (mr.contains(adr)) blk->do_oop(adr);
   adr = k->adr_name();
   if (mr.contains(adr)) blk->do_oop(adr);
   // The following are "weak links" in the perm gen and are
@@ -154,6 +159,7 @@
   MarkSweep::adjust_pointer(k->adr_secondary_super_cache());
   MarkSweep::adjust_pointer(k->adr_secondary_supers());
   MarkSweep::adjust_pointer(k->adr_java_mirror());
+  MarkSweep::adjust_pointer(k->adr_c1x_mirror());
   MarkSweep::adjust_pointer(k->adr_name());
   MarkSweep::adjust_pointer(k->adr_subklass());
   MarkSweep::adjust_pointer(k->adr_next_sibling());