annotate src/share/vm/memory/metachunk.hpp @ 10241:d17700c82d7d

8006088: Incompatible heap size flags accepted by VM Summary: Make processing of minimum, initial and maximum heap size more intiutive by removing previous limitations on allowed values, and make error reporting consistent. Further, fix errors in ergonomic heap sizing. Reviewed-by: johnc, jwilhelm, tamao
author tschatzl
date Mon, 06 May 2013 17:19:42 +0200
parents c23dbf0e8ab7
children bdfbb1fb19ca
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
10175
c23dbf0e8ab7 8011268: NPG: Free unused VirtualSpaceNodes
jmasa
parents: 7446
diff changeset
44 class VirtualSpaceNode;
c23dbf0e8ab7 8011268: NPG: Free unused VirtualSpaceNodes
jmasa
parents: 7446
diff changeset
45
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
46 class Metachunk VALUE_OBJ_CLASS_SPEC {
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
47 // link to support lists of chunks
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
48 Metachunk* _next;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
49 Metachunk* _prev;
10175
c23dbf0e8ab7 8011268: NPG: Free unused VirtualSpaceNodes
jmasa
parents: 7446
diff changeset
50 VirtualSpaceNode* _container;
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
51
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
52 MetaWord* _bottom;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
53 MetaWord* _end;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
54 MetaWord* _top;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
55 size_t _word_size;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
56 // Used in a guarantee() so included in the Product builds
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
57 // even through it is only for debugging.
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
58 bool _is_free;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
59
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
60 // Metachunks are allocated out of a MetadataVirtualSpace and
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
61 // and use some of its space to describe itself (plus alignment
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
62 // considerations). Metadata is allocated in the rest of the chunk.
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
63 // This size is the overhead of maintaining the Metachunk within
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
64 // the space.
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
65 static size_t _overhead;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
66
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
67 public:
10175
c23dbf0e8ab7 8011268: NPG: Free unused VirtualSpaceNodes
jmasa
parents: 7446
diff changeset
68 Metachunk(size_t word_size , VirtualSpaceNode* container);
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
69
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
70 // Used to add a Metachunk to a list of Metachunks
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
71 void set_next(Metachunk* v) { _next = v; assert(v != this, "Boom");}
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
72 void set_prev(Metachunk* v) { _prev = v; assert(v != this, "Boom");}
10175
c23dbf0e8ab7 8011268: NPG: Free unused VirtualSpaceNodes
jmasa
parents: 7446
diff changeset
73 void set_container(VirtualSpaceNode* v) { _container = v; }
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
74
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
75 MetaWord* allocate(size_t word_size);
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 // Accessors
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
78 Metachunk* next() const { return _next; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
79 Metachunk* prev() const { return _prev; }
10175
c23dbf0e8ab7 8011268: NPG: Free unused VirtualSpaceNodes
jmasa
parents: 7446
diff changeset
80 VirtualSpaceNode* container() const { return _container; }
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
81 MetaWord* bottom() const { return _bottom; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
82 MetaWord* end() const { return _end; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
83 MetaWord* top() const { return _top; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
84 size_t word_size() const { return _word_size; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
85 size_t size() const volatile { return _word_size; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
86 void set_size(size_t v) { _word_size = v; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
87 bool is_free() { return _is_free; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
88 void set_is_free(bool v) { _is_free = v; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
89 static size_t overhead() { return _overhead; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
90 void clear_next() { set_next(NULL); }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
91 void link_prev(Metachunk* ptr) { set_prev(ptr); }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
92 uintptr_t* end() { return ((uintptr_t*) this) + size(); }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
93 bool cantCoalesce() const { return false; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
94 void link_next(Metachunk* ptr) { set_next(ptr); }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
95 void link_after(Metachunk* ptr){
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
96 link_next(ptr);
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
97 if (ptr != NULL) ptr->link_prev(this);
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
98 }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
99
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
100 // 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
101 void reset_empty() { _top = (_bottom + _overhead); _next = NULL; _prev = NULL; }
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
102 bool is_empty() { return _top == (_bottom + _overhead); }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
103
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
104 // used (has been allocated)
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
105 // free (available for future allocations)
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
106 // capacity (total size of chunk)
7446
e51c9860cf66 8005082: NPG: Add specialized Metachunk sizes for reflection and anonymous classloaders
jmasa
parents: 7185
diff changeset
107 size_t used_word_size() const;
e51c9860cf66 8005082: NPG: Add specialized Metachunk sizes for reflection and anonymous classloaders
jmasa
parents: 7185
diff changeset
108 size_t free_word_size() const;
e51c9860cf66 8005082: NPG: Add specialized Metachunk sizes for reflection and anonymous classloaders
jmasa
parents: 7185
diff changeset
109 size_t capacity_word_size()const;
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
110
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
111 // Debug support
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
112 #ifdef ASSERT
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
113 void* prev_addr() const { return (void*)&_prev; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
114 void* next_addr() const { return (void*)&_next; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
115 void* size_addr() const { return (void*)&_word_size; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
116 #endif
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
117 bool verify_chunk_in_free_list(Metachunk* tc) const { return true; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
118 bool verify_par_locked() { return true; }
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
119
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
120 void assert_is_mangled() const {/* Don't check "\*/}
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
121
7185
90273fc0a981 8000662: NPG: nashorn ant clean test262 out-of-memory with Java heap
coleenp
parents: 6885
diff changeset
122 NOT_PRODUCT(void mangle();)
6885
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
123
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
124 void print_on(outputStream* st) const;
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
125 void verify();
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
126 };
685df3c6f84b 7045397: NPG: Add freelists to class loader arenas.
jmasa
parents:
diff changeset
127 #endif // SHARE_VM_MEMORY_METACHUNK_HPP