/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
#ifndef SHARE_VM_OOPS_OBJARRAYOOP_HPP
#define SHARE_VM_OOPS_OBJARRAYOOP_HPP
#include "oops/arrayOop.hpp"
// An objArrayOop is an array containing oops.
// Evaluating "String arg[10]" will create an objArrayOop.
friend class objArrayKlass;
friend class Runtime1;
friend class psPromotionManager;
friend class CSetMarkOopClosure;
friend class G1ParScanPartialArrayClosure;
}
private:
// Give size of objArrayOop in HeapWords minus the header
"Else the following (new) computation would be in error");
#ifdef ASSERT
// The old code is left in for sanity-checking; it'll
// go away pretty soon. XXX
// Without UseCompressedOops, this is simply:
// oop->length() * HeapWordsPerOop;
// With narrowOops, HeapWordsPerOop is 1/2 or equal 0 as an integer.
// The oop elements are aligned up to wordSize
int old_res;
if (HeapWordsPerOop > 0) {
} else {
}
#endif // ASSERT
return res;
}
public:
// Returns the offset of the first element.
static int base_offset_in_bytes() {
}
// base is the address following the header.
// Accessing
// With UseCompressedOops decode the narrow oop in the objArray to an
// uncompressed oop. Otherwise this is simply a "*" operator.
if (UseCompressedOops) {
} else {
}
}
if (UseCompressedOops) {
} else {
}
}
// Sizing
// This returns the object size in HeapWords.
return (int)osz;
}
// special iterators for index ranges, returns size of object
};
#endif // SHARE_VM_OOPS_OBJARRAYOOP_HPP