hotspot/src/share/vm/oops/cpCacheKlass.hpp
author ysr
Thu, 03 Dec 2009 15:01:57 -0800
changeset 4461 c17c526d36ef
parent 2105 347008ce7984
child 4584 e2a449e8cc6f
permissions -rw-r--r--
6906727: UseCompressedOops: some card-marking fixes related to object arrays Summary: Introduced a new write_ref_array(HeapWords* start, size_t count) method that does the requisite MemRegion range calculation so (some of the) clients of the erstwhile write_ref_array(MemRegion mr) do not need to worry. This removed all external uses of array_size(), which was also simplified and made private. Asserts were added to catch other possible issues. Further, less essential, fixes stemming from this investigation are deferred to CR 6904516 (to follow shortly in hs17). Reviewed-by: kvn, coleenp, jmasa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
2105
347008ce7984 6814575: Update copyright year
xdono
parents: 2006
diff changeset
     2
 * Copyright 1998-2009 Sun Microsystems, Inc.  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
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    19
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    20
 * CA 95054 USA or visit www.sun.com if you need additional information or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    21
 * have any questions.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    25
class constantPoolCacheKlass: public Klass {
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    26
  juint    _alloc_size;        // allocation profiling support
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    27
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    28
  // Dispatched klass operations
489c9b5090e2 Initial load
duke
parents:
diff changeset
    29
  bool oop_is_constantPoolCache() const          { return true; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
  int  oop_size(oop obj) const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
  int  klass_oop_size() const                    { return object_size(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
  // Allocation
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
  DEFINE_ALLOCATE_PERMANENT(constantPoolCacheKlass);
2006
f2d2f0f20063 6792421: assert(_bitMap->isMarked(addr+size-1),inconsistent Printezis mark)
jmasa
parents: 670
diff changeset
    35
  constantPoolCacheOop allocate(int length, bool is_conc_safe, TRAPS);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
  static klassOop create_klass(TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
  // Casting from klassOop
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
  static constantPoolCacheKlass* cast(klassOop k) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
    assert(k->klass_part()->oop_is_constantPoolCache(), "cast to constantPoolCacheKlass");
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
    return (constantPoolCacheKlass*)k->klass_part();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
  // Sizing
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    45
  static int header_size()       { return oopDesc::header_size() + sizeof(constantPoolCacheKlass)/HeapWordSize; }
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    46
  int object_size() const        { return align_object_size(header_size()); }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
  // Garbage collection
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
  void oop_follow_contents(oop obj);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
  int oop_adjust_pointers(oop obj);
2006
f2d2f0f20063 6792421: assert(_bitMap->isMarked(addr+size-1),inconsistent Printezis mark)
jmasa
parents: 670
diff changeset
    51
  virtual bool oop_is_conc_safe(oop obj) const;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
  // Parallel Scavenge and Parallel Old
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
  PARALLEL_GC_DECLS
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
  // Iterators
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
  int oop_oop_iterate(oop obj, OopClosure* blk);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
  int oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
360
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    60
  // Allocation profiling support
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    61
  juint alloc_size() const              { return _alloc_size; }
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    62
  void set_alloc_size(juint n)          { _alloc_size = n; }
21d113ecbf6a 6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents: 1
diff changeset
    63
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
#ifndef PRODUCT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
  // Printing
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
  void oop_print_on(oop obj, outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
  // Verification
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
  const char* internal_name() const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
  void oop_verify_on(oop obj, outputStream* st);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
};