Mercurial > hg > truffle
comparison src/share/vm/oops/oop.inline.hpp @ 2491:0654ee04b214
Merge with OpenJDK.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Fri, 22 Apr 2011 15:30:53 +0200 |
parents | d9e4d0aefc90 c7f3d0b4570f |
children | 04b9a2566eec |
comparison
equal
deleted
inserted
replaced
2490:29246b1d2d3c | 2491:0654ee04b214 |
---|---|
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. |