hotspot/src/share/vm/oops/instanceKlass.hpp
author tschatzl
Thu, 28 Jan 2016 13:30:12 +0100
changeset 35877 a2a62511d0f8
parent 35871 607bf949dfb3
child 35898 ddc274f0052f
permissions -rw-r--r--
8146987: Improve Parallel GC Full GC by caching results of live_words_in_range() Summary: A large part of time in the parallel scavenge collector is spent finding out the amount of live words within memory ranges to find out where to move an object to. Try to incrementally calculate this value. Reviewed-by: tschatzl, mgerdin, jmasa Contributed-by: ray alex <sky1young@gmail.com>
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
35847
990c61a50f24 8143608: Don't 64-bit align start of InstanceKlass vtable, itable, and nonstatic_oopmap on 32-bit systems
cjplummer
parents: 35135
diff changeset
     2
 * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4584
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4584
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4584
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    25
#ifndef SHARE_VM_OOPS_INSTANCEKLASS_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    26
#define SHARE_VM_OOPS_INSTANCEKLASS_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    27
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
    28
#include "classfile/classLoaderData.hpp"
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30227
diff changeset
    29
#include "gc/shared/specialized_oop_closures.hpp"
18025
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 17828
diff changeset
    30
#include "memory/referenceType.hpp"
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
    31
#include "oops/annotations.hpp"
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
    32
#include "oops/constMethod.hpp"
10546
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
    33
#include "oops/fieldInfo.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    34
#include "oops/instanceOop.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    35
#include "oops/klassVtable.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    36
#include "runtime/handles.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    37
#include "runtime/os.hpp"
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 30227
diff changeset
    38
#include "trace/traceMacros.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    39
#include "utilities/accessFlags.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    40
#include "utilities/bitMap.inline.hpp"
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15202
diff changeset
    41
#include "utilities/macros.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    42
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
    43
// An InstanceKlass is the VM level representation of a Java class.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
// It contains all information needed for at class at execution runtime.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
23515
f4872ef5df09 8031820: NPG: Fix remaining references to metadata as oops in comments
coleenp
parents: 22916
diff changeset
    46
//  InstanceKlass embedded field layout (after declared fields):
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
//    [EMBEDDED Java vtable             ] size in words = vtable_len
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
//    [EMBEDDED nonstatic oop-map blocks] size in words = nonstatic_oop_map_size
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
    49
//      The embedded nonstatic oop-map blocks are short pairs (offset, length)
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
    50
//      indicating where oops are located in instances of this klass.
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
    51
//    [EMBEDDED implementor of the interface] only exist for interface
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
    52
//    [EMBEDDED host klass        ] only exist for an anonymous class (JSR 292 enabled)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
// forward declaration for class -- see below for definition
34195
89011d12ebd3 8139595: MethodHandles::remove_dependent_nmethod is not MT safe
vlivanov
parents: 33611
diff changeset
    56
class BreakpointInfo;
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
    57
class ClassFileParser;
34195
89011d12ebd3 8139595: MethodHandles::remove_dependent_nmethod is not MT safe
vlivanov
parents: 33611
diff changeset
    58
class DepChange;
89011d12ebd3 8139595: MethodHandles::remove_dependent_nmethod is not MT safe
vlivanov
parents: 33611
diff changeset
    59
class DependencyContext;
89011d12ebd3 8139595: MethodHandles::remove_dependent_nmethod is not MT safe
vlivanov
parents: 33611
diff changeset
    60
class fieldDescriptor;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
class jniIdMapBase;
34195
89011d12ebd3 8139595: MethodHandles::remove_dependent_nmethod is not MT safe
vlivanov
parents: 33611
diff changeset
    62
class JNIid;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
class JvmtiCachedClassFieldMap;
17029
9ff8d7c0ed79 8008511: JSR 292: MemberName vmtarget refs to methods must be updated at class redefinition
sspitsyn
parents: 15935
diff changeset
    64
class MemberNameTable;
34195
89011d12ebd3 8139595: MethodHandles::remove_dependent_nmethod is not MT safe
vlivanov
parents: 33611
diff changeset
    65
