annotate src/share/vm/memory/metachunk.hpp @ 8804:91bf0bdae37b

8008217: CDS: Class data sharing limits the malloc heap on Solaris Summary: In 64bit VM move CDS archive address to 32G on all platforms using new flag SharedBaseAddress. In 32bit VM set CDS archive address to 3Gb on Linux and let other OSs pick the address. Reviewed-by: kvn, dcubed, zgu, hseigel
author coleenp
date Wed, 20 Mar 2013 08:04:54 -0400
parents e51c9860cf66
children c23dbf0e8ab7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
1 /*
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
4 *
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
7 * published by the Free Software Foundation.
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
8 *
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
13 * accompanied this code).
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
14 *
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
18 *
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
21 * questions.
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
22 *
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
23 */
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
24 #ifndef SHARE_VM_MEMORY_METACHUNK_HPP
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
25 #define SHARE_VM_MEMORY_METACHUNK_HPP
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
26
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
27 // Metachunk - Quantum of allocation from a Virtualspace
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
28 // Metachunks are reused (when freed are put on a global freelist) and
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
29 // have no permanent association to a SpaceManager.
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
30
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
31 // +--------------+ <- end
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
32 // | | --+ ---+
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
33 // | | | free |
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
34 // | | | |
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
35 // | | | | capacity
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
36 // | | | |
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
37 // | | <- top --+ |
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
38 // | | ---+ |
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
39 // | | | used |
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
40 // | | | |
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
41 // | | | |
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
42 // +--------------+ <- bottom ---+ ---+
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
43
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
44 class Metachunk VALUE_OBJ_CLASS_SPEC {
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
45 // link to support lists of chunks
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
46 Metachunk* _next;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
47 Metachunk* _prev;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
48
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
49 MetaWord* _bottom;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
50 MetaWord* _end;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
51 MetaWord* _top;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
52 size_t _word_size;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
53 // Used in a guarantee() so included in the Product builds
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
54 // even through it is only for debugging.
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
55 bool _is_free;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
56
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
57 // Metachunks are allocated out of a MetadataVirtualSpace and
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
58 // and use some of its space to describe itself (plus alignment
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
59 // considerations). Metadata is allocated in the rest of the chunk.
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
60 // This size is the overhead of maintaining the Metachunk within
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
61 // the space.
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
62 static size_t _overhead;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
63
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
64 void set_bottom(MetaWord* v) { _bottom = v; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
65 void set_end(MetaWord* v) { _end = v; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
66 void set_top(MetaWord* v) { _top = v; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
67 void set_word_size(size_t v) { _word_size = v; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
68 public:
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
69 #ifdef ASSERT
7446
e51c9860cf66 8005082: NPG: Add specialized Metachunk sizes for reflection and anonymous classloaders
jmasa
parents: 7185
diff changeset
70 Metachunk() : _bottom(NULL), _end(NULL), _top(NULL), _is_free(false),
e51c9860cf66 8005082: NPG: Add specialized Metachunk sizes for reflection and anonymous classloaders
jmasa
parents: 7185
diff changeset
71 _next(NULL), _prev(NULL) {}
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
72 #else
7446
e51c9860cf66 8005082: NPG: Add specialized Metachunk sizes for reflection and anonymous classloaders
jmasa
parents: 7185
diff changeset
73 Metachunk() : _bottom(NULL), _end(NULL), _top(NULL),
e51c9860cf66 8005082: NPG: Add specialized Metachunk sizes for reflection and anonymous classloaders
jmasa
parents: 7185
diff changeset
74 _next(NULL), _prev(NULL) {}
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
75 #endif
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
76
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
77 // Used to add a Metachunk to a list of Metachunks
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
78 void set_next(Metachunk* v) { _next = v; assert(v != this, "Boom");}
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
79 void set_prev(Metachunk* v) { _prev = v; assert(v != this, "Boom");}
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
80
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
81 MetaWord* allocate(size_t word_size);
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
82 static Metachunk* initialize(MetaWord* ptr, size_t word_size);
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
83
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
84 // Accessors
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
85 Metachunk* next() const { return _next; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
86 Metachunk* prev() const { return _prev; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
87 MetaWord* bottom() const { return _bottom; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
88 MetaWord* end() const { return _end; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
89 MetaWord* top() const { return _top; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
90 size_t word_size() const { return _word_size; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
91 size_t size() const volatile { return _word_size; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
92 void set_size(size_t v) { _word_size = v; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
93 bool is_free() { return _is_free; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
94 void set_is_free(bool v) { _is_free = v; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
95 static size_t overhead() { return _overhead; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
96 void clear_next() { set_next(NULL); }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
97 void link_prev(Metachunk* ptr) { set_prev(ptr); }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
98 uintptr_t* end() { return ((uintptr_t*) this) + size(); }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
99 bool cantCoalesce() const { return false; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
100 void link_next(Metachunk* ptr) { set_next(ptr); }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
101 void link_after(Metachunk* ptr){
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
102 link_next(ptr);
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
103 if (ptr != NULL) ptr->link_prev(this);
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
104 }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
105
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
106 // Reset top to bottom so chunk can be reused.
7446
e51c9860cf66 8005082: NPG: Add specialized Metachunk sizes for reflection and anonymous classloaders
jmasa
parents: 7185
diff changeset
107 void reset_empty() { _top = (_bottom + _overhead); _next = NULL; _prev = NULL; }
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
108 bool is_empty() { return _top == (_bottom + _overhead); }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
109
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
110 // used (has been allocated)
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
111 // free (available for future allocations)
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
112 // capacity (total size of chunk)
7446
e51c9860cf66 8005082: NPG: Add specialized Metachunk sizes for reflection and anonymous classloaders
jmasa
parents: 7185
diff changeset
113 size_t used_word_size() const;
e51c9860cf66 8005082: NPG: Add specialized Metachunk sizes for reflection and anonymous classloaders
jmasa
parents: 7185
diff changeset
114 size_t free_word_size() const;
e51c9860cf66 8005082: NPG: Add specialized Metachunk sizes for reflection and anonymous classloaders
jmasa
parents: 7185
diff changeset
115 size_t capacity_word_size()const;
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
116
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
117 // Debug support
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
118 #ifdef ASSERT
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
119 void* prev_addr() const { return (void*)&_prev; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
120 void* next_addr() const { return (void*)&_next; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
121 void* size_addr() const { return (void*)&_word_size; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
122 #endif
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
123 bool verify_chunk_in_free_list(Metachunk* tc) const { return true; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
124 bool verify_par_locked() { return true; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
125
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
126 void assert_is_mangled() const {/* Don't check "\*/}
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
127
7185
90273fc0a981 8000662: NPG: nashorn ant clean test262 out-of-memory with Java heap
coleenp
parents: 6885
diff changeset
128 NOT_PRODUCT(void mangle();)
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
129
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
130 void print_on(outputStream* st) const;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
131 void verify();
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
132 };
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
133 #endif // SHARE_VM_MEMORY_METACHUNK_HPP