oop.hpp revision 2098
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * This code is free software; you can redistribute it and/or modify it
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * under the terms of the GNU General Public License version 2 only, as
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * published by the Free Software Foundation.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * This code is distributed in the hope that it will be useful, but WITHOUT
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * version 2 for more details (a copy is included in the LICENSE file that
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * accompanied this code).
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * You should have received a copy of the GNU General Public License version
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * 2 along with this work; if not, write to the Free Software Foundation,
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis * or visit www.oracle.com if you need additional information or have any
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis#include "memory/specialized_oop_closures.hpp"
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis// oopDesc is the top baseclass for objects classes. The {name}Desc classes describe
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis// the format of Java objects so the fields can be accessed from C++.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis// oopDesc is abstract.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis// (see oopHierarchy for complete oop class hierarchy)
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis// no virtual functions allowed
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis// store into oop with store check
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtistemplate <class T> void oop_store(T* p, oop v);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtistemplate <class T> void oop_store(volatile T* p, oop v);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis// store into oop without store check
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtistemplate <class T> void oop_store_without_check(T* p, oop v);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtistemplate <class T> void oop_store_without_check(volatile T* p, oop v);
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis// Forward declarations.
25c28e83beb90e7c80452a7c818c5e6f73a07dc8Piotr Jasiukajtis // Fast access to barrier set. Must be initialized.
IsSafeConc = true
void init_mark();
int klass_gap() const;
void set_klass_gap(int z);
int size();
bool is_parsable();
bool is_conc_safe();
// type test operations (inlined in oop.inline.h)
bool is_instance() const;
bool is_instanceRef() const;
bool is_array() const;
bool is_objArray() const;
bool is_klass() const;
bool is_thread() const;
bool is_method() const;
bool is_constMethod() const;
bool is_methodData() const;
bool is_constantPool() const;
bool is_constantPoolCache() const;
bool is_typeArray() const;
bool is_javaArray() const;
bool is_compiledICHolder() const;
void print();
void print_value();
void print_address();
char* print_string();
char* print_value_string();
void verify();
bool partially_loaded();
void set_partially_loaded();
bool is_locked() const;
bool is_unlocked() const;
bool has_bias_pattern() const;
#ifndef PRODUCT
bool is_unlocked_oop() const;
bool is_gc_marked() const;
void follow_contents(void);
void follow_header(void);
#ifndef SERIALGC
bool is_perm() const;
bool is_perm_or_null() const;
bool is_scavengable() const;
bool is_shared() const;
bool is_shared_readonly() const;
bool is_shared_readwrite() const;
bool is_forwarded() const;
#ifndef SERIALGC
int age() const;
void incr_age();
int adjust_pointers();
void adjust_header();
#ifndef SERIALGC
void update_header();
#ifndef SERIALGC
bool has_displaced_mark() const;
static int klass_gap_offset_in_bytes();