Mercurial > hg > graal-jvmci-8
comparison src/share/vm/gc_implementation/g1/g1BiasedArray.hpp @ 17760:5479cb006184
8036860: Pad and cache-align the BiasedMappedArray
Summary: Pad and cache-align BiasedMappedArray instances by default to avoid performance variability problems due to false sharing, as instances of this data structures are typically used for performance sensitive code.
Reviewed-by: brutisso, stefank
author | tschatzl |
---|---|
date | Mon, 24 Mar 2014 15:31:00 +0100 |
parents | a19bea467577 |
children | 78bbf4d43a14 |
comparison
equal
deleted
inserted
replaced
17759:bc22cbb8b45a | 17760:5479cb006184 |
---|---|
23 */ | 23 */ |
24 | 24 |
25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1BIASEDARRAY_HPP | 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1BIASEDARRAY_HPP |
26 #define SHARE_VM_GC_IMPLEMENTATION_G1_G1BIASEDARRAY_HPP | 26 #define SHARE_VM_GC_IMPLEMENTATION_G1_G1BIASEDARRAY_HPP |
27 | 27 |
28 #include "memory/allocation.hpp" | |
28 #include "utilities/debug.hpp" | 29 #include "utilities/debug.hpp" |
29 #include "memory/allocation.inline.hpp" | |
30 | 30 |
31 // Implements the common base functionality for arrays that contain provisions | 31 // Implements the common base functionality for arrays that contain provisions |
32 // for accessing its elements using a biased index. | 32 // for accessing its elements using a biased index. |
33 // The element type is defined by the instantiating the template. | 33 // The element type is defined by the instantiating the template. |
34 class G1BiasedMappedArrayBase VALUE_OBJ_CLASS_SPEC { | 34 class G1BiasedMappedArrayBase VALUE_OBJ_CLASS_SPEC { |
46 | 46 |
47 G1BiasedMappedArrayBase() : _base(NULL), _length(0), _biased_base(NULL), | 47 G1BiasedMappedArrayBase() : _base(NULL), _length(0), _biased_base(NULL), |
48 _bias(0), _shift_by(0) { } | 48 _bias(0), _shift_by(0) { } |
49 | 49 |
50 // Allocate a new array, generic version. | 50 // Allocate a new array, generic version. |
51 static address create_new_base_array(size_t length, size_t elem_size) { | 51 static address create_new_base_array(size_t length, size_t elem_size); |
52 assert(length > 0, "just checking"); | |
53 assert(elem_size > 0, "just checking"); | |
54 return NEW_C_HEAP_ARRAY(u_char, length * elem_size, mtGC); | |
55 } | |
56 | 52 |
57 // Initialize the members of this class. The biased start address of this array | 53 // Initialize the members of this class. The biased start address of this array |
58 // is the bias (in elements) multiplied by the element size. | 54 // is the bias (in elements) multiplied by the element size. |
59 void initialize_base(address base, size_t length, size_t bias, size_t elem_size, uint shift_by) { | 55 void initialize_base(address base, size_t length, size_t bias, size_t elem_size, uint shift_by) { |
60 assert(base != NULL, "just checking"); | 56 assert(base != NULL, "just checking"); |