hotspot/src/share/vm/ci/ciInstanceKlass.hpp
author minqi
Mon, 12 Nov 2012 14:03:53 -0800
changeset 14477 95e66ea71f71
parent 13728 882756847a04
child 17383 3665c0901a0d
permissions -rw-r--r--
6830717: replay of compilations would help with debugging Summary: When java process crashed in compiler thread, repeat the compilation process will help finding root cause. This is done with using SA dump application class data and replay data from core dump, then use debug version of jvm to recompile the problematic java method. Reviewed-by: kvn, twisti, sspitsyn Contributed-by: yumin.qi@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
     2
 * Copyright (c) 1999, 2012, 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: 4567
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 4567
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: 4567
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: 5925
diff changeset
    25
#ifndef SHARE_VM_CI_CIINSTANCEKLASS_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5925
diff changeset
    26
#define SHARE_VM_CI_CIINSTANCEKLASS_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5925
diff changeset
    27
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5925
diff changeset
    28
#include "ci/ciConstantPoolCache.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5925
diff changeset
    29
#include "ci/ciFlags.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5925
diff changeset
    30
#include "ci/ciKlass.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5925
diff changeset
    31
#include "ci/ciSymbol.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5925
diff changeset
    32
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
// ciInstanceKlass
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
//
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
    35
// This class represents a Klass* in the HotSpot virtual machine
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
    36
