hotspot/src/share/vm/memory/allocation.inline.hpp
author ysr
Wed, 07 Sep 2011 13:55:42 -0700
changeset 10526 3e92f211533f
parent 8325 cc62dbe71e6a
child 13195 be27e1b6a4b9
permissions -rw-r--r--
4965777: GC changes to support use of discovered field for pending references Summary: If and when the reference handler thread is able to use the discovered field to link reference objects in its pending list, so will GC. In that case, GC will scan through this field once a reference object has been placed on the pending list, but not scan that field before that stage, as the field is used by the concurrent GC thread to link discovered objects. When ReferenceHandleR thread does not use the discovered field for the purpose of linking the elements in the pending list, as would be the case in older JDKs, the JVM will fall back to the old behaviour of using the next field for that purpose. Reviewed-by: jcoomes, mchung, stefank
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
8320
544210b4dd48 7017124: Fix some VM stats to avoid 32-bit overflow
kvn
parents: 7397
diff changeset
     2
 * Copyright (c) 1997, 2011, 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: 1
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
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: 1
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: 5547
diff changeset
    25
#ifndef SHARE_VM_MEMORY_ALLOCATION_INLINE_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    26
#define SHARE_VM_MEMORY_ALLOCATION_INLINE_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    27
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    28
#include "runtime/os.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    29
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
// Explicit C-heap memory management
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
void trace_heap_malloc(size_t size, const char* name, void *p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
void trace_heap_free(void *p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
8325
cc62dbe71e6a 7018849: 7017124 fix broke VM build on some platforms
kvn
parents: 8320
diff changeset
    35
#ifndef PRODUCT
8320
544210b4dd48 7017124: Fix some VM stats to avoid 32-bit overflow
kvn
parents: 7397
diff changeset
    36
// Increments unsigned long value for statistics (not atomic on MP).
544210b4dd48 7017124: Fix some VM stats to avoid 32-bit overflow
kvn
parents: 7397
diff changeset
    37
inline void inc_stat_counter(volatile julong* dest, julong add_value) {
8325
cc62dbe71e6a 7018849: 7017124 fix broke VM build on some platforms
kvn
parents: 8320
diff changeset
    38
#if defined(SPARC) || defined(X86)
cc62dbe71e6a 7018849: 7017124 fix broke VM build on some platforms
kvn
parents: 8320
diff changeset
    39
  // Sparc and X86 have atomic jlong (8 bytes) instructions
8320
544210b4dd48 7017124: Fix some VM stats to avoid 32-bit overflow
kvn
parents: 7397
diff changeset
    40
  julong value = Atomic::load((volatile jlong*)dest);
544210b4dd48 7017124: Fix some VM stats to avoid 32-bit overflow
kvn
parents: 7397
diff changeset
    41
  value += add_value;
544210b4dd48 7017124: Fix some VM stats to avoid 32-bit overflow
kvn
parents: 7397
diff changeset
    42
  Atomic::store((jlong)value, (volatile jlong*)dest);
8325
cc62dbe71e6a 7018849: 7017124 fix broke VM build on some platforms
kvn
parents: 8320
diff changeset
    43
#else
cc62dbe71e6a 7018849: 7017124 fix broke VM build on some platforms
kvn
parents: 8320
diff changeset
    44
  // possible word-tearing during load/store
cc62dbe71e6a 7018849: 7017124 fix broke VM build on some platforms
kvn
parents: 8320
diff changeset
    45
  *dest += add_value;
cc62dbe71e6a 7018849: 7017124 fix broke VM build on some platforms
kvn
parents: 8320
diff changeset
    46
#endif
8320
544210b4dd48 7017124: Fix some VM stats to avoid 32-bit overflow
kvn
parents: 7397
diff changeset
    47
}
8325
cc62dbe71e6a 7018849: 7017124 fix broke VM build on some platforms
kvn
parents: 8320
diff changeset
    48
#endif
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
// allocate using malloc; will fail if no memory available
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
inline char* AllocateHeap(size_t size, const char* name = NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
  char* p = (char*) os::malloc(size);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
  #ifdef ASSERT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
  if (PrintMallocFree) trace_heap_malloc(size, name, p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
  #else
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
  Unused_Variable(name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
  #endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
  if (p == NULL) vm_exit_out_of_memory(size, name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
  return p;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
inline char* ReallocateHeap(char *old, size_t size, const char* name = NULL) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
  char* p = (char*) os::realloc(old,size);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
  #ifdef ASSERT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
  if (PrintMallocFree) trace_heap_malloc(size, name, p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
  #else
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
  Unused_Variable(name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
  #endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
  if (p == NULL) vm_exit_out_of_memory(size, name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
  return p;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
}
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
inline void FreeHeap(void* p) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
  #ifdef ASSERT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
  if (PrintMallocFree) trace_heap_free(p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
  #endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
  os::free(p);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
}
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    79
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    80
#endif // SHARE_VM_MEMORY_ALLOCATION_INLINE_HPP