1 /* |
1 /* |
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
277 PSParallelCompact::adjust_pointer(cp->operands_addr()); |
277 PSParallelCompact::adjust_pointer(cp->operands_addr()); |
278 PSParallelCompact::adjust_pointer(cp->pool_holder_addr()); |
278 PSParallelCompact::adjust_pointer(cp->pool_holder_addr()); |
279 return cp->object_size(); |
279 return cp->object_size(); |
280 } |
280 } |
281 |
281 |
282 int |
|
283 constantPoolKlass::oop_update_pointers(ParCompactionManager* cm, oop obj, |
|
284 HeapWord* beg_addr, HeapWord* end_addr) { |
|
285 assert (obj->is_constantPool(), "obj must be constant pool"); |
|
286 constantPoolOop cp = (constantPoolOop) obj; |
|
287 |
|
288 // If the tags array is null we are in the middle of allocating this constant |
|
289 // pool. |
|
290 if (cp->tags() != NULL) { |
|
291 oop* base = (oop*)cp->base(); |
|
292 oop* const beg_oop = MAX2((oop*)beg_addr, base); |
|
293 oop* const end_oop = MIN2((oop*)end_addr, base + cp->length()); |
|
294 const size_t beg_idx = pointer_delta(beg_oop, base, sizeof(oop*)); |
|
295 const size_t end_idx = pointer_delta(end_oop, base, sizeof(oop*)); |
|
296 for (size_t cur_idx = beg_idx; cur_idx < end_idx; ++cur_idx, ++base) { |
|
297 if (cp->is_pointer_entry(int(cur_idx))) { |
|
298 PSParallelCompact::adjust_pointer(base); |
|
299 } |
|
300 } |
|
301 } |
|
302 |
|
303 oop* p; |
|
304 p = cp->tags_addr(); |
|
305 PSParallelCompact::adjust_pointer(p, beg_addr, end_addr); |
|
306 p = cp->cache_addr(); |
|
307 PSParallelCompact::adjust_pointer(p, beg_addr, end_addr); |
|
308 p = cp->operands_addr(); |
|
309 PSParallelCompact::adjust_pointer(p, beg_addr, end_addr); |
|
310 p = cp->pool_holder_addr(); |
|
311 PSParallelCompact::adjust_pointer(p, beg_addr, end_addr); |
|
312 |
|
313 return cp->object_size(); |
|
314 } |
|
315 |
|
316 void constantPoolKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { |
282 void constantPoolKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { |
317 assert(obj->is_constantPool(), "should be constant pool"); |
283 assert(obj->is_constantPool(), "should be constant pool"); |
318 constantPoolOop cp = (constantPoolOop) obj; |
284 constantPoolOop cp = (constantPoolOop) obj; |
319 if (AnonymousClasses && cp->has_pseudo_string() && cp->tags() != NULL) { |
285 if (AnonymousClasses && cp->has_pseudo_string() && cp->tags() != NULL) { |
320 oop* base = (oop*)cp->base(); |
286 oop* base = (oop*)cp->base(); |