// whose Klass part is an InstanceKlass.  It may or may not
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
// be loaded.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
class ciInstanceKlass : public ciKlass {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
  CI_PACKAGE_ACCESS
4567
7fc02fbe5c7a 6893268: additional dynamic language related optimizations in C2
twisti
parents: 4450
diff changeset
    40
  friend class ciBytecodeStream;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
  friend class ciEnv;
4567
7fc02fbe5c7a 6893268: additional dynamic language related optimizations in C2
twisti
parents: 4450
diff changeset
    42
  friend class ciExceptionHandler;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
  friend class ciMethod;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
  friend class ciField;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
private:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
  jobject                _loader;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
  jobject                _protection_domain;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
    50
  InstanceKlass::ClassState _init_state;           // state of class
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 217
diff changeset
    51
  bool                   _is_shared;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
  bool                   _has_finalizer;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
  bool                   _has_subklass;
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 217
diff changeset
    54
  bool                   _has_nonstatic_fields;
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 217
diff changeset
    55
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
  ciFlags                _flags;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
  jint                   _nonstatic_field_size;
217
c646ef2f5d58 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 1
diff changeset
    58
  jint                   _nonstatic_oop_map_size;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
  // Lazy fields get filled in only upon request.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
  ciInstanceKlass*       _super;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
  ciInstance*            _java_mirror;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
  ciConstantPoolCache*   _field_cache;  // cached map index->field
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
  GrowableArray<ciField*>* _nonstatic_fields;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
    67
  // The possible values of the _implementor fall into following three cases:
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
    68
  //   NULL: no implementor.
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
    69
  //   A ciInstanceKlass that's not itself: one implementor.
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
    70
  //   Itsef: more than one implementors.
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
    71
  ciInstanceKlass*       _implementor;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
217
c646ef2f5d58 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 1
diff changeset
    73
  GrowableArray<ciField*>* _non_static_fields;
c646ef2f5d58 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 1
diff changeset
    74
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
protected:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
  ciInstanceKlass(KlassHandle h_k);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
  ciInstanceKlass(ciSymbol* name, jobject loader, jobject protection_domain);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
    79
  InstanceKlass* get_instanceKlass() const {
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
    80
    return (InstanceKlass*)get_Klass();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
  oop loader();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
  jobject loader_handle();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
  oop protection_domain();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
  jobject protection_domain_handle();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
  const char* type_string() { return "ciInstanceKlass"; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
4567
7fc02fbe5c7a 6893268: additional dynamic language related optimizations in C2
twisti
parents: 4450
diff changeset
    91
  bool is_in_package_impl(const char* packagename, int len);
7fc02fbe5c7a 6893268: additional dynamic language related optimizations in C2
twisti
parents: 4450
diff changeset
    92
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
  void print_impl(outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
  ciConstantPoolCache* field_cache();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
  bool is_shared() { return _is_shared; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
5925
a30fef61d0b7 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 5547
diff changeset
    99
  void compute_shared_init_state();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
  bool compute_shared_has_subklass();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
  int  compute_nonstatic_fields();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
  GrowableArray<ciField*>* compute_nonstatic_fields_impl(GrowableArray<ciField*>* super_fields);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
5925
a30fef61d0b7 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 5547
diff changeset
   104
  // Update the init_state for shared klasses
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
   105
  void update_if_shared(InstanceKlass::ClassState expected) {
5925
a30fef61d0b7 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 5547
diff changeset
   106
    if (_is_shared && _init_state != expected) {
a30fef61d0b7 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 5547
diff changeset
   107
      if (is_loaded()) compute_shared_init_state();
a30fef61d0b7 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 5547
diff changeset
   108
    }
a30fef61d0b7 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 5547
diff changeset
   109
  }
a30fef61d0b7 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 5547
diff changeset
   110
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
  // Has this klass been initialized?
489c9b5090e2 Initial load
duke
parents:
diff changeset
   113
  bool                   is_initialized() {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
   114
    update_if_shared(InstanceKlass::fully_initialized);
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
   115
    return _init_state == InstanceKlass::fully_initialized;
5925
a30fef61d0b7 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 5547
diff changeset
   116
  }
a30fef61d0b7 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 5547
diff changeset
   117
  // Is this klass being initialized?
a30fef61d0b7 6958668: repeated uncommon trapping for new of klass which is being initialized
never
parents: 5547
diff changeset
   118
  bool                   is_being_initialized() {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
   119
    update_if_shared(InstanceKlass::being_initialized);
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
   120
    return _init_state == InstanceKlass::being_initialized;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
  // Has this klass been linked?
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
  bool                   is_linked() {
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
   124
    update_if_shared(InstanceKlass::linked);
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
   125
    return _init_state >= InstanceKlass::linked;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
  // General klass information.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
  ciFlags                flags()          {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
    assert(is_loaded(), "must be loaded");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
    return _flags;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
  bool                   has_finalizer()  {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   134
    assert(is_loaded(), "must be loaded");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   135
    return _has_finalizer; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
  bool                   has_subklass()   {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
    assert(is_loaded(), "must be loaded");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
    if (_is_shared && !_has_subklass) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
      if (flags().is_final()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
        return false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
        return compute_shared_has_subklass();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
    return _has_subklass;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
  jint                   size_helper()  {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
    return (Klass::layout_helper_size_in_bytes(layout_helper())
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
            >> LogHeapWordSize);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
  jint                   nonstatic_field_size()  {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
    assert(is_loaded(), "must be loaded");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
    return _nonstatic_field_size; }
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 217
diff changeset
   154
  jint                   has_nonstatic_fields()  {
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 217
diff changeset
   155
    assert(is_loaded(), "must be loaded");
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 217
diff changeset
   156
    return _has_nonstatic_fields; }
217
c646ef2f5d58 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 1
diff changeset
   157
  jint                   nonstatic_oop_map_size()  {
c646ef2f5d58 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 1
diff changeset
   158
    assert(is_loaded(), "must be loaded");
c646ef2f5d58 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 1
diff changeset
   159
    return _nonstatic_oop_map_size; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
  ciInstanceKlass*       super();
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
   161
  jint                   nof_implementors() {
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
   162
    ciInstanceKlass* impl;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
    assert(is_loaded(), "must be loaded");
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
   164
    impl = implementor();
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
   165
    if (impl == NULL) {
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
   166
      return 0;
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
   167
    } else if (impl != this) {
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
   168
      return 1;
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
   169
    } else {
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
   170
      return 2;
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
   171
    }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
  ciInstanceKlass* get_canonical_holder(int offset);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
  ciField* get_field_by_offset(int field_offset, bool is_static);
4450
6d700b859b3e 6892658: C2 should optimize some stringbuilder patterns
never
parents: 670
diff changeset
   176
  ciField* get_field_by_name(ciSymbol* name, ciSymbol* signature, bool is_static);
217
c646ef2f5d58 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 1
diff changeset
   177
c646ef2f5d58 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 1
diff changeset
   178
  GrowableArray<ciField*>* non_static_fields();
c646ef2f5d58 6667620: (Escape Analysis) fix deoptimization for scalar replaced objects
kvn
parents: 1
diff changeset
   179
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
  // total number of nonstatic fields (including inherited):
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
  int nof_nonstatic_fields() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
    if (_nonstatic_fields == NULL)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
      return compute_nonstatic_fields();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
    else
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
      return _nonstatic_fields->length();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
  // nth nonstatic field (presented by ascending address)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
  ciField* nonstatic_field_at(int i) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
    assert(_nonstatic_fields != NULL, "");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
    return _nonstatic_fields->at(i);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
  ciInstanceKlass* unique_concrete_subklass();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
  bool has_finalizable_subclass();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
  bool contains_field_offset(int offset) {
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 217
diff changeset
   197
    return instanceOopDesc::contains_field_offset(offset, nonstatic_field_size());
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
  // Get the instance of java.lang.Class corresponding to
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
  // this klass.  This instance is used for locking of
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
  // synchronized static methods of this klass.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
  ciInstance*            java_mirror();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
  // Java access flags
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
  bool is_public      () { return flags().is_public(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
  bool is_final       () { return flags().is_final(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
  bool is_super       () { return flags().is_super(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
  bool is_interface   () { return flags().is_interface(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   210
  bool is_abstract    () { return flags().is_abstract(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
  ciMethod* find_method(ciSymbol* name, ciSymbol* signature);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   213
  // Note:  To find a method from name and type strings, use ciSymbol::make,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   214
  // but consider adding to vmSymbols.hpp instead.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   215
489c9b5090e2 Initial load
duke
parents:
diff changeset
   216
  bool is_leaf_type();
12369
48fd3da4025c 7154670: The instanceKlass _implementors[] and _nof_implementors are not needed for non-interface klass.
jiangli
parents: 7397
diff changeset
   217
  ciInstanceKlass* implementor();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   218
489c9b5090e2 Initial load
duke
parents:
diff changeset
   219
  // Is the defining class loader of this class the default loader?
489c9b5090e2 Initial load
duke
parents:
diff changeset
   220
  bool uses_default_loader();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   221
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
   222
  bool is_java_lang_Object() const;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   223
4567
7fc02fbe5c7a 6893268: additional dynamic language related optimizations in C2
twisti
parents: 4450
diff changeset
   224
  // Is this klass in the given package?
7fc02fbe5c7a 6893268: additional dynamic language related optimizations in C2
twisti
parents: 4450
diff changeset
   225
  bool is_in_package(const char* packagename) {
7fc02fbe5c7a 6893268: additional dynamic language related optimizations in C2
twisti
parents: 4450
diff changeset
   226
    return is_in_package(packagename, (int) strlen(packagename));
7fc02fbe5c7a 6893268: additional dynamic language related optimizations in C2
twisti
parents: 4450
diff changeset
   227
  }
7fc02fbe5c7a 6893268: additional dynamic language related optimizations in C2
twisti
parents: 4450
diff changeset
   228
  bool is_in_package(const char* packagename, int len);
7fc02fbe5c7a 6893268: additional dynamic language related optimizations in C2
twisti
parents: 4450
diff changeset
   229
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   230
  // What kind of ciObject is this?
13728
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
   231
  bool is_instance_klass() const { return true; }
882756847a04 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 12369
diff changeset
   232
  bool is_java_klass() const     { return true; }
14477
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents: 13728
diff changeset
   233
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents: 13728
diff changeset
   234
  // Dump the current state of this klass for compilation replay.
95e66ea71f71 6830717: replay of compilations would help with debugging
minqi
parents: 13728
diff changeset
   235
  virtual void dump_replay_data(outputStream* out);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   236
};
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5925
diff changeset
   237
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5925
diff changeset
   238
#endif // SHARE_VM_CI_CIINSTANCEKLASS_HPP