comparison src/share/vm/oops/oop.inline.hpp @ 2376:c7f3d0b4570f

7017732: move static fields into Class to prepare for perm gen removal Reviewed-by: kvn, coleenp, twisti, stefank
author never
date Fri, 18 Mar 2011 16:00:34 -0700
parents b92c45f2bc75
children 0654ee04b214 b0efc7ee3b31
comparison
equal deleted inserted replaced
2375:d673ef06fe96 2376:c7f3d0b4570f
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.
139 inline Klass* oopDesc::blueprint() const { return klass()->klass_part(); } 139 inline Klass* oopDesc::blueprint() const { return klass()->klass_part(); }
140 140
141 inline bool oopDesc::is_a(klassOop k) const { return blueprint()->is_subtype_of(k); } 141 inline bool oopDesc::is_a(klassOop k) const { return blueprint()->is_subtype_of(k); }
142 142
143 inline bool oopDesc::is_instance() const { return blueprint()->oop_is_instance(); } 143 inline bool oopDesc::is_instance() const { return blueprint()->oop_is_instance(); }
144 inline bool oopDesc::is_instanceMirror() const { return blueprint()->oop_is_instanceMirror(); }
144 inline bool oopDesc::is_instanceRef() const { return blueprint()->oop_is_instanceRef(); } 145 inline bool oopDesc::is_instanceRef() const { return blueprint()->oop_is_instanceRef(); }
145 inline bool oopDesc::is_array() const { return blueprint()->oop_is_array(); } 146 inline bool oopDesc::is_array() const { return blueprint()->oop_is_array(); }
146 inline bool oopDesc::is_objArray() const { return blueprint()->oop_is_objArray(); } 147 inline bool oopDesc::is_objArray() const { return blueprint()->oop_is_objArray(); }
147 inline bool oopDesc::is_typeArray() const { return blueprint()->oop_is_typeArray(); } 148 inline bool oopDesc::is_typeArray() const { return blueprint()->oop_is_typeArray(); }
148 inline bool oopDesc::is_javaArray() const { return blueprint()->oop_is_javaArray(); } 149 inline bool oopDesc::is_javaArray() const { return blueprint()->oop_is_javaArray(); }
397 inline address oopDesc::address_field_acquire(int offset) const { return (address) OrderAccess::load_ptr_acquire(address_field_addr(offset)); } 398 inline address oopDesc::address_field_acquire(int offset) const { return (address) OrderAccess::load_ptr_acquire(address_field_addr(offset)); }
398 inline void oopDesc::release_address_field_put(int offset, address contents) { OrderAccess::release_store_ptr(address_field_addr(offset), contents); } 399 inline void oopDesc::release_address_field_put(int offset, address contents) { OrderAccess::release_store_ptr(address_field_addr(offset), contents); }
399 400
400 inline int oopDesc::size_given_klass(Klass* klass) { 401 inline int oopDesc::size_given_klass(Klass* klass) {
401 int lh = klass->layout_helper(); 402 int lh = klass->layout_helper();
402 int s = lh >> LogHeapWordSize; // deliver size scaled by wordSize 403 int s;
403 404
404 // lh is now a value computed at class initialization that may hint 405 // lh is now a value computed at class initialization that may hint
405 // at the size. For instances, this is positive and equal to the 406 // at the size. For instances, this is positive and equal to the
406 // size. For arrays, this is negative and provides log2 of the 407 // size. For arrays, this is negative and provides log2 of the
407 // array element size. For other oops, it is zero and thus requires 408 // array element size. For other oops, it is zero and thus requires
410 // We go to all this trouble because the size computation is at the 411 // We go to all this trouble because the size computation is at the
411 // heart of phase 2 of mark-compaction, and called for every object, 412 // heart of phase 2 of mark-compaction, and called for every object,
412 // alive or dead. So the speed here is equal in importance to the 413 // alive or dead. So the speed here is equal in importance to the
413 // speed of allocation. 414 // speed of allocation.
414 415
415 if (lh <= Klass::_lh_neutral_value) { 416 if (lh > Klass::_lh_neutral_value) {
417 if (!Klass::layout_helper_needs_slow_path(lh)) {
418 s = lh >> LogHeapWordSize; // deliver size scaled by wordSize
419 } else {
420 s = klass->oop_size(this);
421 }
422 } else if (lh <= Klass::_lh_neutral_value) {
416 // The most common case is instances; fall through if so. 423 // The most common case is instances; fall through if so.
417 if (lh < Klass::_lh_neutral_value) { 424 if (lh < Klass::_lh_neutral_value) {
418 // Second most common case is arrays. We have to fetch the 425 // Second most common case is arrays. We have to fetch the
419 // length of the array, shift (multiply) it appropriately, 426 // length of the array, shift (multiply) it appropriately,
420 // up to wordSize, add the header, and align to object size. 427 // up to wordSize, add the header, and align to object size.