class SuperTypeClosure;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
// This is used in iterators below.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
class FieldClosure: public StackObj {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
  virtual void do_field(fieldDescriptor* fd) = 0;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
#ifndef PRODUCT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
// Print fields.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
// If "obj" argument to constructor is NULL, prints static fields, otherwise prints non-static fields.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
class FieldPrinter: public FieldClosure {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
   oop _obj;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
   outputStream* _st;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
   FieldPrinter(outputStream* st, oop obj = NULL) : _obj(obj), _st(st) {}
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
   void do_field(fieldDescriptor* fd);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
#endif  // !PRODUCT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
3693
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
    85
// ValueObjs embedded in klass. Describes where oops are located in instances of
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
    86
// this klass.
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
    87
class OopMapBlock VALUE_OBJ_CLASS_SPEC {
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
    88
 public:
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
    89
  // Byte offset of the first oop mapped by this block.
3694
942b7bc7f28c 6845368: large objects cause a crash or unexpected exception
jcoomes
parents: 3693
diff changeset
    90
  int offset() const          { return _offset; }
942b7bc7f28c 6845368: large objects cause a crash or unexpected exception
jcoomes
parents: 3693
diff changeset
    91
  void set_offset(int offset) { _offset = offset; }
3693
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
    92
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
    93
  // Number of oops in this block.
3694
942b7bc7f28c 6845368: large objects cause a crash or unexpected exception
jcoomes
parents: 3693
diff changeset
    94
  uint count() const         { return _count; }
942b7bc7f28c 6845368: large objects cause a crash or unexpected exception
jcoomes
parents: 3693
diff changeset
    95
  void set_count(uint count) { _count = count; }
3693
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
    96
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
    97
  // sizeof(OopMapBlock) in HeapWords.
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
    98
  static const int size_in_words() {
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
    99
    return align_size_up(int(sizeof(OopMapBlock)), HeapWordSize) >>
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   100
      LogHeapWordSize;
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   101
  }
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   102
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   103
 private:
3694
942b7bc7f28c 6845368: large objects cause a crash or unexpected exception
jcoomes
parents: 3693
diff changeset
   104
  int  _offset;
942b7bc7f28c 6845368: large objects cause a crash or unexpected exception
jcoomes
parents: 3693
diff changeset
   105
  uint _count;
3693
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   106
};
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   107
18940
d39d4765e6cb 8020309: Eliminate InstanceKlass::_cached_class_file_len.
jiangli
parents: 18687
diff changeset
   108
struct JvmtiCachedClassFileData;
d39d4765e6cb 8020309: Eliminate InstanceKlass::_cached_class_file_len.
jiangli
parents: 18687
diff changeset
   109
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   110
class InstanceKlass: public Klass {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
  friend class VMStructs;
35123
b0b89d83bcf5 8134994: use separate VMStructs databases for SA and JVMCI
twisti
parents: 34195
diff changeset
   112
  friend class JVMCIVMStructs;
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   113
  friend class ClassFileParser;
14477
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents: 14385
diff changeset
   114
  friend class CompileReplay;
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   115
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   116
 protected:
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   117
  InstanceKlass(const ClassFileParser& parser, unsigned kind);
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   118
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   119
 public:
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   120
  InstanceKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   121
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
  // See "The Java Virtual Machine Specification" section 2.16.2-5 for a detailed description
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
  // of the class loading & initialization procedure, and the use of the states.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
  enum ClassState {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
    allocated,                          // allocated (but not yet linked)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
    loaded,                             // loaded and inserted in class hierarchy (but not linked yet)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
    linked,                             // successfully linked/verified (but not initialized yet)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
    being_initialized,                  // currently running class initializer
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
    fully_initialized,                  // initialized (successfull final state)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
    initialization_error                // error happened during initialization
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
15104
f5d78994619f 8005048: NMT: #loaded classes needs to just show the # defined classes
zgu
parents: 14477
diff changeset
   133
  static int number_of_instance_classes() { return _total_instanceKlass_count; }
f5d78994619f 8005048: NMT: #loaded classes needs to just show the # defined classes
zgu
parents: 14477
diff changeset
   134
f5d78994619f 8005048: NMT: #loaded classes needs to just show the # defined classes
zgu
parents: 14477
diff changeset
   135
 private:
f5d78994619f 8005048: NMT: #loaded classes needs to just show the # defined classes
zgu
parents: 14477
diff changeset
   136
  static volatile int _total_instanceKlass_count;
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   137
  static InstanceKlass* allocate_instance_klass(const ClassFileParser& parser, TRAPS);
15104
f5d78994619f 8005048: NMT: #loaded classes needs to just show the # defined classes
zgu
parents: 14477
diff changeset
   138
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
 protected:
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   140
  // Annotations for this class
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   141
  Annotations*    _annotations;
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   142
  // Array classes holding elements of this class.
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   143
  Klass*          _array_klasses;
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   144
  // Constant pool for this class.
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   145
  ConstantPool* _constants;
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   146
  // The InnerClasses attribute and EnclosingMethod attribute. The
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   147
  // _inner_classes is an array of shorts. If the class has InnerClasses
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   148
  // attribute, then the _inner_classes array begins with 4-tuples of shorts
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   149
  // [inner_class_info_index, outer_class_info_index,
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   150
  // inner_name_index, inner_class_access_flags] for the InnerClasses
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   151
  // attribute. If the EnclosingMethod attribute exists, it occupies the
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   152
  // last two shorts [class_index, method_index] of the array. If only
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   153
  // the InnerClasses attribute exists, the _inner_classes array length is
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   154
  // number_of_inner_classes * 4. If the class has both InnerClasses
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   155
  // and EnclosingMethod attributes the _inner_classes array length is
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   156
  // number_of_inner_classes * 4 + enclosing_method_attribute_size.
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   157
  Array<jushort>* _inner_classes;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
8076
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7397
diff changeset
   159
  // the source debug extension for this klass, NULL if not specified.
13201
69f157caabcc 6294277: java -Xdebug crashes on SourceDebugExtension attribute larger than 64K
fparain
parents: 13195
diff changeset
   160
  // Specified as UTF-8 string without terminating zero byte in the classfile,
69f157caabcc 6294277: java -Xdebug crashes on SourceDebugExtension attribute larger than 64K
fparain
parents: 13195
diff changeset
   161
  // it is stored in the instanceklass as a NULL-terminated UTF-8 string
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   162
  const char*     _source_debug_extension;
8076
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7397
diff changeset
   163
  // Array name derived from this class which needs unreferencing
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7397
diff changeset
   164
  // if this class is unloaded.
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7397
diff changeset
   165
  Symbol*         _array_name;
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7397
diff changeset
   166
591
04d2e26e6d69 6703888: Compressed Oops: use the 32-bits gap after klass in a object
kvn
parents: 360
diff changeset
   167
  // Number of heapOopSize words used by non-static fields in this klass
04d2e26e6d69 6703888: Compressed Oops: use the 32-bits gap after klass in a object
kvn
parents: 360
diff changeset
   168
  // (including inherited fields but after header_size()).
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 222
diff changeset
   169
  int             _nonstatic_field_size;
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 222
diff changeset
   170
  int             _static_field_size;    // number words used by static fields (oop and non-oop) in this klass
19326
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   171
  // Constant pool index to the utf8 entry of the Generic signature,
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   172
  // or 0 if none.
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   173
  u2              _generic_signature_index;
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   174
  // Constant pool index to the utf8 entry for the name of source file
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   175
  // containing this klass, 0 if not specified.
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   176
  u2              _source_file_name_index;
11412
62fe312f32c5 7123315: instanceKlass::_static_oop_field_count and instanceKlass::_java_fields_count should be u2 type.
jiangli
parents: 11407
diff changeset
   177
  u2              _static_oop_field_count;// number of static oop fields in this klass
62fe312f32c5 7123315: instanceKlass::_static_oop_field_count and instanceKlass::_java_fields_count should be u2 type.
jiangli
parents: 11407
diff changeset
   178
  u2              _java_fields_count;    // The number of declared Java fields
3693
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   179
  int             _nonstatic_oop_map_size;// size in words of nonstatic oop map blocks
11405
ca38a49ef8c9 7102776: Pack instanceKlass boolean fields into single u1 field
coleenp
parents: 10547
diff changeset
   180
15199
f6ca17e14c5f 8005895: Inefficient InstanceKlass field packing wasts memory.
jiangli
parents: 15105
diff changeset
   181
  // _is_marked_dependent can be set concurrently, thus cannot be part of the
f6ca17e14c5f 8005895: Inefficient InstanceKlass field packing wasts memory.
jiangli
parents: 15105
diff changeset
   182
  // _misc_flags.
11440
dea12ec80745 7129240: backout fix for 7102776 until 7128770 is resolved
dcubed
parents: 11439
diff changeset
   183
  bool            _is_marked_dependent;  // used for marking during flushing and deoptimization
15199
f6ca17e14c5f 8005895: Inefficient InstanceKlass field packing wasts memory.
jiangli
parents: 15105
diff changeset
   184
33151
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   185
  // The low two bits of _misc_flags contains the kind field.
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   186
  // This can be used to quickly discriminate among the four kinds of
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   187
  // InstanceKlass.
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   188
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   189
  static const unsigned _misc_kind_field_size = 2;
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   190
  static const unsigned _misc_kind_field_pos  = 0;
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   191
  static const unsigned _misc_kind_field_mask = (1u << _misc_kind_field_size) - 1u;
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   192
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   193
  static const unsigned _misc_kind_other        = 0; // concrete InstanceKlass
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   194
  static const unsigned _misc_kind_reference    = 1; // InstanceRefKlass
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   195
  static const unsigned _misc_kind_class_loader = 2; // InstanceClassLoaderKlass
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   196
  static const unsigned _misc_kind_mirror       = 3; // InstanceMirrorKlass
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   197
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   198
  // Start after _misc_kind field.
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   199
  enum {
33151
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   200
    _misc_rewritten                = 1 << 2, // methods rewritten.
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   201
    _misc_has_nonstatic_fields     = 1 << 3, // for sizing with UseCompressedOops
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   202
    _misc_should_verify_class      = 1 << 4, // allow caching of preverification
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   203
    _misc_is_anonymous             = 1 << 5, // has embedded _host_klass field
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   204
    _misc_is_contended             = 1 << 6, // marked with contended annotation
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   205
    _misc_has_default_methods      = 1 << 7, // class/superclass/implemented interfaces has default methods
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   206
    _misc_declares_default_methods = 1 << 8, // directly declares default methods (any access)
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   207
    _misc_has_been_redefined       = 1 << 9, // class has been redefined
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   208
    _misc_is_scratch_class         = 1 << 10 // class is the redefined scratch class
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   209
  };
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   210
  u2              _misc_flags;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
  u2              _minor_version;        // minor version number of class file
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
  u2              _major_version;        // major version number of class file
489c9b5090e2 Initial load
duke
parents:
diff changeset
   213
  Thread*         _init_thread;          // Pointer to current thread doing initialization (to handle recusive initialization)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   214
  int             _vtable_len;           // length of Java vtable (in words)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   215
  int             _itable_len;           // length of Java itable (in words)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   216
  OopMapCache*    volatile _oop_map_cache;   // OopMapCache for all methods in the klass (allocated lazily)
17029
9ff8d7c0ed79 8008511: JSR 292: MemberName vmtarget refs to methods must be updated at class redefinition
sspitsyn
parents: 15935
diff changeset
   217
  MemberNameTable* _member_names;        // Member names
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   218
  JNIid*          _jni_ids;              // First JNI identifier for static fields in this class
489c9b5090e2 Initial load
duke
parents:
diff changeset
   219
  jmethodID*      _methods_jmethod_ids;  // jmethodIDs corresponding to method_idnum, or NULL if none
34195
89011d12ebd3 8139595: MethodHandles::remove_dependent_nmethod is not MT safe
vlivanov
parents: 33611
diff changeset
   220
  intptr_t        _dep_context;          // packed DependencyContext structure
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   221
  nmethod*        _osr_nmethods_head;    // Head of list of on-stack replacement nmethods for this class
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   222
  BreakpointInfo* _breakpoints;          // bpt lists, managed by Method*
26558
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
   223
  // Linked instanceKlasses of previous versions
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
   224
  InstanceKlass* _previous_versions;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   225
  // JVMTI fields can be moved to their own structure - see 6315920
18940
d39d4765e6cb 8020309: Eliminate InstanceKlass::_cached_class_file_len.
jiangli
parents: 18687
diff changeset
   226
  // JVMTI: cached class file, before retransformable agent modified it in CFLH
d39d4765e6cb 8020309: Eliminate InstanceKlass::_cached_class_file_len.
jiangli
parents: 18687
diff changeset
   227
  JvmtiCachedClassFileData* _cached_class_file;
15449
262003a04c6f 8006280: Need to reorder metadata structures to reduce size (64-bit)
iklam
parents: 15202
diff changeset
   228
262003a04c6f 8006280: Need to reorder metadata structures to reduce size (64-bit)
iklam
parents: 15202
diff changeset
   229
  volatile u2     _idnum_allocated_count;         // JNI/JVMTI: increments with the addition of methods, old ids don't change
262003a04c6f 8006280: Need to reorder metadata structures to reduce size (64-bit)
iklam
parents: 15202
diff changeset
   230
262003a04c6f 8006280: Need to reorder metadata structures to reduce size (64-bit)
iklam
parents: 15202
diff changeset
   231
  // Class states are defined as ClassState (see above).
262003a04c6f 8006280: Need to reorder metadata structures to reduce size (64-bit)
iklam
parents: 15202
diff changeset
   232
  // Place the _init_state here to utilize the unused 2-byte after
262003a04c6f 8006280: Need to reorder metadata structures to reduce size (64-bit)
iklam
parents: 15202
diff changeset
   233
  // _idnum_allocated_count.
262003a04c6f 8006280: Need to reorder metadata structures to reduce size (64-bit)
iklam
parents: 15202
diff changeset
   234
  u1              _init_state;                    // state of class
262003a04c6f 8006280: Need to reorder metadata structures to reduce size (64-bit)
iklam
parents: 15202
diff changeset
   235
  u1              _reference_type;                // reference type
262003a04c6f 8006280: Need to reorder metadata structures to reduce size (64-bit)
iklam
parents: 15202
diff changeset
   236
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   237
  JvmtiCachedClassFieldMap* _jvmti_cached_class_field_map;  // JVMTI: used during heap iteration
14385
959bbcc16725 7200776: Implement default methods in interfaces
kamg
parents: 13728
diff changeset
   238
15928
f9d5c6e4107f 8003553: NPG: metaspace objects should be zeroed in constructors
coleenp
parents: 15601
diff changeset
   239
  NOT_PRODUCT(int _verify_count;)  // to avoid redundant verifies
f9d5c6e4107f 8003553: NPG: metaspace objects should be zeroed in constructors
coleenp
parents: 15601
diff changeset
   240
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   241
  // Method array.
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   242
  Array<Method*>* _methods;
20391
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   243
  // Default Method Array, concrete methods inherited from interfaces
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   244
  Array<Method*>* _default_methods;
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   245
  // Interface (Klass*s) this class declares locally to implement.
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   246
  Array<Klass*>* _local_interfaces;
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   247
  // Interface (Klass*s) this class implements transitively.
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   248
  Array<Klass*>* _transitive_interfaces;
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   249
  // Int array containing the original order of method in the class file (for JVMTI).
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   250
  Array<int>*     _method_ordering;
20391
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   251
  // Int array containing the vtable_indices for default_methods
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   252
  // offset matches _default_methods offset
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   253
  Array<int>*     _default_vtable_indices;
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   254
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   255
  // Instance and static variable information, starts with 6-tuples of shorts
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   256
  // [access, name index, sig index, initval index, low_offset, high_offset]
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   257
  // for all fields, followed by the generic signature data at the end of
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   258
  // the array. Only fields with generic signature attributes have the generic
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   259
  // signature data set in the array. The fields array looks like following:
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   260
  //
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   261
  // f1: [access, name index, sig index, initial value index, low_offset, high_offset]
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   262
  // f2: [access, name index, sig index, initial value index, low_offset, high_offset]
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   263
  //      ...
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   264
  // fn: [access, name index, sig index, initial value index, low_offset, high_offset]
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   265
  //     [generic signature index]
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   266
  //     [generic signature index]
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   267
  //     ...
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   268
  Array<u2>*      _fields;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   269
489c9b5090e2 Initial load
duke
parents:
diff changeset
   270
  // embedded Java vtable follows here
489c9b5090e2 Initial load
duke
parents:
diff changeset
   271
  // embedded Java itables follows here
489c9b5090e2 Initial load
duke
parents:
diff changeset
   272
  // embedded static fields follows here
489c9b5090e2 Initial load
duke
parents:
diff changeset
   273
  // embedded nonstatic oop-map blocks follows here
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   274
  // embedded implementor of this interface follows here
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   275
  //   The embedded implementor only exists if the current klass is an
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   276
  //   iterface. The possible values of the implementor fall into following
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   277
  //   three cases:
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   278
  //     NULL: no implementor.
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   279
  //     A Klass* that's not itself: one implementor.
22916
582da2ed4dfa 8031752: Failed speculative optimizations should be reattempted when root of compilation is different
roland
parents: 22794
diff changeset
   280
  //     Itself: more than one implementors.
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   281
  // embedded host klass follows here
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   282
  //   The embedded host klass only exists in an anonymous class for
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   283
  //   dynamic language support (JSR 292 enabled). The host class grants
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   284
  //   its access privileges to this class also. The host class is either
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   285
  //   named, or a previously loaded anonymous class. A non-anonymous class
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   286
  //   or an anonymous class loaded through normal classloading does not
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   287
  //   have this embedded field.
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   288
  //
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   289
489c9b5090e2 Initial load
duke
parents:
diff changeset
   290
  friend class SystemDictionary;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   291
489c9b5090e2 Initial load
duke
parents:
diff changeset
   292
 public:
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   293
  bool has_nonstatic_fields() const        {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   294
    return (_misc_flags & _misc_has_nonstatic_fields) != 0;
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   295
  }
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   296
  void set_has_nonstatic_fields(bool b)    {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   297
    if (b) {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   298
      _misc_flags |= _misc_has_nonstatic_fields;
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   299
    } else {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   300
      _misc_flags &= ~_misc_has_nonstatic_fields;
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   301
    }
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   302
  }
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 222
diff changeset
   303
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   304
  // field sizes
489c9b5090e2 Initial load
duke
parents:
diff changeset
   305
  int nonstatic_field_size() const         { return _nonstatic_field_size; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   306
  void set_nonstatic_field_size(int size)  { _nonstatic_field_size = size; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   307
489c9b5090e2 Initial load
duke
parents:
diff changeset
   308
  int static_field_size() const            { return _static_field_size; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   309
  void set_static_field_size(int size)     { _static_field_size = size; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   310
11412
62fe312f32c5 7123315: instanceKlass::_static_oop_field_count and instanceKlass::_java_fields_count should be u2 type.
jiangli
parents: 11407
diff changeset
   311
  int static_oop_field_count() const       { return (int)_static_oop_field_count; }
62fe312f32c5 7123315: instanceKlass::_static_oop_field_count and instanceKlass::_java_fields_count should be u2 type.
jiangli
parents: 11407
diff changeset
   312
  void set_static_oop_field_count(u2 size) { _static_oop_field_count = size; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   313
489c9b5090e2 Initial load
duke
parents:
diff changeset
   314
  // Java vtable
489c9b5090e2 Initial load
duke
parents:
diff changeset
   315
  int  vtable_length() const               { return _vtable_len; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   316
  void set_vtable_length(int len)          { _vtable_len = len; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   317
489c9b5090e2 Initial load
duke
parents:
diff changeset
   318
  // Java itable
489c9b5090e2 Initial load
duke
parents:
diff changeset
   319
  int  itable_length() const               { return _itable_len; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   320
  void set_itable_length(int len)          { _itable_len = len; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   321
489c9b5090e2 Initial load
duke
parents:
diff changeset
   322
  // array klasses
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   323
  Klass* array_klasses() const             { return _array_klasses; }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   324
  void set_array_klasses(Klass* k)         { _array_klasses = k; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   325
489c9b5090e2 Initial load
duke
parents:
diff changeset
   326
  // methods
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   327
  Array<Method*>* methods() const          { return _methods; }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   328
  void set_methods(Array<Method*>* a)      { _methods = a; }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   329
  Method* method_with_idnum(int idnum);
30107
e3d259b825a1 8067662: "java.lang.NullPointerException: Method name is null" from StackTraceElement.<init>
sspitsyn
parents: 29576
diff changeset
   330
  Method* method_with_orig_idnum(int idnum);
e3d259b825a1 8067662: "java.lang.NullPointerException: Method name is null" from StackTraceElement.<init>
sspitsyn
parents: 29576
diff changeset
   331
  Method* method_with_orig_idnum(int idnum, int version);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   332
489c9b5090e2 Initial load
duke
parents:
diff changeset
   333
  // method ordering
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   334
  Array<int>* method_ordering() const     { return _method_ordering; }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   335
  void set_method_ordering(Array<int>* m) { _method_ordering = m; }
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   336
  void copy_method_ordering(const intArray* m, TRAPS);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   337
20391
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   338
  // default_methods
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   339
  Array<Method*>* default_methods() const  { return _default_methods; }
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   340
  void set_default_methods(Array<Method*>* a) { _default_methods = a; }
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   341
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   342
  // default method vtable_indices
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   343
  Array<int>* default_vtable_indices() const { return _default_vtable_indices; }
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   344
  void set_default_vtable_indices(Array<int>* v) { _default_vtable_indices = v; }
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   345
  Array<int>* create_new_default_vtable_indices(int len, TRAPS);
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   346
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   347
  // interfaces
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   348
  Array<Klass*>* local_interfaces() const          { return _local_interfaces; }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   349
  void set_local_interfaces(Array<Klass*>* a)      {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   350
    guarantee(_local_interfaces == NULL || a == NULL, "Just checking");
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   351
    _local_interfaces = a; }
15935
50da9e5eb858 8003419: NPG: Clean up metadata created during class loading if failure
coleenp
parents: 15930
diff changeset
   352
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   353
  Array<Klass*>* transitive_interfaces() const     { return _transitive_interfaces; }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   354
  void set_transitive_interfaces(Array<Klass*>* a) {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   355
    guarantee(_transitive_interfaces == NULL || a == NULL, "Just checking");
15935
50da9e5eb858 8003419: NPG: Clean up metadata created during class loading if failure
coleenp
parents: 15930
diff changeset
   356
    _transitive_interfaces = a;
50da9e5eb858 8003419: NPG: Clean up metadata created during class loading if failure
coleenp
parents: 15930
diff changeset
   357
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   358
10546
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
   359
 private:
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
   360
  friend class fieldDescriptor;
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
   361
  FieldInfo* field(int index) const { return FieldInfo::from_field_array(_fields, index); }
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
   362
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
   363
 public:
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
   364
  int     field_offset      (int index) const { return field(index)->offset(); }
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
   365
  int     field_access_flags(int index) const { return field(index)->access_flags(); }
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
   366
  Symbol* field_name        (int index) const { return field(index)->name(constants()); }
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
   367
  Symbol* field_signature   (int index) const { return field(index)->signature(constants()); }
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
   368
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
   369
  // Number of Java declared fields
11412
62fe312f32c5 7123315: instanceKlass::_static_oop_field_count and instanceKlass::_java_fields_count should be u2 type.
jiangli
parents: 11407
diff changeset
   370
  int java_fields_count() const           { return (int)_java_fields_count; }
10546
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
   371
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   372
  Array<u2>* fields() const            { return _fields; }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   373
  void set_fields(Array<u2>* f, u2 java_fields_count) {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   374
    guarantee(_fields == NULL || f == NULL, "Just checking");
15935
50da9e5eb858 8003419: NPG: Clean up metadata created during class loading if failure
coleenp
parents: 15930
diff changeset
   375
    _fields = f;
10546
e79347eebbc5 7086585: make Java field injection more flexible
never
parents: 9971
diff changeset
   376
    _java_fields_count = java_fields_count;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   377
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   378
489c9b5090e2 Initial load
duke
parents:
diff changeset
   379
  // inner classes
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   380
  Array<u2>* inner_classes() const       { return _inner_classes; }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   381
  void set_inner_classes(Array<u2>* f)   { _inner_classes = f; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   382
489c9b5090e2 Initial load
duke
parents:
diff changeset
   383
  enum InnerClassAttributeOffset {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   384
    // From http://mirror.eng/products/jdk/1.1/docs/guide/innerclasses/spec/innerclasses.doc10.html#18814
489c9b5090e2 Initial load
duke
parents:
diff changeset
   385
    inner_class_inner_class_info_offset = 0,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   386
    inner_class_outer_class_info_offset = 1,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   387
    inner_class_inner_name_offset = 2,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   388
    inner_class_access_flags_offset = 3,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   389
    inner_class_next_offset = 4
489c9b5090e2 Initial load
duke
parents:
diff changeset
   390
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   391
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   392
  enum EnclosingMethodAttributeOffset {
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   393
    enclosing_method_class_index_offset = 0,
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   394
    enclosing_method_method_index_offset = 1,
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   395
    enclosing_method_attribute_size = 2
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   396
  };
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   397
2264
55d0115a54fe 4766230: Hotspot vtable inconsistencies cause core dumps. 6579515. 6582242.
acorn
parents: 1550
diff changeset
   398
  // method override check
33593
60764a78fa5c 8140274: methodHandles and constantPoolHandles should be passed as const references
coleenp
parents: 33576
diff changeset
   399
  bool is_override(const methodHandle& super_method, Handle targetclassloader, Symbol* targetclassname, TRAPS);
2264
55d0115a54fe 4766230: Hotspot vtable inconsistencies cause core dumps. 6579515. 6582242.
acorn
parents: 1550
diff changeset
   400
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   401
  // package
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   402
  bool is_same_class_package(const Klass* class2) const;
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   403
  bool is_same_class_package(oop classloader2, const Symbol* classname2) const;
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   404
  static bool is_same_class_package(oop class_loader1,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   405
                                    const Symbol* class_name1,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   406
                                    oop class_loader2,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   407
                                    const Symbol* class_name2);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   408
30222
bfe6be3c4ef8 8057919: Class.getSimpleName() should work for non-JLS compliant class names
vlivanov
parents: 29698
diff changeset
   409
  // find an enclosing class
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   410
  InstanceKlass* compute_enclosing_class(bool* inner_is_member, TRAPS) const {
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   411
    return compute_enclosing_class_impl(this, inner_is_member, THREAD);
2332
5c7b6f4ce0a1 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 1550
diff changeset
   412
  }
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   413
  static InstanceKlass* compute_enclosing_class_impl(const InstanceKlass* self,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   414
                                                     bool* inner_is_member,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   415
                                                     TRAPS);
30222
bfe6be3c4ef8 8057919: Class.getSimpleName() should work for non-JLS compliant class names
vlivanov
parents: 29698
diff changeset
   416
bfe6be3c4ef8 8057919: Class.getSimpleName() should work for non-JLS compliant class names
vlivanov
parents: 29698
diff changeset
   417
  // Find InnerClasses attribute for k and return outer_class_info_index & inner_name_index.
bfe6be3c4ef8 8057919: Class.getSimpleName() should work for non-JLS compliant class names
vlivanov
parents: 29698
diff changeset
   418
  static bool find_inner_classes_attr(instanceKlassHandle k,
bfe6be3c4ef8 8057919: Class.getSimpleName() should work for non-JLS compliant class names
vlivanov
parents: 29698
diff changeset
   419
                                      int* ooff, int* noff, TRAPS);
2332
5c7b6f4ce0a1 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 1550
diff changeset
   420
5c7b6f4ce0a1 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 1550
diff changeset
   421
  // tell if two classes have the same enclosing class (at package level)
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   422
  bool is_same_package_member(const Klass* class2, TRAPS) const {
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   423
    return is_same_package_member_impl(this, class2, THREAD);
2332
5c7b6f4ce0a1 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 1550
diff changeset
   424
  }
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   425
  static bool is_same_package_member_impl(const InstanceKlass* self,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   426
                                          const Klass* class2,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   427
                                          TRAPS);
2332
5c7b6f4ce0a1 6814659: separable cleanups and subroutines for 6655638
jrose
parents: 1550
diff changeset
   428
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   429
  // initialization state
489c9b5090e2 Initial load
duke
parents:
diff changeset
   430
  bool is_loaded() const                   { return _init_state >= loaded; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   431
  bool is_linked() const                   { return _init_state >= linked; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   432
  bool is_initialized() const              { return _init_state == fully_initialized; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   433
  bool is_not_initialized() const          { return _init_state <  being_initialized; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   434
  bool is_being_initialized() const        { return _init_state == being_initialized; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   435
  bool is_in_error_state() const           { return _init_state == initialization_error; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   436
  bool is_reentrant_initialization(Thread *thread)  { return thread == _init_thread; }
11407
5399831730cd 7117052: instanceKlass::_init_state can be u1 type
coleenp
parents: 11405
diff changeset
   437
  ClassState  init_state()                 { return (ClassState)_init_state; }
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   438
  bool is_rewritten() const                { return (_misc_flags & _misc_rewritten) != 0; }
3820
0a8fbbe180db 6830542: Performance: JVM_DefineClass already verified.
acorn
parents: 2570
diff changeset
   439
0a8fbbe180db 6830542: Performance: JVM_DefineClass already verified.
acorn
parents: 2570
diff changeset
   440
  // defineClass specified verification
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   441
  bool should_verify_class() const         {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   442
    return (_misc_flags & _misc_should_verify_class) != 0;
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   443
  }
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   444
  void set_should_verify_class(bool value) {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   445
    if (value) {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   446
      _misc_flags |= _misc_should_verify_class;
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   447
    } else {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   448
      _misc_flags &= ~_misc_should_verify_class;
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   449
    }
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   450
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   451
489c9b5090e2 Initial load
duke
parents:
diff changeset
   452
  // marking
11440
dea12ec80745 7129240: backout fix for 7102776 until 7128770 is resolved
dcubed
parents: 11439
diff changeset
   453
  bool is_marked_dependent() const         { return _is_marked_dependent; }
dea12ec80745 7129240: backout fix for 7102776 until 7128770 is resolved
dcubed
parents: 11439
diff changeset
   454
  void set_is_marked_dependent(bool value) { _is_marked_dependent = value; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   455
489c9b5090e2 Initial load
duke
parents:
diff changeset
   456
  // initialization (virtuals from Klass)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   457
  bool should_be_initialized() const;  // means that initialize should be called
489c9b5090e2 Initial load
duke
parents:
diff changeset
   458
  void initialize(TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   459
  void link_class(TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   460
  bool link_class_or_fail(TRAPS); // returns false on failure
489c9b5090e2 Initial load
duke
parents:
diff changeset
   461
  void unlink_class();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   462
  void rewrite_class(TRAPS);
15099
b31d40895bbb 8005494: SIGSEGV in Rewriter::relocate_and_link() when testing Weblogic with CompressedOops and KlassPtrs
coleenp
parents: 15097
diff changeset
   463
  void link_methods(TRAPS);
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   464
  Method* class_initializer();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   465
489c9b5090e2 Initial load
duke
parents:
diff changeset
   466
  // set the class to initialized if no static initializer is present
489c9b5090e2 Initial load
duke
parents:
diff changeset
   467
  void eager_initialize(Thread *thread);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   468
489c9b5090e2 Initial load
duke
parents:
diff changeset
   469
  // reference type
11729
77f7d412d0a1 7132690: InstanceKlass:_reference_type should be u1 type
jiangli
parents: 11440
diff changeset
   470
  ReferenceType reference_type() const     { return (ReferenceType)_reference_type; }
77f7d412d0a1 7132690: InstanceKlass:_reference_type should be u1 type
jiangli
parents: 11440
diff changeset
   471
  void set_reference_type(ReferenceType t) {
77f7d412d0a1 7132690: InstanceKlass:_reference_type should be u1 type
jiangli
parents: 11440
diff changeset
   472
    assert(t == (u1)t, "overflow");
77f7d412d0a1 7132690: InstanceKlass:_reference_type should be u1 type
jiangli
parents: 11440
diff changeset
   473
    _reference_type = (u1)t;
77f7d412d0a1 7132690: InstanceKlass:_reference_type should be u1 type
jiangli
parents: 11440
diff changeset
   474
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   475
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   476
  static ByteSize reference_type_offset() { return in_ByteSize(offset_of(InstanceKlass, _reference_type)); }
9176
42d9d1010f38 7009266: G1: assert(obj->is_oop_or_null(true )) failed: Error
johnc
parents: 8725
diff changeset
   477
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   478
  // find local field, returns true if found
8076
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7397
diff changeset
   479
  bool find_local_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   480
  // find field in direct superinterfaces, returns the interface in which the field is defined
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   481
  Klass* find_interface_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   482
  // find field according to JVM spec 5.4.3.2, returns the klass in which the field is defined
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   483
  Klass* find_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   484
  // find instance or static fields according to JVM spec 5.4.3.2, returns the klass in which the field is defined
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   485
  Klass* find_field(Symbol* name, Symbol* sig, bool is_static, fieldDescriptor* fd) const;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   486
489c9b5090e2 Initial load
duke
parents:
diff changeset
   487
  // find a non-static or static field given its offset within the class.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   488
  bool contains_field_offset(int offset) {
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 222
diff changeset
   489
    return instanceOopDesc::contains_field_offset(offset, nonstatic_field_size());
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   490
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   491
489c9b5090e2 Initial load
duke
parents:
diff changeset
   492
  bool find_local_field_from_offset(int offset, bool is_static, fieldDescriptor* fd) const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   493
  bool find_field_from_offset(int offset, bool is_static, fieldDescriptor* fd) const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   494
489c9b5090e2 Initial load
duke
parents:
diff changeset
   495
  // find a local method (returns NULL if not found)
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   496
  Method* find_method(const Symbol* name, const Symbol* signature) const;
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   497
  static Method* find_method(const Array<Method*>* methods,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   498
                             const Symbol* name,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   499
                             const Symbol* signature);
28514
da53c1ffc837 8064524: Compiler code generation improvements
drchase
parents: 27674
diff changeset
   500
da53c1ffc837 8064524: Compiler code generation improvements
drchase
parents: 27674
diff changeset
   501
  // find a local method, but skip static methods
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   502
  Method* find_instance_method(const Symbol* name, const Symbol* signature) const;
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   503
  static Method* find_instance_method(const Array<Method*>* methods,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   504
                                      const Symbol* name,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   505
                                      const Symbol* signature);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   506
32189
5264b560ab1b 8087342: Crash in klassItable::initialize_itable_for_interface
acorn
parents: 31046
diff changeset
   507
  // find a local method (returns NULL if not found)
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   508
  Method* find_local_method(const Symbol* name,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   509
                            const Symbol* signature,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   510
                            OverpassLookupMode overpass_mode,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   511
                            StaticLookupMode static_mode,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   512
                            PrivateLookupMode private_mode) const;
28514
da53c1ffc837 8064524: Compiler code generation improvements
drchase
parents: 27674
diff changeset
   513
32189
5264b560ab1b 8087342: Crash in klassItable::initialize_itable_for_interface
acorn
parents: 31046
diff changeset
   514
  // find a local method from given methods array (returns NULL if not found)
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   515
  static Method* find_local_method(const Array<Method*>* methods,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   516
                                   const Symbol* name,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   517
                                   const Symbol* signature,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   518
                                   OverpassLookupMode overpass_mode,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   519
                                   StaticLookupMode static_mode,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   520
                                   PrivateLookupMode private_mode);
32189
5264b560ab1b 8087342: Crash in klassItable::initialize_itable_for_interface
acorn
parents: 31046
diff changeset
   521
5264b560ab1b 8087342: Crash in klassItable::initialize_itable_for_interface
acorn
parents: 31046
diff changeset
   522
  // find a local method index in methods or default_methods (returns -1 if not found)
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   523
  static int find_method_index(const Array<Method*>* methods,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   524
                               const Symbol* name,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   525
                               const Symbol* signature,
32189
5264b560ab1b 8087342: Crash in klassItable::initialize_itable_for_interface
acorn
parents: 31046
diff changeset
   526
                               OverpassLookupMode overpass_mode,
5264b560ab1b 8087342: Crash in klassItable::initialize_itable_for_interface
acorn
parents: 31046
diff changeset
   527
                               StaticLookupMode static_mode,
5264b560ab1b 8087342: Crash in klassItable::initialize_itable_for_interface
acorn
parents: 31046
diff changeset
   528
                               PrivateLookupMode private_mode);
20391
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   529
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   530
  // lookup operation (returns NULL if not found)
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   531
  Method* uncached_lookup_method(const Symbol* name,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   532
                                 const Symbol* signature,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   533
                                 OverpassLookupMode overpass_mode) const;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   534
489c9b5090e2 Initial load
duke
parents:
diff changeset
   535
  // lookup a method in all the interfaces that this class implements
489c9b5090e2 Initial load
duke
parents:
diff changeset
   536
  // (returns NULL if not found)
28731
f7339cba0a6a 8067480: Crash in klassItable::initialize_itable_for_interface when running vm.runtime.defmeth.StaticMethodsTest.
lfoltan
parents: 27674
diff changeset
   537
  Method* lookup_method_in_all_interfaces(Symbol* name, Symbol* signature, DefaultsLookupMode defaults_mode) const;
22232
26acfad336c0 8027804: JCK resolveMethod test fails expecting AbstractMethodError
hseigel
parents: 21913
diff changeset
   538
20391
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   539
  // lookup a method in local defaults then in all interfaces
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   540
  // (returns NULL if not found)
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
   541
  Method* lookup_method_in_ordered_interfaces(Symbol* name, Symbol* signature) const;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   542
14385
959bbcc16725 7200776: Implement default methods in interfaces
kamg
parents: 13728
diff changeset
   543
  // Find method indices by name.  If a method with the specified name is
959bbcc16725 7200776: Implement default methods in interfaces
kamg
parents: 13728
diff changeset
   544
  // found the index to the first method is returned, and 'end' is filled in
959bbcc16725 7200776: Implement default methods in interfaces
kamg
parents: 13728
diff changeset
   545
  // with the index of first non-name-matching method.  If no method is found
959bbcc16725 7200776: Implement default methods in interfaces
kamg
parents: 13728
diff changeset
   546
  // -1 is returned.
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   547
  int find_method_by_name(const Symbol* name, int* end) const;
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   548
  static int find_method_by_name(const Array<Method*>* methods,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   549
                                 const Symbol* name, int* end);
14385
959bbcc16725 7200776: Implement default methods in interfaces
kamg
parents: 13728
diff changeset
   550
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   551
  // constant pool
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   552
  ConstantPool* constants() const        { return _constants; }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   553
  void set_constants(ConstantPool* c)    { _constants = c; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   554
489c9b5090e2 Initial load
duke
parents:
diff changeset
   555
  // protection domain
17826
9ad5cd464a75 8003421: NPG: Move oops out of InstanceKlass into mirror
coleenp
parents: 17370
diff changeset
   556
  oop protection_domain() const;
9ad5cd464a75 8003421: NPG: Move oops out of InstanceKlass into mirror
coleenp
parents: 17370
diff changeset
   557
9ad5cd464a75 8003421: NPG: Move oops out of InstanceKlass into mirror
coleenp
parents: 17370
diff changeset
   558
  // signers
9ad5cd464a75 8003421: NPG: Move oops out of InstanceKlass into mirror
coleenp
parents: 17370
diff changeset
   559
  objArrayOop signers() const;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   560
1550
be2fc37a817f 6653858: dynamic languages need to be able to load anonymous classes
jrose
parents: 1388
diff changeset
   561
  // host class
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   562
  Klass* host_klass() const              {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   563
    Klass** hk = (Klass**)adr_host_klass();
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   564
    if (hk == NULL) {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   565
      return NULL;
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   566
    } else {
22757
b2cbb3680b4f 8033792: AltHashing used jint for imprecise bit shifting
minqi
parents: 22232
diff changeset
   567
      assert(*hk != NULL, "host klass should always be set if the address is not null");
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   568
      return *hk;
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   569
    }
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   570
  }
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   571
  void set_host_klass(const Klass* host) {
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   572
    assert(is_anonymous(), "not anonymous");
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   573
    const Klass** addr = (const Klass**)adr_host_klass();
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   574
    assert(addr != NULL, "no reversed space");
15873
5ce4f526e0ba 8008750: [partfait] Null pointer deference in hotspot/src/share/vm/oops/instanceKlass.hpp
morris
parents: 15601
diff changeset
   575
    if (addr != NULL) {
5ce4f526e0ba 8008750: [partfait] Null pointer deference in hotspot/src/share/vm/oops/instanceKlass.hpp
morris
parents: 15601
diff changeset
   576
      *addr = host;
5ce4f526e0ba 8008750: [partfait] Null pointer deference in hotspot/src/share/vm/oops/instanceKlass.hpp
morris
parents: 15601
diff changeset
   577
    }
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   578
  }
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   579
  bool is_anonymous() const                {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   580
    return (_misc_flags & _misc_is_anonymous) != 0;
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   581
  }
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   582
  void set_is_anonymous(bool value)        {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   583
    if (value) {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   584
      _misc_flags |= _misc_is_anonymous;
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   585
    } else {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   586
      _misc_flags &= ~_misc_is_anonymous;
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   587
    }
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   588
  }
1550
be2fc37a817f 6653858: dynamic languages need to be able to load anonymous classes
jrose
parents: 1388
diff changeset
   589
14816
f2935b95cb54 8004883: NPG: clean up anonymous class fix
coleenp
parents: 14477
diff changeset
   590
  // Oop that keeps the metadata for this class from being unloaded
f2935b95cb54 8004883: NPG: clean up anonymous class fix
coleenp
parents: 14477
diff changeset
   591
  // in places where the metadata is stored in other places, like nmethods
f2935b95cb54 8004883: NPG: clean up anonymous class fix
coleenp
parents: 14477
diff changeset
   592
  oop klass_holder() const {
f2935b95cb54 8004883: NPG: clean up anonymous class fix
coleenp
parents: 14477
diff changeset
   593
    return is_anonymous() ? java_mirror() : class_loader();
f2935b95cb54 8004883: NPG: clean up anonymous class fix
coleenp
parents: 14477
diff changeset
   594
  }
f2935b95cb54 8004883: NPG: clean up anonymous class fix
coleenp
parents: 14477
diff changeset
   595
15193
8e6b5694267f 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 15105
diff changeset
   596
  bool is_contended() const                {
8e6b5694267f 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 15105
diff changeset
   597
    return (_misc_flags & _misc_is_contended) != 0;
8e6b5694267f 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 15105
diff changeset
   598
  }
8e6b5694267f 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 15105
diff changeset
   599
  void set_is_contended(bool value)        {
8e6b5694267f 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 15105
diff changeset
   600
    if (value) {
8e6b5694267f 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 15105
diff changeset
   601
      _misc_flags |= _misc_is_contended;
8e6b5694267f 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 15105
diff changeset
   602
    } else {
8e6b5694267f 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 15105
diff changeset
   603
      _misc_flags &= ~_misc_is_contended;
8e6b5694267f 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 15105
diff changeset
   604
    }
8e6b5694267f 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 15105
diff changeset
   605
  }
8e6b5694267f 8003985: Support @Contended Annotation - JEP 142
jwilhelm
parents: 15105
diff changeset
   606
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   607
  // source file name
19326
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   608
  Symbol* source_file_name() const               {
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   609
    return (_source_file_name_index == 0) ?
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   610
      (Symbol*)NULL : _constants->symbol_at(_source_file_name_index);
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   611
  }
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   612
  u2 source_file_name_index() const              {
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   613
    return _source_file_name_index;
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   614
  }
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   615
  void set_source_file_name_index(u2 sourcefile_index) {
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   616
    _source_file_name_index = sourcefile_index;
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   617
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   618
489c9b5090e2 Initial load
duke
parents:
diff changeset
   619
  // minor and major version numbers of class file
489c9b5090e2 Initial load
duke
parents:
diff changeset
   620
  u2 minor_version() const                 { return _minor_version; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   621
  void set_minor_version(u2 minor_version) { _minor_version = minor_version; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   622
  u2 major_version() const                 { return _major_version; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   623
  void set_major_version(u2 major_version) { _major_version = major_version; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   624
489c9b5090e2 Initial load
duke
parents:
diff changeset
   625
  // source debug extension
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   626
  const char* source_debug_extension() const { return _source_debug_extension; }
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   627
  void set_source_debug_extension(const char* array, int length);
8076
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7397
diff changeset
   628
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7397
diff changeset
   629
  // symbol unloading support (refcount already added)
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7397
diff changeset
   630
  Symbol* array_name()                     { return _array_name; }
15928
f9d5c6e4107f 8003553: NPG: metaspace objects should be zeroed in constructors
coleenp
parents: 15601
diff changeset
   631
  void set_array_name(Symbol* name)        { assert(_array_name == NULL  || name == NULL, "name already created"); _array_name = name; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   632
489c9b5090e2 Initial load
duke
parents:
diff changeset
   633
  // nonstatic oop-map blocks
3694
942b7bc7f28c 6845368: large objects cause a crash or unexpected exception
jcoomes
parents: 3693
diff changeset
   634
  static int nonstatic_oop_map_size(unsigned int oop_map_count) {
3693
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   635
    return oop_map_count * OopMapBlock::size_in_words();
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   636
  }
3694
942b7bc7f28c 6845368: large objects cause a crash or unexpected exception
jcoomes
parents: 3693
diff changeset
   637
  unsigned int nonstatic_oop_map_count() const {
3693
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   638
    return _nonstatic_oop_map_size / OopMapBlock::size_in_words();
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   639
  }
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   640
  int nonstatic_oop_map_size() const { return _nonstatic_oop_map_size; }
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   641
  void set_nonstatic_oop_map_size(int words) {
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   642
    _nonstatic_oop_map_size = words;
af387bf37e8d 6861660: OopMapBlock count/size confusion
jcoomes
parents: 2570
diff changeset
   643
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   644
489c9b5090e2 Initial load
duke
parents:
diff changeset
   645
  // RedefineClasses() support for previous versions:
26558
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
   646
  void add_previous_version(instanceKlassHandle ikh, int emcp_method_count);
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
   647
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
   648
  InstanceKlass* previous_versions() const { return _previous_versions; }
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
   649
30107
e3d259b825a1 8067662: "java.lang.NullPointerException: Method name is null" from StackTraceElement.<init>
sspitsyn
parents: 29576
diff changeset
   650
  InstanceKlass* get_klass_version(int version) {
e3d259b825a1 8067662: "java.lang.NullPointerException: Method name is null" from StackTraceElement.<init>
sspitsyn
parents: 29576
diff changeset
   651
    for (InstanceKlass* ik = this; ik != NULL; ik = ik->previous_versions()) {
e3d259b825a1 8067662: "java.lang.NullPointerException: Method name is null" from StackTraceElement.<init>
sspitsyn
parents: 29576
diff changeset
   652
      if (ik->constants()->version() == version) {
e3d259b825a1 8067662: "java.lang.NullPointerException: Method name is null" from StackTraceElement.<init>
sspitsyn
parents: 29576
diff changeset
   653
        return ik;
e3d259b825a1 8067662: "java.lang.NullPointerException: Method name is null" from StackTraceElement.<init>
sspitsyn
parents: 29576
diff changeset
   654
      }
e3d259b825a1 8067662: "java.lang.NullPointerException: Method name is null" from StackTraceElement.<init>
sspitsyn
parents: 29576
diff changeset
   655
    }
e3d259b825a1 8067662: "java.lang.NullPointerException: Method name is null" from StackTraceElement.<init>
sspitsyn
parents: 29576
diff changeset
   656
    return NULL;
e3d259b825a1 8067662: "java.lang.NullPointerException: Method name is null" from StackTraceElement.<init>
sspitsyn
parents: 29576
diff changeset
   657
  }
e3d259b825a1 8067662: "java.lang.NullPointerException: Method name is null" from StackTraceElement.<init>
sspitsyn
parents: 29576
diff changeset
   658
26558
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
   659
  bool has_been_redefined() const {
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
   660
    return (_misc_flags & _misc_has_been_redefined) != 0;
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
   661
  }
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
   662
  void set_has_been_redefined() {
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
   663
    _misc_flags |= _misc_has_been_redefined;
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
   664
  }
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
   665
29576
c223b0a9872e 8061205: MetadataOnStackMark only needs to walk code cache during class redefinition
coleenp
parents: 29316
diff changeset
   666
  bool is_scratch_class() const {
c223b0a9872e 8061205: MetadataOnStackMark only needs to walk code cache during class redefinition
coleenp
parents: 29316
diff changeset
   667
    return (_misc_flags & _misc_is_scratch_class) != 0;
c223b0a9872e 8061205: MetadataOnStackMark only needs to walk code cache during class redefinition
coleenp
parents: 29316
diff changeset
   668
  }
c223b0a9872e 8061205: MetadataOnStackMark only needs to walk code cache during class redefinition
coleenp
parents: 29316
diff changeset
   669
c223b0a9872e 8061205: MetadataOnStackMark only needs to walk code cache during class redefinition
coleenp
parents: 29316
diff changeset
   670
  void set_is_scratch_class() {
c223b0a9872e 8061205: MetadataOnStackMark only needs to walk code cache during class redefinition
coleenp
parents: 29316
diff changeset
   671
    _misc_flags |= _misc_is_scratch_class;
c223b0a9872e 8061205: MetadataOnStackMark only needs to walk code cache during class redefinition
coleenp
parents: 29316
diff changeset
   672
  }
c223b0a9872e 8061205: MetadataOnStackMark only needs to walk code cache during class redefinition
coleenp
parents: 29316
diff changeset
   673
33151
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   674
private:
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   675
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   676
  void set_kind(unsigned kind) {
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   677
    assert(kind <= _misc_kind_field_mask, "Invalid InstanceKlass kind");
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   678
    unsigned fmask = _misc_kind_field_mask << _misc_kind_field_pos;
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   679
    unsigned flags = _misc_flags & ~fmask;
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   680
    _misc_flags = (flags | (kind << _misc_kind_field_pos));
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   681
  }
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   682
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   683
  bool is_kind(unsigned desired) const {
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   684
    unsigned kind = (_misc_flags >> _misc_kind_field_pos) & _misc_kind_field_mask;
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   685
    return kind == desired;
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   686
  }
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   687
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   688
public:
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   689
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   690
  // Other is anything that is not one of the more specialized kinds of InstanceKlass.
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   691
  bool is_other_instance_klass() const        { return is_kind(_misc_kind_other); }
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   692
  bool is_reference_instance_klass() const    { return is_kind(_misc_kind_reference); }
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   693
  bool is_mirror_instance_klass() const       { return is_kind(_misc_kind_mirror); }
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   694
  bool is_class_loader_instance_klass() const { return is_kind(_misc_kind_class_loader); }
686d694f5c6a 8138659: Speed up InstanceKlass subclass discrimination
kbarrett
parents: 32606
diff changeset
   695
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   696
  void init_previous_versions() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   697
    _previous_versions = NULL;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   698
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   699
29576
c223b0a9872e 8061205: MetadataOnStackMark only needs to walk code cache during class redefinition
coleenp
parents: 29316
diff changeset
   700
 private:
c223b0a9872e 8061205: MetadataOnStackMark only needs to walk code cache during class redefinition
coleenp
parents: 29316
diff changeset
   701
  static int  _previous_version_count;
c223b0a9872e 8061205: MetadataOnStackMark only needs to walk code cache during class redefinition
coleenp
parents: 29316
diff changeset
   702
 public:
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   703
  static void purge_previous_versions(InstanceKlass* ik);
29576
c223b0a9872e 8061205: MetadataOnStackMark only needs to walk code cache during class redefinition
coleenp
parents: 29316
diff changeset
   704
  static bool has_previous_versions() { return _previous_version_count > 0; }
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   705
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   706
  // JVMTI: Support for caching a class file before it is modified by an agent that can do retransformation
18940
d39d4765e6cb 8020309: Eliminate InstanceKlass::_cached_class_file_len.
jiangli
parents: 18687
diff changeset
   707
  void set_cached_class_file(JvmtiCachedClassFileData *data) {
d39d4765e6cb 8020309: Eliminate InstanceKlass::_cached_class_file_len.
jiangli
parents: 18687
diff changeset
   708
    _cached_class_file = data;
d39d4765e6cb 8020309: Eliminate InstanceKlass::_cached_class_file_len.
jiangli
parents: 18687
diff changeset
   709
  }
d39d4765e6cb 8020309: Eliminate InstanceKlass::_cached_class_file_len.
jiangli
parents: 18687
diff changeset
   710
  JvmtiCachedClassFileData * get_cached_class_file() { return _cached_class_file; }
d39d4765e6cb 8020309: Eliminate InstanceKlass::_cached_class_file_len.
jiangli
parents: 18687
diff changeset
   711
  jint get_cached_class_file_len();
d39d4765e6cb 8020309: Eliminate InstanceKlass::_cached_class_file_len.
jiangli
parents: 18687
diff changeset
   712
  unsigned char * get_cached_class_file_bytes();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   713
489c9b5090e2 Initial load
duke
parents:
diff changeset
   714
  // JVMTI: Support for caching of field indices, types, and offsets
489c9b5090e2 Initial load
duke
parents:
diff changeset
   715
  void set_jvmti_cached_class_field_map(JvmtiCachedClassFieldMap* descriptor) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   716
    _jvmti_cached_class_field_map = descriptor;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   717
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   718
  JvmtiCachedClassFieldMap* jvmti_cached_class_field_map() const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   719
    return _jvmti_cached_class_field_map;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   720
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   721
15199
f6ca17e14c5f 8005895: Inefficient InstanceKlass field packing wasts memory.
jiangli
parents: 15105
diff changeset
   722
  bool has_default_methods() const {
f6ca17e14c5f 8005895: Inefficient InstanceKlass field packing wasts memory.
jiangli
parents: 15105
diff changeset
   723
    return (_misc_flags & _misc_has_default_methods) != 0;
f6ca17e14c5f 8005895: Inefficient InstanceKlass field packing wasts memory.
jiangli
parents: 15105
diff changeset
   724
  }
f6ca17e14c5f 8005895: Inefficient InstanceKlass field packing wasts memory.
jiangli
parents: 15105
diff changeset
   725
  void set_has_default_methods(bool b) {
f6ca17e14c5f 8005895: Inefficient InstanceKlass field packing wasts memory.
jiangli
parents: 15105
diff changeset
   726
    if (b) {
f6ca17e14c5f 8005895: Inefficient InstanceKlass field packing wasts memory.
jiangli
parents: 15105
diff changeset
   727
      _misc_flags |= _misc_has_default_methods;
f6ca17e14c5f 8005895: Inefficient InstanceKlass field packing wasts memory.
jiangli
parents: 15105
diff changeset
   728
    } else {
f6ca17e14c5f 8005895: Inefficient InstanceKlass field packing wasts memory.
jiangli
parents: 15105
diff changeset
   729
      _misc_flags &= ~_misc_has_default_methods;
f6ca17e14c5f 8005895: Inefficient InstanceKlass field packing wasts memory.
jiangli
parents: 15105
diff changeset
   730
    }
f6ca17e14c5f 8005895: Inefficient InstanceKlass field packing wasts memory.
jiangli
parents: 15105
diff changeset
   731
  }
14385
959bbcc16725 7200776: Implement default methods in interfaces
kamg
parents: 13728
diff changeset
   732
27402
5c4675ddc00c 8043275: Fix interface initialization for default methods.
acorn
parents: 26558
diff changeset
   733
  bool declares_default_methods() const {
5c4675ddc00c 8043275: Fix interface initialization for default methods.
acorn
parents: 26558
diff changeset
   734
    return (_misc_flags & _misc_declares_default_methods) != 0;
5c4675ddc00c 8043275: Fix interface initialization for default methods.
acorn
parents: 26558
diff changeset
   735
  }
5c4675ddc00c 8043275: Fix interface initialization for default methods.
acorn
parents: 26558
diff changeset
   736
  void set_declares_default_methods(bool b) {
5c4675ddc00c 8043275: Fix interface initialization for default methods.
acorn
parents: 26558
diff changeset
   737
    if (b) {
5c4675ddc00c 8043275: Fix interface initialization for default methods.
acorn
parents: 26558
diff changeset
   738
      _misc_flags |= _misc_declares_default_methods;
5c4675ddc00c 8043275: Fix interface initialization for default methods.
acorn
parents: 26558
diff changeset
   739
    } else {
5c4675ddc00c 8043275: Fix interface initialization for default methods.
acorn
parents: 26558
diff changeset
   740
      _misc_flags &= ~_misc_declares_default_methods;
5c4675ddc00c 8043275: Fix interface initialization for default methods.
acorn
parents: 26558
diff changeset
   741
    }
5c4675ddc00c 8043275: Fix interface initialization for default methods.
acorn
parents: 26558
diff changeset
   742
  }
5c4675ddc00c 8043275: Fix interface initialization for default methods.
acorn
parents: 26558
diff changeset
   743
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   744
  // for adding methods, ConstMethod::UNSET_IDNUM means no more ids available
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   745
  inline u2 next_method_idnum();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   746
  void set_initial_method_idnum(u2 value)             { _idnum_allocated_count = value; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   747
489c9b5090e2 Initial load
duke
parents:
diff changeset
   748
  // generics support
19326
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   749
  Symbol* generic_signature() const                   {
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   750
    return (_generic_signature_index == 0) ?
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   751
      (Symbol*)NULL : _constants->symbol_at(_generic_signature_index);
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   752
  }
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   753
  u2 generic_signature_index() const                  {
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   754
    return _generic_signature_index;
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   755
  }
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   756
  void set_generic_signature_index(u2 sig_index)      {
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   757
    _generic_signature_index = sig_index;
14cb6cf26a96 8021948: Change InstanceKlass::_source_file_name and _generic_signature from Symbol* to constant pool indexes.
jiangli
parents: 18940
diff changeset
   758
  }
8076
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7397
diff changeset
   759
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   760
  u2 enclosing_method_data(int offset) const;
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   761
  u2 enclosing_method_class_index() const {
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   762
    return enclosing_method_data(enclosing_method_class_index_offset);
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   763
  }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   764
  u2 enclosing_method_method_index() {
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   765
    return enclosing_method_data(enclosing_method_method_index_offset);
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   766
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   767
  void set_enclosing_method_indices(u2 class_index,
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
   768
                                    u2 method_index);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   769
489c9b5090e2 Initial load
duke
parents:
diff changeset
   770
  // jmethodID support
3824
86e9e4b25bdf 6419370: 4/4 new jmethodID code has tiny holes in synchronization
dcubed
parents: 3822
diff changeset
   771
  static jmethodID get_jmethod_id(instanceKlassHandle ik_h,
33593
60764a78fa5c 8140274: methodHandles and constantPoolHandles should be passed as const references
coleenp
parents: 33576
diff changeset
   772
                     const methodHandle& method_h);
3824
86e9e4b25bdf 6419370: 4/4 new jmethodID code has tiny holes in synchronization
dcubed
parents: 3822
diff changeset
   773
  static jmethodID get_jmethod_id_fetch_or_update(instanceKlassHandle ik_h,
86e9e4b25bdf 6419370: 4/4 new jmethodID code has tiny holes in synchronization
dcubed
parents: 3822
diff changeset
   774
                     size_t idnum, jmethodID new_id, jmethodID* new_jmeths,
86e9e4b25bdf 6419370: 4/4 new jmethodID code has tiny holes in synchronization
dcubed
parents: 3822
diff changeset
   775
                     jmethodID* to_dealloc_id_p,
86e9e4b25bdf 6419370: 4/4 new jmethodID code has tiny holes in synchronization
dcubed
parents: 3822
diff changeset
   776
                     jmethodID** to_dealloc_jmeths_p);
86e9e4b25bdf 6419370: 4/4 new jmethodID code has tiny holes in synchronization
dcubed
parents: 3822
diff changeset
   777
  static void get_jmethod_id_length_value(jmethodID* cache, size_t idnum,
86e9e4b25bdf 6419370: 4/4 new jmethodID code has tiny holes in synchronization
dcubed
parents: 3822
diff changeset
   778
                size_t *length_p, jmethodID* id_p);
27478
0eedae0228ac 8062116: JVMTI GetClassMethods is Slow
jmanson
parents: 27435
diff changeset
   779
  void ensure_space_for_methodids(int start_offset = 0);
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   780
  jmethodID jmethod_id_or_null(Method* method);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   781
489c9b5090e2 Initial load
duke
parents:
diff changeset
   782
  // annotations support
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   783
  Annotations* annotations() const          { return _annotations; }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   784
  void set_annotations(Annotations* anno)   { _annotations = anno; }
15601
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   785
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   786
  AnnotationArray* class_annotations() const {
15601
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   787
    return (_annotations != NULL) ? _annotations->class_annotations() : NULL;
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   788
  }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   789
  Array<AnnotationArray*>* fields_annotations() const {
15601
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   790
    return (_annotations != NULL) ? _annotations->fields_annotations() : NULL;
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   791
  }
15601
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   792
  AnnotationArray* class_type_annotations() const {
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   793
    return (_annotations != NULL) ? _annotations->class_type_annotations() : NULL;
15097
9db149412e0e 8004823: Add VM support for type annotation reflection
stefank
parents: 14816
diff changeset
   794
  }
15601
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   795
  Array<AnnotationArray*>* fields_type_annotations() const {
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   796
    return (_annotations != NULL) ? _annotations->fields_type_annotations() : NULL;
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   797
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   798
  // allocation
489c9b5090e2 Initial load
duke
parents:
diff changeset
   799
  instanceOop allocate_instance(TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   800
489c9b5090e2 Initial load
duke
parents:
diff changeset
   801
  // additional member function to return a handle
489c9b5090e2 Initial load
duke
parents:
diff changeset
   802
  instanceHandle allocate_instance_handle(TRAPS)      { return instanceHandle(THREAD, allocate_instance(THREAD)); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   803
489c9b5090e2 Initial load
duke
parents:
diff changeset
   804
  objArrayOop allocate_objArray(int n, int length, TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   805
  // Helper function
489c9b5090e2 Initial load
duke
parents:
diff changeset
   806
  static instanceOop register_finalizer(instanceOop i, TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   807
489c9b5090e2 Initial load
duke
parents:
diff changeset
   808
  // Check whether reflection/jni/jvm code is allowed to instantiate this class;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   809
  // if not, throw either an Error or an Exception.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   810
  virtual void check_valid_for_instantiation(bool throwError, TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   811
489c9b5090e2 Initial load
duke
parents:
diff changeset
   812
  // initialization
489c9b5090e2 Initial load
duke
parents:
diff changeset
   813
  void call_class_initializer(TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   814
  void set_initialization_state_and_notify(ClassState state, TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   815
489c9b5090e2 Initial load
duke
parents:
diff changeset
   816
  // OopMapCache support
489c9b5090e2 Initial load
duke
parents:
diff changeset
   817
  OopMapCache* oop_map_cache()               { return _oop_map_cache; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   818
  void set_oop_map_cache(OopMapCache *cache) { _oop_map_cache = cache; }
33593
60764a78fa5c 8140274: methodHandles and constantPoolHandles should be passed as const references
coleenp
parents: 33576
diff changeset
   819
  void mask_for(const methodHandle& method, int bci, InterpreterOopMap* entry);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   820
489c9b5090e2 Initial load
duke
parents:
diff changeset
   821
  // JNI identifier support (for static fields - for jni performance)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   822
  JNIid* jni_ids()                               { return _jni_ids; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   823
  void set_jni_ids(JNIid* ids)                   { _jni_ids = ids; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   824
  JNIid* jni_id_for(int offset);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   825
489c9b5090e2 Initial load
duke
parents:
diff changeset
   826
  // maintenance of deoptimization dependencies
34195
89011d12ebd3 8139595: MethodHandles::remove_dependent_nmethod is not MT safe
vlivanov
parents: 33611
diff changeset
   827
  inline DependencyContext dependencies();
89011d12ebd3 8139595: MethodHandles::remove_dependent_nmethod is not MT safe
vlivanov
parents: 33611
diff changeset
   828
  int  mark_dependent_nmethods(DepChange& changes);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   829
  void add_dependent_nmethod(nmethod* nm);
33576
6dbde58b08a6 8058563: InstanceKlass::_dependencies list isn't cleared from empty nmethodBucket entries
stefank
parents: 33151
diff changeset
   830
  void remove_dependent_nmethod(nmethod* nm, bool delete_immediately);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   831
489c9b5090e2 Initial load
duke
parents:
diff changeset
   832
  // On-stack replacement support
489c9b5090e2 Initial load
duke
parents:
diff changeset
   833
  nmethod* osr_nmethods_head() const         { return _osr_nmethods_head; };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   834
  void set_osr_nmethods_head(nmethod* h)     { _osr_nmethods_head = h; };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   835
  void add_osr_nmethod(nmethod* n);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   836
  void remove_osr_nmethod(nmethod* n);
27434
b4b185d05bb5 8061817: Whitebox.deoptimizeMethod() does not deoptimize all OSR versions of method
thartmann
parents: 26558
diff changeset
   837
  int mark_osr_nmethods(const Method* m);
17370
59a0620561fa 8003557: NPG: Klass* const k should be const Klass* k.
minqi
parents: 17078
diff changeset
   838
  nmethod* lookup_osr_nmethod(const Method* m, int bci, int level, bool match_level) const;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   839
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   840
  // Breakpoint support (see methods on Method* for details)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   841
  BreakpointInfo* breakpoints() const       { return _breakpoints; };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   842
  void set_breakpoints(BreakpointInfo* bps) { _breakpoints = bps; };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   843
489c9b5090e2 Initial load
duke
parents:
diff changeset
   844
  // support for stub routines
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   845
  static ByteSize init_state_offset()  { return in_ByteSize(offset_of(InstanceKlass, _init_state)); }
12377
ae6def2813e0 7160570: Intrinsification support for tracing framework
rbackman
parents: 12369
diff changeset
   846
  TRACE_DEFINE_OFFSET;
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   847
  static ByteSize init_thread_offset() { return in_ByteSize(offset_of(InstanceKlass, _init_thread)); }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   848
489c9b5090e2 Initial load
duke
parents:
diff changeset
   849
  // subclass/subinterface checks
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   850
  bool implements_interface(Klass* k) const;
21768
b7dba4cde1c6 8026065: InterfaceMethodref for invokespecial must name a direct superinterface
hseigel
parents: 21079
diff changeset
   851
  bool is_same_or_direct_interface(Klass* k) const;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   852
24828
dd5406c950a1 6904403: assert(f == k-&gt;has_finalizer(),&quot;inconsistent has_finalizer&quot;) with debug VM
dsamersoff
parents: 23999
diff changeset
   853
#ifdef ASSERT
dd5406c950a1 6904403: assert(f == k-&gt;has_finalizer(),&quot;inconsistent has_finalizer&quot;) with debug VM
dsamersoff
parents: 23999
diff changeset
   854
  // check whether this class or one of its superclasses was redefined
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   855
  bool has_redefined_this_or_super() const;
24828
dd5406c950a1 6904403: assert(f == k-&gt;has_finalizer(),&quot;inconsistent has_finalizer&quot;) with debug VM
dsamersoff
parents: 23999
diff changeset
   856
#endif
dd5406c950a1 6904403: assert(f == k-&gt;has_finalizer(),&quot;inconsistent has_finalizer&quot;) with debug VM
dsamersoff
parents: 23999
diff changeset
   857
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   858
  // Access to the implementor of an interface.
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   859
  Klass* implementor() const
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   860
  {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   861
    Klass** k = adr_implementor();
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   862
    if (k == NULL) {
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   863
      return NULL;
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   864
    } else {
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   865
      return *k;
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   866
    }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   867
  }
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   868
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   869
  void set_implementor(Klass* k) {
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   870
    assert(is_interface(), "not interface");
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   871
    Klass** addr = adr_implementor();
15873
5ce4f526e0ba 8008750: [partfait] Null pointer deference in hotspot/src/share/vm/oops/instanceKlass.hpp
morris
parents: 15601
diff changeset
   872
    assert(addr != NULL, "null addr");
5ce4f526e0ba 8008750: [partfait] Null pointer deference in hotspot/src/share/vm/oops/instanceKlass.hpp
morris
parents: 15601
diff changeset
   873
    if (addr != NULL) {
5ce4f526e0ba 8008750: [partfait] Null pointer deference in hotspot/src/share/vm/oops/instanceKlass.hpp
morris
parents: 15601
diff changeset
   874
      *addr = k;
5ce4f526e0ba 8008750: [partfait] Null pointer deference in hotspot/src/share/vm/oops/instanceKlass.hpp
morris
parents: 15601
diff changeset
   875
    }
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   876
  }
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   877
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   878
  int  nof_implementors() const       {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   879
    Klass* k = implementor();
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   880
    if (k == NULL) {
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   881
      return 0;
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   882
    } else if (k != this) {
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   883
      return 1;
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   884
    } else {
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   885
      return 2;
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   886
    }
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   887
  }
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   888
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   889
  void add_implementor(Klass* k);  // k is a new class that implements this interface
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   890
  void init_implementor();           // initialize
489c9b5090e2 Initial load
duke
parents:
diff changeset
   891
489c9b5090e2 Initial load
duke
parents:
diff changeset
   892
  // link this class into the implementors list of every interface it implements
489c9b5090e2 Initial load
duke
parents:
diff changeset
   893
  void process_interfaces(Thread *thread);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   894
489c9b5090e2 Initial load
duke
parents:
diff changeset
   895
  // virtual operations from Klass
489c9b5090e2 Initial load
duke
parents:
diff changeset
   896
  bool is_leaf_class() const               { return _subklass == NULL; }
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   897
  GrowableArray<Klass*>* compute_secondary_supers(int num_extra_slots);
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   898
  bool compute_is_subtype_of(Klass* k);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   899
  bool can_be_primary_super_slow() const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   900
  int oop_size(oop obj)  const             { return size_helper(); }
33611
9abd65805e19 8139203: Consistent naming for klass type predicates
coleenp
parents: 33602
diff changeset
   901
  // slow because it's a virtual call and used for verifying the layout_helper.
9abd65805e19 8139203: Consistent naming for klass type predicates
coleenp
parents: 33602
diff changeset
   902
  // Using the layout_helper bits, we can call is_instance_klass without a virtual call.
9abd65805e19 8139203: Consistent naming for klass type predicates
coleenp
parents: 33602
diff changeset
   903
  DEBUG_ONLY(bool is_instance_klass_slow() const      { return true; })
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   904
489c9b5090e2 Initial load
duke
parents:
diff changeset
   905
  // Iterators
489c9b5090e2 Initial load
duke
parents:
diff changeset
   906
  void do_local_static_fields(FieldClosure* cl);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   907
  void do_nonstatic_fields(FieldClosure* cl); // including inherited fields
23872
536c66fc43d3 8028497: SIGSEGV at ClassLoaderData::oops_do(OopClosure*, KlassClosure*, bool)
coleenp
parents: 23515
diff changeset
   908
  void do_local_static_fields(void f(fieldDescriptor*, Handle, TRAPS), Handle, TRAPS);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   909
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   910
  void methods_do(void f(Method* method));
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   911
  void array_klasses_do(void f(Klass* k));
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   912
  void array_klasses_do(void f(Klass* k, TRAPS), TRAPS);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   913
  bool super_types_do(SuperTypeClosure* blk);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   914
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   915
  static InstanceKlass* cast(Klass* k) {
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   916
    return const_cast<InstanceKlass*>(cast(const_cast<const Klass*>(k)));
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   917
  }
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   918
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   919
  static const InstanceKlass* cast(const Klass* k) {
33602
16053580a684 8139163: InstanceKlass::cast passes through NULL
coleenp
parents: 33593
diff changeset
   920
    assert(k != NULL, "k should not be null");
33611
9abd65805e19 8139203: Consistent naming for klass type predicates
coleenp
parents: 33602
diff changeset
   921
    assert(k->is_instance_klass(), "cast to InstanceKlass");
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
   922
    return static_cast<const InstanceKlass*>(k);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   923
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   924
14385
959bbcc16725 7200776: Implement default methods in interfaces
kamg
parents: 13728
diff changeset
   925
  InstanceKlass* java_super() const {
959bbcc16725 7200776: Implement default methods in interfaces
kamg
parents: 13728
diff changeset
   926
    return (super() == NULL) ? NULL : cast(super());
959bbcc16725 7200776: Implement default methods in interfaces
kamg
parents: 13728
diff changeset
   927
  }
959bbcc16725 7200776: Implement default methods in interfaces
kamg
parents: 13728
diff changeset
   928
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   929
  // Sizing (in words)
35847
990c61a50f24 8143608: Don't 64-bit align start of InstanceKlass vtable, itable, and nonstatic_oopmap on 32-bit systems
cjplummer
parents: 35135
diff changeset
   930
  static int header_size()            { return sizeof(InstanceKlass)/HeapWordSize; }
15601
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   931
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   932
  static int size(int vtable_length, int itable_length,
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   933
                  int nonstatic_oop_map_size,
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   934
                  bool is_interface, bool is_anonymous) {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   935
    return align_object_size(header_size() +
35847
990c61a50f24 8143608: Don't 64-bit align start of InstanceKlass vtable, itable, and nonstatic_oopmap on 32-bit systems
cjplummer
parents: 35135
diff changeset
   936
           vtable_length +
990c61a50f24 8143608: Don't 64-bit align start of InstanceKlass vtable, itable, and nonstatic_oopmap on 32-bit systems
cjplummer
parents: 35135
diff changeset
   937
           itable_length +
990c61a50f24 8143608: Don't 64-bit align start of InstanceKlass vtable, itable, and nonstatic_oopmap on 32-bit systems
cjplummer
parents: 35135
diff changeset
   938
           nonstatic_oop_map_size +
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   939
           (is_interface ? (int)sizeof(Klass*)/HeapWordSize : 0) +
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   940
           (is_anonymous ? (int)sizeof(Klass*)/HeapWordSize : 0));
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   941
  }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   942
  int size() const                    { return size(vtable_length(),
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   943
                                               itable_length(),
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   944
                                               nonstatic_oop_map_size(),
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   945
                                               is_interface(),
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   946
                                               is_anonymous());
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   947
  }
15437
eabd4555d072 6479360: PrintClassHistogram improvements
acorn
parents: 15202
diff changeset
   948
#if INCLUDE_SERVICES
eabd4555d072 6479360: PrintClassHistogram improvements
acorn
parents: 15202
diff changeset
   949
  virtual void collect_statistics(KlassSizeStats *sz) const;
eabd4555d072 6479360: PrintClassHistogram improvements
acorn
parents: 15202
diff changeset
   950
#endif
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   951
35871
607bf949dfb3 8147461: Use byte offsets for vtable start and vtable length offsets
mgerdin
parents: 35847
diff changeset
   952
  static ByteSize vtable_start_offset()    { return in_ByteSize(header_size() * wordSize); }
607bf949dfb3 8147461: Use byte offsets for vtable start and vtable length offsets
mgerdin
parents: 35847
diff changeset
   953
  static ByteSize vtable_length_offset()   { return byte_offset_of(InstanceKlass, _vtable_len); }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   954
35871
607bf949dfb3 8147461: Use byte offsets for vtable start and vtable length offsets
mgerdin
parents: 35847
diff changeset
   955
  intptr_t* start_of_vtable() const        { return (intptr_t*) ((address)this + in_bytes(vtable_start_offset())); }
35847
990c61a50f24 8143608: Don't 64-bit align start of InstanceKlass vtable, itable, and nonstatic_oopmap on 32-bit systems
cjplummer
parents: 35135
diff changeset
   956
  intptr_t* start_of_itable() const        { return start_of_vtable() + vtable_length(); }
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   957
  int  itable_offset_in_words() const { return start_of_itable() - (intptr_t*)this; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   958
489c9b5090e2 Initial load
duke
parents:
diff changeset
   959
  intptr_t* end_of_itable() const          { return start_of_itable() + itable_length(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   960
8725
8c1e3dd5fe1b 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 8676
diff changeset
   961
  address static_field_addr(int offset);
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 222
diff changeset
   962
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 222
diff changeset
   963
  OopMapBlock* start_of_nonstatic_oop_maps() const {
35847
990c61a50f24 8143608: Don't 64-bit align start of InstanceKlass vtable, itable, and nonstatic_oopmap on 32-bit systems
cjplummer
parents: 35135
diff changeset
   964
    return (OopMapBlock*)(start_of_itable() + itable_length());
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 222
diff changeset
   965
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   966
15601
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   967
  Klass** end_of_nonstatic_oop_maps() const {
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   968
    return (Klass**)(start_of_nonstatic_oop_maps() +
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   969
                     nonstatic_oop_map_count());
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   970
  }
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   971
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   972
  Klass** adr_implementor() const {
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   973
    if (is_interface()) {
15601
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   974
      return (Klass**)end_of_nonstatic_oop_maps();
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   975
    } else {
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   976
      return NULL;
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   977
    }
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   978
  };
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 12231
diff changeset
   979
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   980
  Klass** adr_host_klass() const {
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   981
    if (is_anonymous()) {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
   982
      Klass** adr_impl = adr_implementor();
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   983
      if (adr_impl != NULL) {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   984
        return adr_impl + 1;
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   985
      } else {
15601
df8faef6efaf 8007320: NPG: move method annotations
coleenp
parents: 15484
diff changeset
   986
        return end_of_nonstatic_oop_maps();
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   987
      }
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   988
    } else {
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   989
      return NULL;
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   990
    }
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   991
  }
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
   992
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   993
  // Use this to return the size of an instance in heap words:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   994
  int size_helper() const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   995
    return layout_helper_to_size_helper(layout_helper());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   996
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   997
489c9b5090e2 Initial load
duke
parents:
diff changeset
   998
  // This bit is initialized in classFileParser.cpp.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   999
  // It is false under any of the following conditions:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1000
  //  - the class is abstract (including any interface)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1001
  //  - the class has a finalizer (if !RegisterFinalizersAtInit)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1002
  //  - the class size is larger than FastAllocateSizeLimit
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1003
  //  - the class is java/lang/Class, which cannot be allocated directly
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1004
  bool can_be_fastpath_allocated() const {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1005
    return !layout_helper_needs_slow_path(layout_helper());
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1006
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1007
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1008
  // Java vtable/itable
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1009
  klassVtable* vtable() const;        // return new klassVtable wrapper
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1010
  inline Method* method_at_vtable(int index);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1011
  klassItable* itable() const;        // return new klassItable wrapper
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1012
  Method* method_at_itable(Klass* holder, int index, TRAPS);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1013
20391
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
  1014
#if INCLUDE_JVMTI
29316
5287df8a8972 8046246: the constantPoolCacheOopDesc::adjust_method_entries() used in RedefineClasses does not scale
sspitsyn
parents: 28738
diff changeset
  1015
  void adjust_default_methods(InstanceKlass* holder, bool* trace_name_printed);
20391
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
  1016
#endif // INCLUDE_JVMTI
7b146c5ebb18 8009130: Lambda: Fix access controls, loader constraints.
acorn
parents: 20379
diff changeset
  1017
33576
6dbde58b08a6 8058563: InstanceKlass::_dependencies list isn't cleared from empty nmethodBucket entries
stefank
parents: 33151
diff changeset
  1018
  void clean_weak_instanceklass_links(BoolObjectClosure* is_alive);
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1019
  void clean_implementors_list(BoolObjectClosure* is_alive);
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1020
  void clean_method_data(BoolObjectClosure* is_alive);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1021
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1022
  // Explicit metaspace deallocation of fields
15935
50da9e5eb858 8003419: NPG: Clean up metadata created during class loading if failure
coleenp
parents: 15930
diff changeset
  1023
  // For RedefineClasses and class file parsing errors, we need to deallocate
50da9e5eb858 8003419: NPG: Clean up metadata created during class loading if failure
coleenp
parents: 15930
diff changeset
  1024
  // instanceKlasses and the metadata they point to.
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1025
  void deallocate_contents(ClassLoaderData* loader_data);
15935
50da9e5eb858 8003419: NPG: Clean up metadata created during class loading if failure
coleenp
parents: 15930
diff changeset
  1026
  static void deallocate_methods(ClassLoaderData* loader_data,
50da9e5eb858 8003419: NPG: Clean up metadata created during class loading if failure
coleenp
parents: 15930
diff changeset
  1027
                                 Array<Method*>* methods);
50da9e5eb858 8003419: NPG: Clean up metadata created during class loading if failure
coleenp
parents: 15930
diff changeset
  1028
  void static deallocate_interfaces(ClassLoaderData* loader_data,
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
  1029
                                    const Klass* super_klass,
15935
50da9e5eb858 8003419: NPG: Clean up metadata created during class loading if failure
coleenp
parents: 15930
diff changeset
  1030
                                    Array<Klass*>* local_interfaces,
50da9e5eb858 8003419: NPG: Clean up metadata created during class loading if failure
coleenp
parents: 15930
diff changeset
  1031
                                    Array<Klass*>* transitive_interfaces);
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1032
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1033
  // The constant pool is on stack if any of the methods are executing or
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1034
  // referenced by handles.
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1035
  bool on_stack() const { return _constants->on_stack(); }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1036
17075
b53332c50aba 8011803: release_C_heap_structures is never called for anonymous classes.
coleenp
parents: 17029
diff changeset
  1037
  // callbacks for actions during class unloading
b53332c50aba 8011803: release_C_heap_structures is never called for anonymous classes.
coleenp
parents: 17029
diff changeset
  1038
  static void notify_unload_class(InstanceKlass* ik);
b53332c50aba 8011803: release_C_heap_structures is never called for anonymous classes.
coleenp
parents: 17029
diff changeset
  1039
  static void release_C_heap_structures(InstanceKlass* ik);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1040
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1041
  // Naming
4094
1f424b2b2171 6815692: method handle code needs some cleanup (post-6655638)
jrose
parents: 3824
diff changeset
  1042
  const char* signature_name() const;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1043
30150
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1044
  // GC specific object visitors
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1045
  //
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1046
  // Mark Sweep
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1047
  int  oop_ms_adjust_pointers(oop obj);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1048
#if INCLUDE_ALL_GCS
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1049
  // Parallel Scavenge
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1050
  void oop_ps_push_contents(  oop obj, PSPromotionManager* pm);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1051
  // Parallel Compact
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1052
  void oop_pc_follow_contents(oop obj, ParCompactionManager* cm);
35877
a2a62511d0f8 8146987: Improve Parallel GC Full GC by caching results of live_words_in_range()
tschatzl
parents: 35871
diff changeset
  1053
  void oop_pc_update_pointers(oop obj, ParCompactionManager* cm);
30150
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1054
#endif
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1055
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1056
  // Oop fields (and metadata) iterators
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1057
  //  [nv = true]  Use non-virtual calls to do_oop_nv.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1058
  //  [nv = false] Use virtual calls to do_oop.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1059
  //
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1060
  // The InstanceKlass iterators also visits the Object's klass.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1061
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1062
  // Forward iteration
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1063
 public:
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1064
  // Iterate over all oop fields in the oop maps.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1065
  template <bool nv, class OopClosureType>
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1066
  inline void oop_oop_iterate_oop_maps(oop obj, OopClosureType* closure);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1067
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1068
 protected:
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1069
  // Iterate over all oop fields and metadata.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1070
  template <bool nv, class OopClosureType>
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1071
  inline int oop_oop_iterate(oop obj, OopClosureType* closure);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1072
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1073
 private:
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1074
  // Iterate over all oop fields in the oop maps.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1075
  // Specialized for [T = oop] or [T = narrowOop].
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1076
  template <bool nv, typename T, class OopClosureType>
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1077
  inline void oop_oop_iterate_oop_maps_specialized(oop obj, OopClosureType* closure);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1078
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1079
  // Iterate over all oop fields in one oop map.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1080
  template <bool nv, typename T, class OopClosureType>
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1081
  inline void oop_oop_iterate_oop_map(OopMapBlock* map, oop obj, OopClosureType* closure);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1082
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1083
30150
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1084
  // Reverse iteration
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1085
#if INCLUDE_ALL_GCS
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1086
 public:
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1087
  // Iterate over all oop fields in the oop maps.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1088
  template <bool nv, class OopClosureType>
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1089
  inline void oop_oop_iterate_oop_maps_reverse(oop obj, OopClosureType* closure);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1090
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1091
 protected:
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1092
  // Iterate over all oop fields and metadata.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1093
  template <bool nv, class OopClosureType>
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1094
  inline int oop_oop_iterate_reverse(oop obj, OopClosureType* closure);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1095
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1096
 private:
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1097
  // Iterate over all oop fields in the oop maps.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1098
  // Specialized for [T = oop] or [T = narrowOop].
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1099
  template <bool nv, typename T, class OopClosureType>
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1100
  inline void oop_oop_iterate_oop_maps_specialized_reverse(oop obj, OopClosureType* closure);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1101
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1102
  // Iterate over all oop fields in one oop map.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1103
  template <bool nv, typename T, class OopClosureType>
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1104
  inline void oop_oop_iterate_oop_map_reverse(OopMapBlock* map, oop obj, OopClosureType* closure);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1105
#endif
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1106
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1107
30150
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1108
  // Bounded range iteration
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1109
 public:
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1110
  // Iterate over all oop fields in the oop maps.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1111
  template <bool nv, class OopClosureType>
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1112
  inline void oop_oop_iterate_oop_maps_bounded(oop obj, OopClosureType* closure, MemRegion mr);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1113
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1114
 protected:
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1115
  // Iterate over all oop fields and metadata.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1116
  template <bool nv, class OopClosureType>
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1117
  inline int oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1118
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1119
 private:
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1120
  // Iterate over all oop fields in the oop maps.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1121
  // Specialized for [T = oop] or [T = narrowOop].
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1122
  template <bool nv, typename T, class OopClosureType>
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1123
  inline void oop_oop_iterate_oop_maps_specialized_bounded(oop obj, OopClosureType* closure, MemRegion mr);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1124
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1125
  // Iterate over all oop fields in one oop map.
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1126
  template <bool nv, typename T, class OopClosureType>
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1127
  inline void oop_oop_iterate_oop_map_bounded(OopMapBlock* map, oop obj, OopClosureType* closure, MemRegion mr);
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1128
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1129
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1130
 public:
d9c940aa42ef 8075955: Replace the macro based implementation of oop_oop_iterate with a template based solution
stefank
parents: 29698
diff changeset
  1131
30880
efe35e08179f 8080746: Refactor oop iteration macros to be more general
sjohanss
parents: 30764
diff changeset
  1132
  ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_OOP_ITERATE_DECL)
efe35e08179f 8080746: Refactor oop iteration macros to be more general
sjohanss
parents: 30764
diff changeset
  1133
  ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_OOP_ITERATE_DECL)
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents: 360
diff changeset
  1134
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15202
diff changeset
  1135
#if INCLUDE_ALL_GCS
30880
efe35e08179f 8080746: Refactor oop iteration macros to be more general
sjohanss
parents: 30764
diff changeset
  1136
  ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_OOP_ITERATE_DECL_BACKWARDS)
efe35e08179f 8080746: Refactor oop iteration macros to be more general
sjohanss
parents: 30764
diff changeset
  1137
  ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_OOP_ITERATE_DECL_BACKWARDS)
15482
470d0b0c09f1 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
jprovino
parents: 15202
diff changeset
  1138
#endif // INCLUDE_ALL_GCS
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1139
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1140
  u2 idnum_allocated_count() const      { return _idnum_allocated_count; }
17078
a37993c37937 8008962: NPG: Memory regression: One extra Monitor per ConstantPool
iklam
parents: 17075
diff changeset
  1141
26135
82b516c550f7 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 25492
diff changeset
  1142
public:
82b516c550f7 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 25492
diff changeset
  1143
  void set_in_error_state() {
82b516c550f7 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 25492
diff changeset
  1144
    assert(DumpSharedSpaces, "only call this when dumping archive");
82b516c550f7 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 25492
diff changeset
  1145
    _init_state = initialization_error;
82b516c550f7 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 25492
diff changeset
  1146
  }
82b516c550f7 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 25492
diff changeset
  1147
  bool check_sharing_error_state();
82b516c550f7 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 25492
diff changeset
  1148
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1149
private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1150
  // initialization state
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1151
#ifdef ASSERT
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1152
  void set_init_state(ClassState state);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1153
#else
11407
5399831730cd 7117052: instanceKlass::_init_state can be u1 type
coleenp
parents: 11405
diff changeset
  1154
  void set_init_state(ClassState state) { _init_state = (u1)state; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1155
#endif
12587
8f819769ca1b 7158552: The instanceKlsss::_host_klass is only needed for anonymous class for JSR 292 support.
jiangli
parents: 12377
diff changeset
  1156
  void set_rewritten()                  { _misc_flags |= _misc_rewritten; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1157
  void set_init_thread(Thread *thread)  { _init_thread = thread; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1158
3824
86e9e4b25bdf 6419370: 4/4 new jmethodID code has tiny holes in synchronization
dcubed
parents: 3822
diff changeset
  1159
  // The RedefineClasses() API can cause new method idnums to be needed
86e9e4b25bdf 6419370: 4/4 new jmethodID code has tiny holes in synchronization
dcubed
parents: 3822
diff changeset
  1160
  // which will cause the caches to grow. Safety requires different
86e9e4b25bdf 6419370: 4/4 new jmethodID code has tiny holes in synchronization
dcubed
parents: 3822
diff changeset
  1161
  // cache management logic if the caches can grow instead of just
86e9e4b25bdf 6419370: 4/4 new jmethodID code has tiny holes in synchronization
dcubed
parents: 3822
diff changeset
  1162
  // going from NULL to non-NULL.
86e9e4b25bdf 6419370: 4/4 new jmethodID code has tiny holes in synchronization
dcubed
parents: 3822
diff changeset
  1163
  bool idnum_can_increment() const      { return has_been_redefined(); }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1164
  jmethodID* methods_jmethod_ids_acquire() const
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1165
         { return (jmethodID*)OrderAccess::load_ptr_acquire(&_methods_jmethod_ids); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1166
  void release_set_methods_jmethod_ids(jmethodID* jmeths)
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1167
         { OrderAccess::release_store_ptr(&_methods_jmethod_ids, jmeths); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1168
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1169
  // Lock during initialization
17078
a37993c37937 8008962: NPG: Memory regression: One extra Monitor per ConstantPool
iklam
parents: 17075
diff changeset
  1170
public:
17826
9ad5cd464a75 8003421: NPG: Move oops out of InstanceKlass into mirror
coleenp
parents: 17370
diff changeset
  1171
  // Lock for (1) initialization; (2) access to the ConstantPool of this class.
9ad5cd464a75 8003421: NPG: Move oops out of InstanceKlass into mirror
coleenp
parents: 17370
diff changeset
  1172
  // Must be one per class and it has to be a VM internal object so java code
9ad5cd464a75 8003421: NPG: Move oops out of InstanceKlass into mirror
coleenp
parents: 17370
diff changeset
  1173
  // cannot lock it (like the mirror).
9ad5cd464a75 8003421: NPG: Move oops out of InstanceKlass into mirror
coleenp
parents: 17370
diff changeset
  1174
  // It has to be an object not a Mutex because it's held through java calls.
20379
a4c59d30d67d 8025004: -XX:+CheckUnhandledOops asserts for JDK 8 Solaris fastdebug binaries
coleenp
parents: 20065
diff changeset
  1175
  oop init_lock() const;
17078
a37993c37937 8008962: NPG: Memory regression: One extra Monitor per ConstantPool
iklam
parents: 17075
diff changeset
  1176
private:
21079
7028d0cb9b49 8014910: deadlock between JVM/TI ClassPrepare event handler and CompilerThread
iklam
parents: 20391
diff changeset
  1177
  void fence_and_clear_init_lock();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1178
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1179
  // Static methods that are used to implement member methods where an exposed this pointer
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1180
  // is needed due to possible GCs
23515
f4872ef5df09 8031820: NPG: Fix remaining references to metadata as oops in comments
coleenp
parents: 22916
diff changeset
  1181
  static bool link_class_impl                           (instanceKlassHandle this_k, bool throw_verifyerror, TRAPS);
f4872ef5df09 8031820: NPG: Fix remaining references to metadata as oops in comments
coleenp
parents: 22916
diff changeset
  1182
  static bool verify_code                               (instanceKlassHandle this_k, bool throw_verifyerror, TRAPS);
f4872ef5df09 8031820: NPG: Fix remaining references to metadata as oops in comments
coleenp
parents: 22916
diff changeset
  1183
  static void initialize_impl                           (instanceKlassHandle this_k, TRAPS);
27402
5c4675ddc00c 8043275: Fix interface initialization for default methods.
acorn
parents: 26558
diff changeset
  1184
  static void initialize_super_interfaces               (instanceKlassHandle this_k, TRAPS);
23515
f4872ef5df09 8031820: NPG: Fix remaining references to metadata as oops in comments
coleenp
parents: 22916
diff changeset
  1185
  static void eager_initialize_impl                     (instanceKlassHandle this_k);
f4872ef5df09 8031820: NPG: Fix remaining references to metadata as oops in comments
coleenp
parents: 22916
diff changeset
  1186
  static void set_initialization_state_and_notify_impl  (instanceKlassHandle this_k, ClassState state, TRAPS);
f4872ef5df09 8031820: NPG: Fix remaining references to metadata as oops in comments
coleenp
parents: 22916
diff changeset
  1187
  static void call_class_initializer_impl               (instanceKlassHandle this_k, TRAPS);
f4872ef5df09 8031820: NPG: Fix remaining references to metadata as oops in comments
coleenp
parents: 22916
diff changeset
  1188
  static Klass* array_klass_impl                        (instanceKlassHandle this_k, bool or_null, int n, TRAPS);
23872
536c66fc43d3 8028497: SIGSEGV at ClassLoaderData::oops_do(OopClosure*, KlassClosure*, bool)
coleenp
parents: 23515
diff changeset
  1189
  static void do_local_static_fields_impl               (instanceKlassHandle this_k, void f(fieldDescriptor* fd, Handle, TRAPS), Handle, TRAPS);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1190
  /* jni_id_for_impl for jfieldID only */
23515
f4872ef5df09 8031820: NPG: Fix remaining references to metadata as oops in comments
coleenp
parents: 22916
diff changeset
  1191
  static JNIid* jni_id_for_impl                         (instanceKlassHandle this_k, int offset);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1192
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1193
  // Returns the array class for the n'th dimension
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1194
  Klass* array_klass_impl(bool or_null, int n, TRAPS);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1195
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1196
  // Returns the array class with this class as element type
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1197
  Klass* array_klass_impl(bool or_null, TRAPS);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1198
23999
22eb7be3d99d 8033150: invokestatic: IncompatibleClassChangeError trying to invoke static method from a parent in presence of conflicting defaults.
lfoltan
parents: 23872
diff changeset
  1199
  // find a local method (returns NULL if not found)
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
  1200
  Method* find_method_impl(const Symbol* name,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
  1201
                           const Symbol* signature,
32189
5264b560ab1b 8087342: Crash in klassItable::initialize_itable_for_interface
acorn
parents: 31046
diff changeset
  1202
                           OverpassLookupMode overpass_mode,
5264b560ab1b 8087342: Crash in klassItable::initialize_itable_for_interface
acorn
parents: 31046
diff changeset
  1203
                           StaticLookupMode static_mode,
5264b560ab1b 8087342: Crash in klassItable::initialize_itable_for_interface
acorn
parents: 31046
diff changeset
  1204
                           PrivateLookupMode private_mode) const;
34666
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
  1205
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
  1206
  static Method* find_method_impl(const Array<Method*>* methods,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
  1207
                                  const Symbol* name,
1c7168ea0034 8140485: Class load and creation cleanup
mgronlun
parents: 34195
diff changeset
  1208
                                  const Symbol* signature,
32189
5264b560ab1b 8087342: Crash in klassItable::initialize_itable_for_interface
acorn
parents: 31046
diff changeset
  1209
                                  OverpassLookupMode overpass_mode,
5264b560ab1b 8087342: Crash in klassItable::initialize_itable_for_interface
acorn
parents: 31046
diff changeset
  1210
                                  StaticLookupMode static_mode,
5264b560ab1b 8087342: Crash in klassItable::initialize_itable_for_interface
acorn
parents: 31046
diff changeset
  1211
                                  PrivateLookupMode private_mode);
23999
22eb7be3d99d 8033150: invokestatic: IncompatibleClassChangeError trying to invoke static method from a parent in presence of conflicting defaults.
lfoltan
parents: 23872
diff changeset
  1212
17075
b53332c50aba 8011803: release_C_heap_structures is never called for anonymous classes.
coleenp
parents: 17029
diff changeset
  1213
  // Free CHeap allocated fields.
b53332c50aba 8011803: release_C_heap_structures is never called for anonymous classes.
coleenp
parents: 17029
diff changeset
  1214
  void release_C_heap_structures();
26558
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
  1215
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
  1216
  // RedefineClasses support
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
  1217
  void link_previous_versions(InstanceKlass* pv) { _previous_versions = pv; }
b7df27df6384 8055008: Clean up code that saves the previous versions of redefined classes
coleenp
parents: 26135
diff changeset
  1218
  void mark_newly_obsolete_methods(Array<Method*>* old_methods, int emcp_method_count);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1219
public:
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1220
  // CDS support - remove and restore oops from metadata. Oops are not shared.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1221
  virtual void remove_unshareable_info();
26135
82b516c550f7 8046070: Class Data Sharing clean up and refactoring
iklam
parents: 25492
diff changeset
  1222
  virtual void restore_unshareable_info(ClassLoaderData* loader_data, Handle protection_domain, TRAPS);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1223
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1224
  // jvm support
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1225
  jint compute_modifier_flags(TRAPS) const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1226
17029
9ff8d7c0ed79 8008511: JSR 292: MemberName vmtarget refs to methods must be updated at class redefinition
sspitsyn
parents: 15935
diff changeset
  1227
  // JSR-292 support
9ff8d7c0ed79 8008511: JSR 292: MemberName vmtarget refs to methods must be updated at class redefinition
sspitsyn
parents: 15935
diff changeset
  1228
  MemberNameTable* member_names() { return _member_names; }
9ff8d7c0ed79 8008511: JSR 292: MemberName vmtarget refs to methods must be updated at class redefinition
sspitsyn
parents: 15935
diff changeset
  1229
  void set_member_names(MemberNameTable* member_names) { _member_names = member_names; }
27674
00cabfc45357 8042235: redefining method used by multiple MethodHandles crashes VM
coleenp
parents: 27478
diff changeset
  1230
  bool add_member_name(Handle member_name);
17029
9ff8d7c0ed79 8008511: JSR 292: MemberName vmtarget refs to methods must be updated at class redefinition
sspitsyn
parents: 15935
diff changeset
  1231
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1232
public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1233
  // JVMTI support
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1234
  jint jvmti_class_status() const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1235
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1236
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1237
  // Printing
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1238
#ifndef PRODUCT
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1239
  void print_on(outputStream* st) const;
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1240
#endif
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1241
  void print_value_on(outputStream* st) const;
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1242
4584
e2a449e8cc6f 6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents: 4496
diff changeset
  1243
  void oop_print_value_on(oop obj, outputStream* st);
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1244
4584
e2a449e8cc6f 6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents: 4496
diff changeset
  1245
#ifndef PRODUCT
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1246
  void oop_print_on      (oop obj, outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1247
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1248
  void print_dependent_nmethods(bool verbose = false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1249
  bool is_dependent_nmethod(nmethod* nm);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1250
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1251
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1252
  const char* internal_name() const;
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1253
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1254
  // Verification
22794
f1c014ad3754 8027146: Class loading verification failure if GC occurs in Universe::flush_dependents_on
coleenp
parents: 22757
diff changeset
  1255
  void verify_on(outputStream* st);
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1256
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1257
  void oop_verify_on(oop obj, outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1258
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1259
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1260
inline Method* InstanceKlass::method_at_vtable(int index)  {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1261
#ifndef PRODUCT
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1262
  assert(index >= 0, "valid vtable index");
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1263
  if (DebugVtables) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1264
    verify_vtable_index(index);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1265
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1266
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1267
  vtableEntry* ve = (vtableEntry*)start_of_vtable();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1268
  return ve[index].method();
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1269
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1270
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1271
// for adding methods
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1272
// UNSET_IDNUM return means no more ids available
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1273
inline u2 InstanceKlass::next_method_idnum() {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1274
  if (_idnum_allocated_count == ConstMethod::MAX_IDNUM) {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1275
    return ConstMethod::UNSET_IDNUM; // no more ids available
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1276
  } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1277
    return _idnum_allocated_count++;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1278
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1279
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1280
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1281
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1282
/* JNIid class for jfieldIDs only */
13195
be27e1b6a4b9 6995781: Native Memory Tracking (Phase 1)
zgu
parents: 12772
diff changeset
  1283
class JNIid: public CHeapObj<mtClass> {
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1284
  friend class VMStructs;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1285
 private:
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1286
  Klass*             _holder;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1287
  JNIid*             _next;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1288
  int                _offset;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1289
#ifdef ASSERT
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1290
  bool               _is_static_field_id;
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1291
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1292
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1293
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1294
  // Accessors
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1295
  Klass* holder() const           { return _holder; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1296
  int offset() const              { return _offset; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1297
  JNIid* next()                   { return _next; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1298
  // Constructor
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1299
  JNIid(Klass* holder, int offset, JNIid* next);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1300
  // Identifier lookup
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1301
  JNIid* find(int offset);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1302
8725
8c1e3dd5fe1b 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 8676
diff changeset
  1303
  bool find_local_field(fieldDescriptor* fd) {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1304
    return InstanceKlass::cast(holder())->find_local_field_from_offset(offset(), true, fd);
8725
8c1e3dd5fe1b 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 8676
diff changeset
  1305
  }
8c1e3dd5fe1b 7017732: move static fields into Class to prepare for perm gen removal
never
parents: 8676
diff changeset
  1306
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1307
  static void deallocate(JNIid* id);
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1308
  // Debugging
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1309
#ifdef ASSERT
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1310
  bool is_static_field_id() const { return _is_static_field_id; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1311
  void set_is_static_field_id()   { _is_static_field_id = true; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1312
#endif
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1313
  void verify(Klass* holder);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1314
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
  1315
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1316
// An iterator that's used to access the inner classes indices in the
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1317
// InstanceKlass::_inner_classes array.
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1318
class InnerClassesIterator : public StackObj {
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1319
 private:
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1320
  Array<jushort>* _inner_classes;
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1321
  int _length;
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1322
  int _idx;
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1323
 public:
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1324
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1325
  InnerClassesIterator(instanceKlassHandle k) {
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1326
    _inner_classes = k->inner_classes();
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1327
    if (k->inner_classes() != NULL) {
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1328
      _length = _inner_classes->length();
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1329
      // The inner class array's length should be the multiple of
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1330
      // inner_class_next_offset if it only contains the InnerClasses
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1331
      // attribute data, or it should be
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1332
      // n*inner_class_next_offset+enclosing_method_attribute_size
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1333
      // if it also contains the EnclosingMethod data.
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1334
      assert((_length % InstanceKlass::inner_class_next_offset == 0 ||
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1335
              _length % InstanceKlass::inner_class_next_offset == InstanceKlass::enclosing_method_attribute_size),
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1336
             "just checking");
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1337
      // Remove the enclosing_method portion if exists.
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1338
      if (_length % InstanceKlass::inner_class_next_offset == InstanceKlass::enclosing_method_attribute_size) {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1339
        _length -= InstanceKlass::enclosing_method_attribute_size;
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1340
      }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1341
    } else {
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1342
      _length = 0;
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1343
    }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1344
    _idx = 0;
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1345
  }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1346
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1347
  int length() const {
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1348
    return _length;
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1349
  }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1350
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1351
  void next() {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1352
    _idx += InstanceKlass::inner_class_next_offset;
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1353
  }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1354
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1355
  bool done() const {
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1356
    return (_idx >= _length);
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1357
  }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1358
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1359
  u2 inner_class_info_index() const {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1360
    return _inner_classes->at(
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1361
               _idx + InstanceKlass::inner_class_inner_class_info_offset);
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1362
  }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1363
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1364
  void set_inner_class_info_index(u2 index) {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1365
    _inner_classes->at_put(
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1366
               _idx + InstanceKlass::inner_class_inner_class_info_offset, index);
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1367
  }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1368
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1369
  u2 outer_class_info_index() const {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1370
    return _inner_classes->at(
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1371
               _idx + InstanceKlass::inner_class_outer_class_info_offset);
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1372
  }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1373
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1374
  void set_outer_class_info_index(u2 index) {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1375
    _inner_classes->at_put(
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1376
               _idx + InstanceKlass::inner_class_outer_class_info_offset, index);
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1377
  }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1378
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1379
  u2 inner_name_index() const {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1380
    return _inner_classes->at(
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1381
               _idx + InstanceKlass::inner_class_inner_name_offset);
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1382
  }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1383
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1384
  void set_inner_name_index(u2 index) {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1385
    _inner_classes->at_put(
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1386
               _idx + InstanceKlass::inner_class_inner_name_offset, index);
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1387
  }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1388
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1389
  u2 inner_access_flags() const {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1390
    return _inner_classes->at(
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 13201
diff changeset
  1391
               _idx + InstanceKlass::inner_class_access_flags_offset);
12231
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1392
  }
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1393
};
6a9cfc59a18a 7109878: The instanceKlass EnclosingMethhod attribute fields can be folded into the _inner_class field.
jiangli
parents: 11731
diff changeset
  1394
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
  1395
#endif // SHARE_VM_OOPS_INSTANCEKLASS_HPP