diff src/share/vm/oops/constantPoolKlass.cpp @ 2379:b099aaf51bf8

6962931: move interned strings out of the perm gen Reviewed-by: never, coleenp, ysr, jwilhelm
author jcoomes
date Tue, 22 Mar 2011 13:36:33 -0700
parents 183658a2d0b3
children 38fea01eb669 a0de1dfd1933
line wrap: on
line diff
--- a/src/share/vm/oops/constantPoolKlass.cpp	Mon Mar 21 18:38:00 2011 -0700
+++ b/src/share/vm/oops/constantPoolKlass.cpp	Tue Mar 22 13:36:33 2011 -0700
@@ -285,10 +285,11 @@
 void constantPoolKlass::oop_push_contents(PSPromotionManager* pm, oop obj) {
   assert(obj->is_constantPool(), "should be constant pool");
   constantPoolOop cp = (constantPoolOop) obj;
-  if (AnonymousClasses && cp->has_pseudo_string() && cp->tags() != NULL) {
-    oop* base = (oop*)cp->base();
-    for (int i = 0; i < cp->length(); ++i, ++base) {
+  if (cp->tags() != NULL &&
+      (!JavaObjectsInPerm || (AnonymousClasses && cp->has_pseudo_string()))) {
+    for (int i = 1; i < cp->length(); ++i) {
       if (cp->tag_at(i).is_string()) {
+        oop* base = cp->obj_at_addr_raw(i);
         if (PSScavenge::should_scavenge(base)) {
           pm->claim_or_forward_depth(base);
         }
@@ -460,7 +461,8 @@
       if (cp->tag_at(i).is_string()) {
         if (!cp->has_pseudo_string()) {
           if (entry.is_oop()) {
-            guarantee(entry.get_oop()->is_perm(),   "should be in permspace");
+            guarantee(!JavaObjectsInPerm || entry.get_oop()->is_perm(),
+                      "should be in permspace");
             guarantee(entry.get_oop()->is_instance(), "should be instance");
           }
         } else {