src/share/vm/utilities/constantTag.hpp

Thu, 20 Nov 2008 16:56:09 -0800

author
ysr
date
Thu, 20 Nov 2008 16:56:09 -0800
changeset 888
c96030fff130
parent 866
a45484ea312d
child 905
ad8c8ca4ab0f
permissions
-rw-r--r--

6684579: SoftReference processing can be made more efficient
Summary: For current soft-ref clearing policies, we can decide at marking time if a soft-reference will definitely not be cleared, postponing the decision of whether it will definitely be cleared to the final reference processing phase. This can be especially beneficial in the case of concurrent collectors where the marking is usually concurrent but reference processing is usually not.
Reviewed-by: jmasa

duke@435 1 /*
duke@435 2 * Copyright 1997-2005 Sun Microsystems, Inc. All Rights Reserved.
duke@435 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@435 4 *
duke@435 5 * This code is free software; you can redistribute it and/or modify it
duke@435 6 * under the terms of the GNU General Public License version 2 only, as
duke@435 7 * published by the Free Software Foundation.
duke@435 8 *
duke@435 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@435 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@435 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@435 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@435 13 * accompanied this code).
duke@435 14 *
duke@435 15 * You should have received a copy of the GNU General Public License version
duke@435 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@435 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@435 18 *
duke@435 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
duke@435 20 * CA 95054 USA or visit www.sun.com if you need additional information or
duke@435 21 * have any questions.
duke@435 22 *
duke@435 23 */
duke@435 24
duke@435 25 // constant tags in Java .class files
duke@435 26
duke@435 27
duke@435 28 enum {
duke@435 29 // See jvm.h for shared JVM_CONSTANT_XXX tags
duke@435 30 // NOTE: replicated in SA in vm/agent/sun/jvm/hotspot/utilities/ConstantTag.java
duke@435 31 // Hotspot specific tags
duke@435 32 JVM_CONSTANT_Invalid = 0, // For bad value initialization
duke@435 33 JVM_CONSTANT_InternalMin = 100, // First implementation tag (aside from bad value of course)
duke@435 34 JVM_CONSTANT_UnresolvedClass = 100, // Temporary tag until actual use
duke@435 35 JVM_CONSTANT_ClassIndex = 101, // Temporary tag while constructing constant pool
duke@435 36 JVM_CONSTANT_UnresolvedString = 102, // Temporary tag until actual use
duke@435 37 JVM_CONSTANT_StringIndex = 103, // Temporary tag while constructing constant pool
duke@435 38 JVM_CONSTANT_UnresolvedClassInError = 104, // Error tag due to resolution error
duke@435 39 JVM_CONSTANT_InternalMax = 104 // Last implementation tag
duke@435 40 };
duke@435 41
duke@435 42
duke@435 43 class constantTag VALUE_OBJ_CLASS_SPEC {
duke@435 44 private:
duke@435 45 jbyte _tag;
duke@435 46 public:
duke@435 47 bool is_klass() const { return _tag == JVM_CONSTANT_Class; }
duke@435 48 bool is_field () const { return _tag == JVM_CONSTANT_Fieldref; }
duke@435 49 bool is_method() const { return _tag == JVM_CONSTANT_Methodref; }
duke@435 50 bool is_interface_method() const { return _tag == JVM_CONSTANT_InterfaceMethodref; }
duke@435 51 bool is_string() const { return _tag == JVM_CONSTANT_String; }
duke@435 52 bool is_int() const { return _tag == JVM_CONSTANT_Integer; }
duke@435 53 bool is_float() const { return _tag == JVM_CONSTANT_Float; }
duke@435 54 bool is_long() const { return _tag == JVM_CONSTANT_Long; }
duke@435 55 bool is_double() const { return _tag == JVM_CONSTANT_Double; }
duke@435 56 bool is_name_and_type() const { return _tag == JVM_CONSTANT_NameAndType; }
duke@435 57 bool is_utf8() const { return _tag == JVM_CONSTANT_Utf8; }
duke@435 58
duke@435 59 bool is_invalid() const { return _tag == JVM_CONSTANT_Invalid; }
duke@435 60
duke@435 61 bool is_unresolved_klass() const {
duke@435 62 return _tag == JVM_CONSTANT_UnresolvedClass || _tag == JVM_CONSTANT_UnresolvedClassInError;
duke@435 63 }
duke@435 64
duke@435 65 bool is_unresolved_klass_in_error() const {
duke@435 66 return _tag == JVM_CONSTANT_UnresolvedClassInError;
duke@435 67 }
duke@435 68
duke@435 69 bool is_klass_index() const { return _tag == JVM_CONSTANT_ClassIndex; }
duke@435 70 bool is_unresolved_string() const { return _tag == JVM_CONSTANT_UnresolvedString; }
duke@435 71 bool is_string_index() const { return _tag == JVM_CONSTANT_StringIndex; }
duke@435 72
duke@435 73 bool is_klass_reference() const { return is_klass_index() || is_unresolved_klass(); }
jrose@866 74 bool is_klass_or_reference() const{ return is_klass() || is_klass_reference(); }
duke@435 75 bool is_field_or_method() const { return is_field() || is_method() || is_interface_method(); }
duke@435 76 bool is_symbol() const { return is_utf8(); }
duke@435 77
duke@435 78 constantTag(jbyte tag) {
duke@435 79 assert((tag >= 0 && tag <= JVM_CONSTANT_NameAndType) ||
duke@435 80 (tag >= JVM_CONSTANT_InternalMin && tag <= JVM_CONSTANT_InternalMax), "Invalid constant tag");
duke@435 81 _tag = tag;
duke@435 82 }
duke@435 83
duke@435 84 jbyte value() { return _tag; }
duke@435 85
duke@435 86 void print_on(outputStream* st) const PRODUCT_RETURN;
duke@435 87 };

mercurial